blob: 2fb29fb2fe1fc00bb629d98f814c2e50e2148a2a [file] [log] [blame]
package aQute.libg.asn1;
import java.util.*;
public class PDU implements Types, Iterable<PDU> {
final int identifier;
final Object payload;
byte data[] = new byte[100];
public PDU(int id, Object payload) {
identifier = id;
this.payload = payload;
}
public PDU(Date payload) {
identifier = UTCTIME;
this.payload = payload;
}
public PDU(int n) {
this(UNIVERSAL + INTEGER, n);
}
public PDU(boolean value) {
this(UNIVERSAL + BOOLEAN, value);
}
public PDU(String s) throws Exception {
this(UNIVERSAL + IA5STRING, s);
}
public PDU(byte[] data) {
this(UNIVERSAL + OCTET_STRING, data);
}
public PDU(BitSet bits) {
this(UNIVERSAL + BIT_STRING, bits);
}
public PDU(int top, int l1, int... remainder) {
identifier = UNIVERSAL + OBJECT_IDENTIFIER;
int[] ids = new int[remainder.length + 2];
ids[0] = top;
ids[1] = l1;
System.arraycopy(remainder, 0, ids, 2, remainder.length);
payload = ids;
}
public PDU(int tag, PDU... set) {
this(tag, (Object) set);
}
public PDU(PDU... set) {
this(SEQUENCE + CONSTRUCTED, set);
}
public int getTag() {
return identifier & TAGMASK;
}
int getClss() {
return identifier & CLASSMASK;
}
public boolean isConstructed() {
return (identifier & CONSTRUCTED) != 0;
}
public String getString() {
return (String) payload;
}
public Iterator<PDU> iterator() {
return Arrays.asList((PDU[]) payload).iterator();
}
public int[] getOID() {
assert getTag() == OBJECT_IDENTIFIER;
return (int[]) payload;
}
public Boolean getBoolean() {
assert getTag() == BOOLEAN;
return (Boolean) payload;
}
public BitSet getBits() {
assert getTag() == BIT_STRING;
return (BitSet) payload;
}
public int getInt() {
assert getTag() == INTEGER || getTag() == ENUMERATED;
return (Integer) payload;
}
public byte[] getBytes() {
return (byte[]) payload;
}
public PDU[] getChildren() {
assert isConstructed();
return (PDU[]) payload;
}
public Date getDate() {
assert getTag() == UTCTIME || getTag() == GENERALIZED_TIME;
return (Date) payload;
}
}