NAIRealmElement.java revision 77f2b82a2e80af8da52c22d69a76def6d4209757
1package com.android.server.wifi.anqp;
2
3import java.net.ProtocolException;
4import java.nio.ByteBuffer;
5import java.util.ArrayList;
6import java.util.Collections;
7import java.util.List;
8
9import static com.android.server.wifi.anqp.Constants.BYTES_IN_SHORT;
10import static com.android.server.wifi.anqp.Constants.SHORT_MASK;
11
12/**
13 * The NAI Realm ANQP Element, IEEE802.11-2012 section 8.4.4.10
14 */
15public class NAIRealmElement extends ANQPElement {
16    private final List<NAIRealmData> mRealmData;
17
18    public NAIRealmElement(Constants.ANQPElementType infoID, ByteBuffer payload)
19            throws ProtocolException {
20        super(infoID);
21
22        if (!payload.hasRemaining()) {
23            mRealmData = Collections.emptyList();
24            return;
25        }
26
27        if (payload.remaining() < BYTES_IN_SHORT) {
28            throw new ProtocolException("Runt NAI Realm: " + payload.remaining());
29        }
30
31        int count = payload.getShort() & SHORT_MASK;
32        mRealmData = new ArrayList<NAIRealmData>(count);
33        while (count > 0) {
34            mRealmData.add(new NAIRealmData(payload));
35            count--;
36        }
37    }
38
39    public List<NAIRealmData> getRealmData() {
40        return Collections.unmodifiableList(mRealmData);
41    }
42
43    @Override
44    public String toString() {
45        StringBuilder sb = new StringBuilder();
46        sb.append("NAI Realm:\n");
47        for (NAIRealmData data : mRealmData) {
48            sb.append(data);
49        }
50        return sb.toString();
51    }
52}
53