121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff/* 221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * Copyright (C) 2012 The Android Open Source Project 321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * 421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * Licensed under the Apache License, Version 2.0 (the "License"); 521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * you may not use this file except in compliance with the License. 621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * You may obtain a copy of the License at 721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * 821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * http://www.apache.org/licenses/LICENSE-2.0 921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * 1021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * Unless required by applicable law or agreed to in writing, software 1121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * distributed under the License is distributed on an "AS IS" BASIS, 1221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * See the License for the specific language governing permissions and 1421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * limitations under the License. 1521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff */ 1621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 1721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriffpackage android.net.wifi.p2p.nsd; 1821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 1921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriffimport android.os.Parcel; 2021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriffimport android.os.Parcelable; 2121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 2221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriffimport java.util.ArrayList; 2321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriffimport java.util.List; 2421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 2521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff/** 268bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * A class for storing service information that is advertised 278bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * over a Wi-Fi peer-to-peer setup 2821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * 2921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * @see WifiP2pUpnpServiceInfo 308bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * @see WifiP2pDnsSdServiceInfo 3121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff */ 3221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriffpublic class WifiP2pServiceInfo implements Parcelable { 3321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 3421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff /** 3521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * All service protocol types. 3621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff */ 3721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff public static final int SERVICE_TYPE_ALL = 0; 3821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 3921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff /** 408bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * DNS based service discovery protocol. 4121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff */ 4221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff public static final int SERVICE_TYPE_BONJOUR = 1; 4321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 4421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff /** 4521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * UPnP protocol. 4621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff */ 4721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff public static final int SERVICE_TYPE_UPNP = 2; 4821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 4921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff /** 5021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * WS-Discovery protocol 518bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * @hide 5221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff */ 5321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff public static final int SERVICE_TYPE_WS_DISCOVERY = 3; 5421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 5521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff /** 5621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * Vendor Specific protocol 5721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff */ 5821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff public static final int SERVICE_TYPE_VENDOR_SPECIFIC = 255; 5921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 6021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff /** 6121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * the list of query string for wpa_supplicant 6221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * 6321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * e.g) 6421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * # IP Printing over TCP (PTR) (RDATA=MyPrinter._ipp._tcp.local.) 6521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * {"bonjour", "045f697070c00c000c01", "094d795072696e746572c027" 6621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * 6721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * # IP Printing over TCP (TXT) (RDATA=txtvers=1,pdl=application/postscript) 6821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * {"bonjour", "096d797072696e746572045f697070c00c001001", 6921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * "09747874766572733d311a70646c3d6170706c69636174696f6e2f706f7374736372797074"} 7021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * 7121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * [UPnP] 7221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * # UPnP uuid 7321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * {"upnp", "10", "uuid:6859dede-8574-59ab-9332-123456789012"} 7421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * 7521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * # UPnP rootdevice 7621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * {"upnp", "10", "uuid:6859dede-8574-59ab-9332-123456789012::upnp:rootdevice"} 7721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * 7821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * # UPnP device 7921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * {"upnp", "10", "uuid:6859dede-8574-59ab-9332-123456789012::urn:schemas-upnp 8021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * -org:device:InternetGatewayDevice:1"} 8121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * 8221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * # UPnP service 8321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * {"upnp", "10", "uuid:6859dede-8574-59ab-9322-123456789012::urn:schemas-upnp 8421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * -org:service:ContentDirectory:2"} 8521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff */ 8621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff private List<String> mQueryList; 8721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 8821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff /** 8921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * This is only used in subclass. 9021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * 9121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * @param queryList query string for wpa_supplicant 9221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * @hide 9321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff */ 9421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff protected WifiP2pServiceInfo(List<String> queryList) { 9521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff if (queryList == null) { 9621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff throw new IllegalArgumentException("query list cannot be null"); 9721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff } 9821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff mQueryList = queryList; 9921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff } 10021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 10121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff /** 10221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * Return the list of the query string for wpa_supplicant. 10321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * 10421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * @return the list of the query string for wpa_supplicant. 10521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * @hide 10621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff */ 10721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff public List<String> getSupplicantQueryList() { 10821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff return mQueryList; 10921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff } 11021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 11121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff /** 11221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * Converts byte array to hex string. 11321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * 11421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * @param data 11521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * @return hex string. 11621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * @hide 11721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff */ 11821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff static String bin2HexStr(byte[] data) { 11921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff StringBuffer sb = new StringBuffer(); 12021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 12121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff for (byte b: data) { 12221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff String s = null; 12321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff try { 12421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff s = Integer.toHexString(b & 0xff); 12521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff } catch (Exception e) { 12621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff e.printStackTrace(); 12721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff return null; 12821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff } 12921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff //add 0 padding 13021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff if (s.length() == 1) { 13121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff sb.append('0'); 13221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff } 13321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff sb.append(s); 13421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff } 13521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff return sb.toString(); 13621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff } 13721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 13821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff @Override 13921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff public boolean equals(Object o) { 14021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff if (o == this) { 14121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff return true; 14221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff } 14321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff if (!(o instanceof WifiP2pServiceInfo)) { 14421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff return false; 14521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff } 14621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 14721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff WifiP2pServiceInfo servInfo = (WifiP2pServiceInfo)o; 14821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff return mQueryList.equals(servInfo.mQueryList); 14921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff } 15021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 15121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff @Override 15221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff public int hashCode() { 15321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff int result = 17; 15421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff result = 31 * result + (mQueryList == null ? 0 : mQueryList.hashCode()); 15521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff return result; 15621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff } 15721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 15821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff /** Implement the Parcelable interface {@hide} */ 15921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff public int describeContents() { 16021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff return 0; 16121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff } 16221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 16321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff /** Implement the Parcelable interface {@hide} */ 16421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff public void writeToParcel(Parcel dest, int flags) { 16521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff dest.writeStringList(mQueryList); 16621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff } 16721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 16821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff /** Implement the Parcelable interface {@hide} */ 16921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff public static final Creator<WifiP2pServiceInfo> CREATOR = 17021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff new Creator<WifiP2pServiceInfo>() { 17121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff public WifiP2pServiceInfo createFromParcel(Parcel in) { 17221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 17321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff List<String> data = new ArrayList<String>(); 17421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff in.readStringList(data); 17521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff return new WifiP2pServiceInfo(data); 17621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff } 17721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 17821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff public WifiP2pServiceInfo[] newArray(int size) { 17921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff return new WifiP2pServiceInfo[size]; 18021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff } 18121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff }; 18221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff} 183