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.kerberos.shared.io.decoder;
21
22
23 import java.util.Enumeration;
24
25 import org.apache.directory.server.kerberos.shared.messages.value.HostAddress;
26 import org.apache.directory.server.kerberos.shared.messages.value.types.HostAddrType;
27 import org.apache.directory.server.kerberos.shared.messages.value.HostAddresses;
28 import org.apache.directory.shared.asn1.der.DEREncodable;
29 import org.apache.directory.shared.asn1.der.DERInteger;
30 import org.apache.directory.shared.asn1.der.DEROctetString;
31 import org.apache.directory.shared.asn1.der.DERSequence;
32 import org.apache.directory.shared.asn1.der.DERTaggedObject;
33
34
35
36
37
38
39 public class HostAddressDecoder
40 {
41
42
43
44
45
46
47 protected static HostAddress decode( DERSequence sequence )
48 {
49 HostAddrType type = HostAddrType.ADDRTYPE_INET;
50 byte[] value = null;
51
52 for ( Enumeration<DEREncodable> e = sequence.getObjects(); e.hasMoreElements(); )
53 {
54 DERTaggedObject object = ( DERTaggedObject ) e.nextElement();
55 int tag = object.getTagNo();
56 DEREncodable derObject = object.getObject();
57
58 switch ( tag )
59 {
60 case 0:
61 DERInteger addressType = ( DERInteger ) derObject;
62 type = HostAddrType.getTypeByOrdinal( addressType.intValue() );
63 break;
64
65 case 1:
66 DEROctetString address = ( DEROctetString ) derObject;
67 value = address.getOctets();
68 break;
69 }
70 }
71
72 return new HostAddress( type, value );
73 }
74
75
76
77
78
79
80
81
82 protected static HostAddresses decodeSequence( DERSequence sequence )
83 {
84 HostAddress[] addresses = new HostAddress[sequence.size()];
85
86 int ii = 0;
87
88 for ( Enumeration<DEREncodable> e = sequence.getObjects(); e.hasMoreElements(); )
89 {
90 DERSequence object = ( DERSequence ) e.nextElement();
91 HostAddress address = decode( object );
92 addresses[ii] = address;
93 ii++;
94 }
95
96 return new HostAddresses( addresses );
97 }
98 }