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