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.KerberosTime;
26 import org.apache.directory.server.kerberos.shared.messages.value.LastRequest;
27 import org.apache.directory.server.kerberos.shared.messages.value.LastRequestEntry;
28 import org.apache.directory.server.kerberos.shared.messages.value.LastRequestType;
29 import org.apache.directory.shared.asn1.der.DEREncodable;
30 import org.apache.directory.shared.asn1.der.DERGeneralizedTime;
31 import org.apache.directory.shared.asn1.der.DERInteger;
32 import org.apache.directory.shared.asn1.der.DERSequence;
33 import org.apache.directory.shared.asn1.der.DERTaggedObject;
34
35
36
37
38
39
40 public class LastRequestDecoder
41 {
42
43
44
45
46
47
48 protected static LastRequest decodeSequence( DERSequence sequence )
49 {
50 LastRequestEntry[] entries = new LastRequestEntry[sequence.size()];
51
52 int ii = 0;
53 for ( Enumeration<DEREncodable> e = sequence.getObjects(); e.hasMoreElements(); )
54 {
55 DERSequence object = ( DERSequence ) e.nextElement();
56 LastRequestEntry entry = decode( object );
57 entries[ii] = entry;
58 ii++;
59 }
60
61 return new LastRequest( entries );
62 }
63
64
65 protected static LastRequestEntry decode( DERSequence sequence )
66 {
67 LastRequestType type = LastRequestType.NONE;
68 KerberosTime value = null;
69
70 for ( Enumeration<DEREncodable> e = sequence.getObjects(); e.hasMoreElements(); )
71 {
72 DERTaggedObject object = ( DERTaggedObject ) e.nextElement();
73 int tag = object.getTagNo();
74 DEREncodable derObject = object.getObject();
75
76 switch ( tag )
77 {
78 case 0:
79 DERInteger tag0 = ( DERInteger ) derObject;
80 type = LastRequestType.getTypeByOrdinal( tag0.intValue() );
81 break;
82 case 1:
83 DERGeneralizedTime tag1 = ( DERGeneralizedTime ) derObject;
84 value = KerberosTimeDecoder.decode( tag1 );
85 break;
86 }
87 }
88
89 return new LastRequestEntry( type, value );
90 }
91 }