10a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu/*
20a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu * Copyright (C) 2017 The Android Open Source Project
30a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu *
40a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu * Licensed under the Apache License, Version 2.0 (the "License");
50a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu * you may not use this file except in compliance with the License.
60a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu * You may obtain a copy of the License at
70a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu *
80a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu *      http://www.apache.org/licenses/LICENSE-2.0
90a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu *
100a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu * Unless required by applicable law or agreed to in writing, software
110a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu * distributed under the License is distributed on an "AS IS" BASIS,
120a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu * See the License for the specific language governing permissions and
140a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu * limitations under the License.
150a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu */
160a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu
170a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiupackage com.android.server.wifi;
180a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu
190a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiuimport com.android.server.wifi.util.XmlUtil;
200a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu
210a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiuimport org.xmlpull.v1.XmlPullParser;
220a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiuimport org.xmlpull.v1.XmlPullParserException;
230a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiuimport org.xmlpull.v1.XmlSerializer;
240a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu
250a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiuimport java.io.IOException;
260a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiuimport java.util.HashSet;
270a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiuimport java.util.Set;
280a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu
290a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu/**
300a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu * This class performs serialization and parsing of XML data block that contain the list of
310a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu * deleted ephemeral SSIDs (XML block data inside <DeletedEphemeralSSIDList> tag).
320a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu */
330a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiupublic class DeletedEphemeralSsidsStoreData implements WifiConfigStore.StoreData {
340a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu    private static final String XML_TAG_SECTION_HEADER_DELETED_EPHEMERAL_SSID_LIST =
350a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu            "DeletedEphemeralSSIDList";
360a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu    private static final String XML_TAG_SSID_LIST = "SSIDList";
370a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu
380a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu    private Set<String> mSsidList;
390a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu
400a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu    DeletedEphemeralSsidsStoreData() {}
410a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu
420a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu    @Override
430a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu    public void serializeData(XmlSerializer out, boolean shared)
440a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu            throws XmlPullParserException, IOException {
450a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu        if (shared) {
460a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu            throw new XmlPullParserException("Share data not supported");
470a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu        }
480a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu        if (mSsidList != null) {
490a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu            XmlUtil.writeNextValue(out, XML_TAG_SSID_LIST, mSsidList);
500a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu        }
510a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu    }
520a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu
530a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu    @Override
540a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu    public void deserializeData(XmlPullParser in, int outerTagDepth, boolean shared)
550a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu            throws XmlPullParserException, IOException {
56f442f2fcab4c59429926cdf79e2499f4977faf4bRoshan Pius        // Ignore empty reads.
57f442f2fcab4c59429926cdf79e2499f4977faf4bRoshan Pius        if (in == null) {
58f442f2fcab4c59429926cdf79e2499f4977faf4bRoshan Pius            return;
59f442f2fcab4c59429926cdf79e2499f4977faf4bRoshan Pius        }
600a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu        if (shared) {
610a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu            throw new XmlPullParserException("Share data not supported");
620a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu        }
630a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu
640a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu        while (!XmlUtil.isNextSectionEnd(in, outerTagDepth)) {
650a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu            String[] valueName = new String[1];
660a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu            Object value = XmlUtil.readCurrentValue(in, valueName);
670a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu            if (valueName[0] == null) {
680a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu                throw new XmlPullParserException("Missing value name");
690a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu            }
700a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu            switch (valueName[0]) {
710a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu                case XML_TAG_SSID_LIST:
720a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu                    mSsidList = (Set<String>) value;
730a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu                    break;
740a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu                default:
750a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu                    throw new XmlPullParserException("Unknown tag under "
760a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu                            + XML_TAG_SECTION_HEADER_DELETED_EPHEMERAL_SSID_LIST
770a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu                            + ": " + valueName[0]);
780a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu            }
790a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu        }
800a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu    }
810a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu
820a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu    @Override
830a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu    public void resetData(boolean shared) {
840a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu        if (!shared) {
850a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu            mSsidList = null;
860a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu        }
870a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu    }
880a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu
890a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu    @Override
900a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu    public String getName() {
910a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu        return XML_TAG_SECTION_HEADER_DELETED_EPHEMERAL_SSID_LIST;
920a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu    }
930a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu
940a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu    @Override
950a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu    public boolean supportShareData() {
960a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu        return false;
970a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu    }
980a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu
990a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu    /**
1000a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu     * An empty set will be returned for null SSID list.
1010a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu     *
1020a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu     * @return Set of SSIDs
1030a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu     */
1040a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu    public Set<String> getSsidList() {
1050a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu        if (mSsidList == null) {
1060a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu            return new HashSet<String>();
1070a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu        }
1080a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu        return mSsidList;
1090a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu    }
1100a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu
1110a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu    public void setSsidList(Set<String> ssidList) {
1120a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu        mSsidList = ssidList;
1130a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu    }
1140a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu}
1150a0b5035ce8013ed327a0802357a1b7df3061912Peter Qiu
116