11dc52f076977039a6bf112885feca6638c05cd29Peter Qiu/*
21dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * Copyright (C) 2016 The Android Open Source Project
31dc52f076977039a6bf112885feca6638c05cd29Peter Qiu *
41dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * Licensed under the Apache License, Version 2.0 (the "License");
51dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * you may not use this file except in compliance with the License.
61dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * You may obtain a copy of the License at
71dc52f076977039a6bf112885feca6638c05cd29Peter Qiu *
81dc52f076977039a6bf112885feca6638c05cd29Peter Qiu *      http://www.apache.org/licenses/LICENSE-2.0
91dc52f076977039a6bf112885feca6638c05cd29Peter Qiu *
101dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * Unless required by applicable law or agreed to in writing, software
111dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * distributed under the License is distributed on an "AS IS" BASIS,
121dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * See the License for the specific language governing permissions and
141dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * limitations under the License.
151dc52f076977039a6bf112885feca6638c05cd29Peter Qiu */
161dc52f076977039a6bf112885feca6638c05cd29Peter Qiu
178ca4ac971a9b862fbd69c57af3a3c0029a6b9f4dPeter Qiupackage com.android.server.wifi.hotspot2.anqp;
186a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
191dc52f076977039a6bf112885feca6638c05cd29Peter Qiuimport com.android.internal.annotations.VisibleForTesting;
201dc52f076977039a6bf112885feca6638c05cd29Peter Qiu
211dc52f076977039a6bf112885feca6638c05cd29Peter Qiuimport java.nio.BufferUnderflowException;
226a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.nio.ByteBuffer;
236a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.util.ArrayList;
246a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.util.Collections;
256a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.util.List;
266a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
276a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist/**
286a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist * The Connection Capability vendor specific ANQP Element,
296a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist * Wi-Fi Alliance Hotspot 2.0 (Release 2) Technical Specification - Version 5.00,
306a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist * section 4.5
311dc52f076977039a6bf112885feca6638c05cd29Peter Qiu *
321dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * Format:
331dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * | ProtoPort Tuple #1 (optiional) | ....
341dc52f076977039a6bf112885feca6638c05cd29Peter Qiu *                4
356a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist */
366a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistpublic class HSConnectionCapabilityElement extends ANQPElement {
371dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    private final List<ProtocolPortTuple> mStatusList;
386a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
391dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    @VisibleForTesting
401dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    public HSConnectionCapabilityElement(List<ProtocolPortTuple> statusList) {
411dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        super(Constants.ANQPElementType.HSConnCapability);
421dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        mStatusList = statusList;
431dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    }
446a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
451dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    /**
461dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     * Parse a HSConnectionCapabilityElement from the given buffer.
471dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     *
481dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     * @param payload The byte buffer to read from
491dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     * @return {@link HSConnectionCapabilityElement}
501dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     * @throws BufferUnderflowException
511dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     */
521dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    public static HSConnectionCapabilityElement parse(ByteBuffer payload) {
531dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        List<ProtocolPortTuple> statusList = new ArrayList<>();
541dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        while (payload.hasRemaining()) {
551dc52f076977039a6bf112885feca6638c05cd29Peter Qiu            statusList.add(ProtocolPortTuple.parse(payload));
566a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        }
571dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        return new HSConnectionCapabilityElement(statusList);
586a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
596a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
601dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    public List<ProtocolPortTuple> getStatusList() {
611dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        return Collections.unmodifiableList(mStatusList);
621dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    }
636a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
641dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    @Override
651dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    public boolean equals(Object thatObject) {
661dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        if (this == thatObject) {
671dc52f076977039a6bf112885feca6638c05cd29Peter Qiu            return true;
681dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        }
691dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        if (!(thatObject instanceof HSConnectionCapabilityElement)) {
701dc52f076977039a6bf112885feca6638c05cd29Peter Qiu            return false;
716a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        }
721dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        HSConnectionCapabilityElement that = (HSConnectionCapabilityElement) thatObject;
731dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        return mStatusList.equals(that.mStatusList);
746a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
756a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
761dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    @Override
771dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    public int hashCode() {
781dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        return mStatusList.hashCode();
796a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
806a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
816a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    @Override
826a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    public String toString() {
8377f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist        return "HSConnectionCapability{" +
846a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist                "mStatusList=" + mStatusList +
856a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist                '}';
866a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
876a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist}
88