1
10package org.jstk.asn1;
11
12import java.io.IOException;
13public class ASN1Any extends ASN1Type {
14 private ASN1Type instance = null;
15 public ASN1Any(){
16 super(UNIVERSAL, NONE, ANY, ANY);
17 }
18 public ASN1Any(byte tagClass, int taggingMethod, int tagNumber){
19 super(tagClass, taggingMethod, tagNumber, ANY);
20 }
21 public void decode(ASN1PullParser parser) throws ASN1PullParserException, IOException {
22 logger.entering(getClass().getName(), "decode");
23 int event = parser.next();
24 logger.fine("[ASN1Any.decode()] event = " + event + ", off = " + parser.getOffset() +
25 ", len = " + parser.getLength());
26 instance = createASN1Type(event, parser.getTagClass());
27 if (instance instanceof ASN1Any){
28 logger.fine("unknown type");
29 instance.setTagClass(parser.getTagClass());
30 instance.setTagNumber(parser.getTagNumber());
31 instance.setConsMask(parser.getConsMask());
32 instance.setValue(parser.getContent());
33 instance.setLength(parser.getLength());
34 } else {
35 logger.fine("known type");
36 parser.prev(); instance.decode(parser);
38 }
39 logger.exiting(getClass().getName(), "decode");
40 }
41
42 public byte[] encode(){
43 logger.entering(getClass().getName(), "encode");
44 byte[] bytes;
45 if (instance == null)
46 bytes = encode1();
47 else
48 bytes = instance.encode();
49 logger.exiting(getClass().getName(), "encode");
50 return bytes;
51 }
52
53 public void setInstance(ASN1Type instance){
54 this.instance = instance;
55 }
56
57 public static ASN1Type createASN1Type(int event, byte tagClass){
58 if (tagClass != UNIVERSAL)
59 return new ASN1Any();
60
61 switch (event){
62 case ASN1PullParser.BOOLEAN:
63 return new ASN1Boolean();
64 case ASN1PullParser.INTEGER:
65 return new ASN1Integer();
66 case ASN1PullParser.BIT_STRING:
67 return new ASN1BitString();
68 case ASN1PullParser.OCTET_STRING:
69 return new ASN1OctetString();
70 case ASN1PullParser.NULL:
71 return new ASN1Null();
72 case ASN1PullParser.OID:
73 return new ASN1Oid();
74 case ASN1PullParser.START_SEQ:
75 return new ASN1Seq();
76 case ASN1PullParser.START_SET:
77 return new ASN1Set();
78 case ASN1PullParser.PrintableString:
79 return new ASN1PrintableString();
80 case ASN1PullParser.IA5String:
81 return new ASN1IA5String();
82 case ASN1PullParser.UTCTime:
83 return new ASN1UTCTime();
84 default:
85 return new ASN1Any();
86 }
87 }
88
89 public String toString(){
90 if (instance == null)
91 return null;
92 return instance.toString();
93 }
94}