1b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff/* 2b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * Copyright (C) 2012 The Android Open Source Project 3b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * 4b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * Licensed under the Apache License, Version 2.0 (the "License"); 5b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * you may not use this file except in compliance with the License. 6b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * You may obtain a copy of the License at 7b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * 8b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * http://www.apache.org/licenses/LICENSE-2.0 9b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * 10b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * Unless required by applicable law or agreed to in writing, software 11b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * distributed under the License is distributed on an "AS IS" BASIS, 12b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * See the License for the specific language governing permissions and 14b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * limitations under the License. 15b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff */ 16b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 17b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriffpackage android.net.wifi; 18b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 19b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriffimport android.os.Parcel; 206e86fa8a6b69dfb8c8117791dc0f100b80fb616fNarayan Kamathimport android.os.Parcelable; 21b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 22b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriffimport java.io.ByteArrayOutputStream; 23b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriffimport java.nio.ByteBuffer; 24b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriffimport java.nio.CharBuffer; 25b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriffimport java.nio.charset.Charset; 26b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriffimport java.nio.charset.CharsetDecoder; 27b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriffimport java.nio.charset.CoderResult; 28b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriffimport java.nio.charset.CodingErrorAction; 29fea17de7aaa5729d3111102b2734b158403d2780Jeff Sharkeyimport java.util.Locale; 30b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 31b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff/** 32b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * Stores SSID octets and handles conversion. 33b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * 34b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * For Ascii encoded string, any octet < 32 or > 127 is encoded as 35b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * a "\x" followed by the hex representation of the octet. 36b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * Exception chars are ", \, \e, \n, \r, \t which are escaped by a \ 37b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * See src/utils/common.c for the implementation in the supplicant. 38b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * 39b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * @hide 40b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff */ 41b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriffpublic class WifiSsid implements Parcelable { 42b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff private static final String TAG = "WifiSsid"; 43b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 446e86fa8a6b69dfb8c8117791dc0f100b80fb616fNarayan Kamath public final ByteArrayOutputStream octets = new ByteArrayOutputStream(32); 45b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 46b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff private static final int HEX_RADIX = 16; 47b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff public static final String NONE = "<unknown ssid>"; 48b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 49b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff private WifiSsid() { 50b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 51b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 52a6ea570a4afdb1de16ea3d1433cbba9ea2284423Ningyuan Wang public static WifiSsid createFromByteArray(byte ssid[]) { 53a6ea570a4afdb1de16ea3d1433cbba9ea2284423Ningyuan Wang WifiSsid wifiSsid = new WifiSsid(); 54a6ea570a4afdb1de16ea3d1433cbba9ea2284423Ningyuan Wang if (ssid != null) { 55a6ea570a4afdb1de16ea3d1433cbba9ea2284423Ningyuan Wang wifiSsid.octets.write(ssid, 0/* the start offset */, ssid.length);; 56a6ea570a4afdb1de16ea3d1433cbba9ea2284423Ningyuan Wang } 57a6ea570a4afdb1de16ea3d1433cbba9ea2284423Ningyuan Wang return wifiSsid; 58a6ea570a4afdb1de16ea3d1433cbba9ea2284423Ningyuan Wang } 59a6ea570a4afdb1de16ea3d1433cbba9ea2284423Ningyuan Wang 60b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff public static WifiSsid createFromAsciiEncoded(String asciiEncoded) { 61b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff WifiSsid a = new WifiSsid(); 62b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff a.convertToBytes(asciiEncoded); 63b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff return a; 64b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 65b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 66b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff public static WifiSsid createFromHex(String hexStr) { 67b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff WifiSsid a = new WifiSsid(); 68b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (hexStr == null) return a; 69b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 70b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (hexStr.startsWith("0x") || hexStr.startsWith("0X")) { 71b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff hexStr = hexStr.substring(2); 72b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 73b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 74b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff for (int i = 0; i < hexStr.length()-1; i += 2) { 75b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff int val; 76b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff try { 77b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff val = Integer.parseInt(hexStr.substring(i, i + 2), HEX_RADIX); 78b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } catch(NumberFormatException e) { 79b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff val = 0; 80b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 81b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff a.octets.write(val); 82b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 83b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff return a; 84b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 85b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 86b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff /* This function is equivalent to printf_decode() at src/utils/common.c in 87b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * the supplicant */ 88b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff private void convertToBytes(String asciiEncoded) { 89b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff int i = 0; 90b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff int val = 0; 91b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff while (i< asciiEncoded.length()) { 92b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff char c = asciiEncoded.charAt(i); 93b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff switch (c) { 94b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff case '\\': 95b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff i++; 96b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff switch(asciiEncoded.charAt(i)) { 97b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff case '\\': 98b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff octets.write('\\'); 9911de9e5537914bbe140fd99ad55333e48a14a667Irfan Sheriff i++; 100b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff break; 101b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff case '"': 102b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff octets.write('"'); 10311de9e5537914bbe140fd99ad55333e48a14a667Irfan Sheriff i++; 104b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff break; 105b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff case 'n': 106b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff octets.write('\n'); 10711de9e5537914bbe140fd99ad55333e48a14a667Irfan Sheriff i++; 108b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff break; 109b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff case 'r': 110b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff octets.write('\r'); 11111de9e5537914bbe140fd99ad55333e48a14a667Irfan Sheriff i++; 112b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff break; 113b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff case 't': 114b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff octets.write('\t'); 11511de9e5537914bbe140fd99ad55333e48a14a667Irfan Sheriff i++; 116b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff break; 117b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff case 'e': 118b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff octets.write(27); //escape char 11911de9e5537914bbe140fd99ad55333e48a14a667Irfan Sheriff i++; 120b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff break; 121b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff case 'x': 122b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff i++; 123b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff try { 124b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff val = Integer.parseInt(asciiEncoded.substring(i, i + 2), HEX_RADIX); 125b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } catch (NumberFormatException e) { 126b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff val = -1; 127b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 128b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (val < 0) { 129b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff val = Character.digit(asciiEncoded.charAt(i), HEX_RADIX); 130b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (val < 0) break; 131b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff octets.write(val); 132b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff i++; 133b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } else { 134b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff octets.write(val); 135b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff i += 2; 136b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 137b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff break; 138b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff case '0': 139b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff case '1': 140b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff case '2': 141b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff case '3': 142b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff case '4': 143b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff case '5': 144b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff case '6': 145b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff case '7': 146b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff val = asciiEncoded.charAt(i) - '0'; 147b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff i++; 148b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (asciiEncoded.charAt(i) >= '0' && asciiEncoded.charAt(i) <= '7') { 149b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff val = val * 8 + asciiEncoded.charAt(i) - '0'; 150b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff i++; 151b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 152b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (asciiEncoded.charAt(i) >= '0' && asciiEncoded.charAt(i) <= '7') { 153b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff val = val * 8 + asciiEncoded.charAt(i) - '0'; 154b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff i++; 155b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 156b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff octets.write(val); 157b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff break; 158b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff default: 159b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff break; 160b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 161b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff break; 162b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff default: 163b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff octets.write(c); 164b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff i++; 165b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff break; 166b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 167b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 168b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 169b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 170b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff @Override 171b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff public String toString() { 172462ff630e441f5bc36c4b926ce81bdb35fe7d04bIrfan Sheriff byte[] ssidBytes = octets.toByteArray(); 173462ff630e441f5bc36c4b926ce81bdb35fe7d04bIrfan Sheriff // Supplicant returns \x00\x00\x00\x00\x00\x00\x00\x00 hex string 174462ff630e441f5bc36c4b926ce81bdb35fe7d04bIrfan Sheriff // for a hidden access point. Make sure we maintain the previous 175462ff630e441f5bc36c4b926ce81bdb35fe7d04bIrfan Sheriff // behavior of returning empty string for this case. 176462ff630e441f5bc36c4b926ce81bdb35fe7d04bIrfan Sheriff if (octets.size() <= 0 || isArrayAllZeroes(ssidBytes)) return ""; 177b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff // TODO: Handle conversion to other charsets upon failure 178b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff Charset charset = Charset.forName("UTF-8"); 179b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff CharsetDecoder decoder = charset.newDecoder() 180b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff .onMalformedInput(CodingErrorAction.REPLACE) 181b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff .onUnmappableCharacter(CodingErrorAction.REPLACE); 182b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff CharBuffer out = CharBuffer.allocate(32); 183b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 184462ff630e441f5bc36c4b926ce81bdb35fe7d04bIrfan Sheriff CoderResult result = decoder.decode(ByteBuffer.wrap(ssidBytes), out, true); 185b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff out.flip(); 186b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (result.isError()) { 187b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff return NONE; 188b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 189b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff return out.toString(); 190b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 191b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 192462ff630e441f5bc36c4b926ce81bdb35fe7d04bIrfan Sheriff private boolean isArrayAllZeroes(byte[] ssidBytes) { 193462ff630e441f5bc36c4b926ce81bdb35fe7d04bIrfan Sheriff for (int i = 0; i< ssidBytes.length; i++) { 194462ff630e441f5bc36c4b926ce81bdb35fe7d04bIrfan Sheriff if (ssidBytes[i] != 0) return false; 195462ff630e441f5bc36c4b926ce81bdb35fe7d04bIrfan Sheriff } 196462ff630e441f5bc36c4b926ce81bdb35fe7d04bIrfan Sheriff return true; 197462ff630e441f5bc36c4b926ce81bdb35fe7d04bIrfan Sheriff } 198462ff630e441f5bc36c4b926ce81bdb35fe7d04bIrfan Sheriff 199b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff /** @hide */ 2006e86fa8a6b69dfb8c8117791dc0f100b80fb616fNarayan Kamath public boolean isHidden() { 2016e86fa8a6b69dfb8c8117791dc0f100b80fb616fNarayan Kamath return isArrayAllZeroes(octets.toByteArray()); 2026e86fa8a6b69dfb8c8117791dc0f100b80fb616fNarayan Kamath } 2036e86fa8a6b69dfb8c8117791dc0f100b80fb616fNarayan Kamath 2046e86fa8a6b69dfb8c8117791dc0f100b80fb616fNarayan Kamath /** @hide */ 205b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff public byte[] getOctets() { 2066e86fa8a6b69dfb8c8117791dc0f100b80fb616fNarayan Kamath return octets.toByteArray(); 207b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 208b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 209b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff /** @hide */ 210b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff public String getHexString() { 211b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff String out = "0x"; 212b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff byte[] ssidbytes = getOctets(); 213b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff for (int i = 0; i < octets.size(); i++) { 214fea17de7aaa5729d3111102b2734b158403d2780Jeff Sharkey out += String.format(Locale.US, "%02x", ssidbytes[i]); 215b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 21691ec9298d90ea6c279decdb52fae2fa5d28813d0zhangshuxiao return (octets.size() > 0) ? out : null; 217b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 218b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 219b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff /** Implement the Parcelable interface {@hide} */ 220b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff public int describeContents() { 221b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff return 0; 222b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 223b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 224b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff /** Implement the Parcelable interface {@hide} */ 225b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff public void writeToParcel(Parcel dest, int flags) { 226b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff dest.writeInt(octets.size()); 227b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff dest.writeByteArray(octets.toByteArray()); 228b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 229b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 230b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff /** Implement the Parcelable interface {@hide} */ 231b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff public static final Creator<WifiSsid> CREATOR = 232b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff new Creator<WifiSsid>() { 233b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff public WifiSsid createFromParcel(Parcel in) { 234b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff WifiSsid ssid = new WifiSsid(); 235b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff int length = in.readInt(); 236b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff byte b[] = new byte[length]; 237b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff in.readByteArray(b); 238b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff ssid.octets.write(b, 0, length); 239b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff return ssid; 240b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 241b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 242b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff public WifiSsid[] newArray(int size) { 243b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff return new WifiSsid[size]; 244b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 245b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff }; 246b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff} 247