NetworkAuthenticationTypeElement.java revision 77f2b82a2e80af8da52c22d69a76def6d4209757
16a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistpackage com.android.server.wifi.anqp;
26a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
36a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.net.ProtocolException;
46a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.nio.ByteBuffer;
56a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.nio.charset.StandardCharsets;
66a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.util.ArrayList;
76a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.util.Collections;
86a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.util.List;
96a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
106a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport static com.android.server.wifi.anqp.Constants.BYTE_MASK;
116a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
126a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist/**
136a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist * The Network Authentication Type ANQP Element, IEEE802.11-2012 section 8.4.4.6
146a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist */
156a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistpublic class NetworkAuthenticationTypeElement extends ANQPElement {
166a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
176a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    private final List<NetworkAuthentication> m_authenticationTypes;
186a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
196a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    public enum NwkAuthTypeEnum {
206a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        TermsAndConditions,
216a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        OnLineEnrollment,
226a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        HTTPRedirection,
236a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        DNSRedirection,
246a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        Reserved
256a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
266a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
276a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    public static class NetworkAuthentication {
286a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        private final NwkAuthTypeEnum m_type;
296a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        private final String m_url;
306a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
316a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        private NetworkAuthentication(NwkAuthTypeEnum type, String url) {
326a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist            m_type = type;
336a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist            m_url = url;
346a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        }
356a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
366a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        public NwkAuthTypeEnum getType() {
376a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist            return m_type;
386a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        }
396a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
406a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        public String getURL() {
416a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist            return m_url;
426a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        }
436a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
446a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        @Override
456a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        public String toString() {
466a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist            return "NetworkAuthentication{" +
476a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist                    "m_type=" + m_type +
486a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist                    ", m_url='" + m_url + '\'' +
496a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist                    '}';
506a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        }
516a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
526a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
536a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    public NetworkAuthenticationTypeElement(Constants.ANQPElementType infoID, ByteBuffer payload)
546a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist            throws ProtocolException {
556a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
566a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        super(infoID);
576a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
586a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        m_authenticationTypes = new ArrayList<NetworkAuthentication>();
596a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
606a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        while (payload.hasRemaining()) {
616a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist            int typeNumber = payload.get() & BYTE_MASK;
626a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist            NwkAuthTypeEnum type;
636a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist            type = typeNumber >= NwkAuthTypeEnum.values().length ?
646a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist                    NwkAuthTypeEnum.Reserved :
656a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist                    NwkAuthTypeEnum.values()[typeNumber];
666a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
676a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist            m_authenticationTypes.add(new NetworkAuthentication(type,
686a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist                    Constants.getPrefixedString(payload, 2, StandardCharsets.UTF_8)));
696a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        }
706a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
716a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
726a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    public List<NetworkAuthentication> getAuthenticationTypes() {
736a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        return Collections.unmodifiableList(m_authenticationTypes);
746a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
7577f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist
7677f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist    @Override
7777f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist    public String toString() {
7877f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist        return "NetworkAuthenticationType{" +
7977f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist                "m_authenticationTypes=" + m_authenticationTypes +
8077f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist                '}';
8177f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist    }
826a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist}
83