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 java.util.ArrayList; 2021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriffimport java.util.List; 2121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriffimport java.util.UUID; 2221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 2321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff/** 248bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * A class for storing Upnp service information that is advertised 258bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * over a Wi-Fi peer-to-peer setup. 268bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * 278bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * {@see android.net.wifi.p2p.WifiP2pManager#addLocalService} 288bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * {@see android.net.wifi.p2p.WifiP2pManager#removeLocalService} 298bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * {@see WifiP2pServiceInfo} 308bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * {@see WifiP2pDnsSdServiceInfo} 3121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff */ 3221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriffpublic class WifiP2pUpnpServiceInfo extends WifiP2pServiceInfo { 3321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 3421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff /** 3521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * UPnP version 1.0. 3621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * 3721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * <pre>Query Version should always be set to 0x10 if the query values are 3821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * compatible with UPnP Device Architecture 1.0. 3921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * @hide 4021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff */ 4121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff public static final int VERSION_1_0 = 0x10; 4221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 4321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff /** 4421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * This constructor is only used in newInstance(). 4521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * 4621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * @param queryList 4721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff */ 4821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff private WifiP2pUpnpServiceInfo(List<String> queryList) { 4921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff super(queryList); 5021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff } 5121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 5221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff /** 5321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * Create UPnP service information object. 5421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * 5521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * @param uuid a string representation of this UUID in the following format, 5621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * as per <a href="http://www.ietf.org/rfc/rfc4122.txt">RFC 4122</a>.<br> 5721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * e.g) 6859dede-8574-59ab-9332-123456789012 5821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * @param device a string representation of this device in the following format, 5921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * as per 6021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * <a href="http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf"> 6121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * UPnP Device Architecture1.1</a><br> 6221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * e.g) urn:schemas-upnp-org:device:MediaServer:1 6321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * @param services a string representation of this service in the following format, 6421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * as per 6521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * <a href="http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf"> 6621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * UPnP Device Architecture1.1</a><br> 6721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * e.g) urn:schemas-upnp-org:service:ContentDirectory:1 6821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * @return UPnP service information object. 6921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff */ 7021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff public static WifiP2pUpnpServiceInfo newInstance(String uuid, 7121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff String device, List<String> services) { 7221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff if (uuid == null || device == null) { 7321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff throw new IllegalArgumentException("uuid or device cannnot be null"); 7421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff } 7521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff UUID.fromString(uuid); 7621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 7721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff ArrayList<String> info = new ArrayList<String>(); 7821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 7921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff info.add(createSupplicantQuery(uuid, null)); 8021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff info.add(createSupplicantQuery(uuid, "upnp:rootdevice")); 8121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff info.add(createSupplicantQuery(uuid, device)); 8221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff if (services != null) { 8321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff for (String service:services) { 8421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff info.add(createSupplicantQuery(uuid, service)); 8521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff } 8621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff } 8721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 8821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff return new WifiP2pUpnpServiceInfo(info); 8921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff } 9021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff 9121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff /** 9221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * Create wpa_supplicant service query for upnp. 9321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * 9421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * @param uuid 9521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * @param data 9621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff * @return wpa_supplicant service query for upnp 9721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff */ 9821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff private static String createSupplicantQuery(String uuid, String data) { 9921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff StringBuffer sb = new StringBuffer(); 10021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff sb.append("upnp "); 10121ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff sb.append(String.format("%02x ", VERSION_1_0)); 10221ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff sb.append("uuid:"); 10321ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff sb.append(uuid); 10421ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff if (data != null) { 10521ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff sb.append("::"); 10621ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff sb.append(data); 10721ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff } 10821ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff return sb.toString(); 10921ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff } 11021ba8153325e010224c6bc75a0acdc98b6ca82e8Irfan Sheriff} 111