1ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistpackage com.android.hotspot2.asn1; 2ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 3ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.nio.ByteBuffer; 4ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.util.Collection; 5ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 6ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistpublic class Asn1Octets extends Asn1Object { 7ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private final byte[] mOctets; 8ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private final int mBitResidual; 9ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 10ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public Asn1Octets(int tag, Asn1Class asn1Class, int length, ByteBuffer data) { 11ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist super(tag, asn1Class, false, length); 12ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mOctets = new byte[length]; 13ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist data.get(mOctets); 14ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mBitResidual = -1; 15ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 16ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 17ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public Asn1Octets(int tag, Asn1Class asn1Class, int length, ByteBuffer data, int bitResidual) { 18ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist super(tag, asn1Class, false, length); 19ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mOctets = new byte[length - 1]; 20ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist data.get(mOctets); 21ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mBitResidual = bitResidual; 22ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 23ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 24ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public byte[] getOctets() { 25ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return mOctets; 26ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 27ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 28ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist @Override 29ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public Collection<Asn1Object> getChildren() { 30ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist throw new UnsupportedOperationException(); 31ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 32ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 33ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist @Override 34ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public String toString() { 35ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist StringBuilder sb = new StringBuilder(); 36ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist for (byte b : mOctets) { 37ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist sb.append(String.format(" %02x", b & Asn1Decoder.ByteMask)); 38ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 39ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist if (mBitResidual >= 0) { 40ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return super.toString() + '=' + sb + '/' + mBitResidual; 41ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } else if (getTag() == Asn1Decoder.TAG_NULL && getLength() == 0) { 42ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return super.toString(); 43ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } else { 44ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return super.toString() + '=' + sb; 45ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 46ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 47ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist} 48