| 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; |
| } |
| |
| } |