1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.server.ldap;
21
22
23 import org.apache.directory.server.core.DirectoryService;
24 import org.apache.directory.server.schema.registries.AttributeTypeRegistry;
25 import org.apache.directory.shared.asn1.codec.Asn1CodecDecoder;
26 import org.apache.directory.shared.asn1.codec.Asn1CodecEncoder;
27 import org.apache.directory.shared.ldap.message.MessageDecoder;
28 import org.apache.directory.shared.ldap.message.MessageEncoder;
29 import org.apache.directory.shared.ldap.message.spi.BinaryAttributeDetector;
30 import org.apache.directory.shared.ldap.schema.AttributeType;
31 import org.apache.mina.filter.codec.ProtocolCodecFactory;
32 import org.apache.mina.filter.codec.ProtocolDecoder;
33 import org.apache.mina.filter.codec.ProtocolEncoder;
34
35
36
37
38
39
40
41
42 final class LdapProtocolCodecFactory implements ProtocolCodecFactory
43 {
44
45 final private DirectoryService directoryService;
46
47
48
49
50
51
52
53
54 public LdapProtocolCodecFactory( DirectoryService directoryService )
55 {
56 this.directoryService = directoryService;
57 }
58
59
60
61
62
63
64 public ProtocolEncoder getEncoder()
65 {
66 return new Asn1CodecEncoder( new MessageEncoder() );
67 }
68
69
70
71
72
73
74 public ProtocolDecoder getDecoder()
75 {
76 return new Asn1CodecDecoder( new MessageDecoder( new BinaryAttributeDetector()
77 {
78 public boolean isBinary( String id )
79 {
80 AttributeTypeRegistry attrRegistry = directoryService.getRegistries().getAttributeTypeRegistry();
81 try
82 {
83 AttributeType type = attrRegistry.lookup( id );
84 return ! type.getSyntax().isHumanReadable();
85 }
86 catch ( Exception e )
87 {
88 return false;
89 }
90 }
91 }) );
92 }
93 }