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