18bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff/* 28bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * Copyright (C) 2012 The Android Open Source Project 38bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * 48bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * Licensed under the Apache License, Version 2.0 (the "License"); 58bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * you may not use this file except in compliance with the License. 68bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * You may obtain a copy of the License at 78bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * 88bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * http://www.apache.org/licenses/LICENSE-2.0 98bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * 108bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * Unless required by applicable law or agreed to in writing, software 118bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * distributed under the License is distributed on an "AS IS" BASIS, 128bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * See the License for the specific language governing permissions and 148bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * limitations under the License. 158bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff */ 168bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff 178bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriffpackage android.net.wifi.p2p.nsd; 188bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff 198bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriffimport android.net.wifi.p2p.WifiP2pManager; 208bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff 218bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff/** 228bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * A class for creating a Bonjour service discovery request for use with 238bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * {@link WifiP2pManager#addServiceRequest} and {@link WifiP2pManager#removeServiceRequest} 248bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * 258bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * {@see WifiP2pManager} 268bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * {@see WifiP2pServiceRequest} 278bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * {@see WifiP2pUpnpServiceRequest} 288bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff */ 298bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriffpublic class WifiP2pDnsSdServiceRequest extends WifiP2pServiceRequest { 308bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff 318bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff /** 328bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * This constructor is only used in newInstance(). 338bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * 348bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * @param query The part of service specific query. 358bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * @hide 368bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff */ 378bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff private WifiP2pDnsSdServiceRequest(String query) { 388bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff super(WifiP2pServiceInfo.SERVICE_TYPE_BONJOUR, query); 398bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff } 408bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff 418bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff /** 428bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * This constructor is only used in newInstance(). 438bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * @hide 448bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff */ 458bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff private WifiP2pDnsSdServiceRequest() { 468bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff super(WifiP2pServiceInfo.SERVICE_TYPE_BONJOUR, null); 478bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff } 488bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff 498bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff private WifiP2pDnsSdServiceRequest(String dnsQuery, int dnsType, int version) { 508bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff super(WifiP2pServiceInfo.SERVICE_TYPE_BONJOUR, WifiP2pDnsSdServiceInfo.createRequest( 518bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff dnsQuery, 528bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff dnsType, 538bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff version)); 548bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff } 558bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff 568bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff /** 578bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * Create a service discovery request to search all Bonjour services. 588bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * 598bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * @return service request for Bonjour. 608bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff */ 618bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff public static WifiP2pDnsSdServiceRequest newInstance() { 628bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff return new WifiP2pDnsSdServiceRequest(); 638bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff } 648bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff 658bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff /** 668bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * Create a service discovery to search for Bonjour services with the specified 678bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * service type. 688bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * 698bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * @param serviceType service type. Cannot be null <br> 708bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * "_afpovertcp._tcp."(Apple File Sharing over TCP)<br> 718bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * "_ipp._tcp" (IP Printing over TCP)<br> 728bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * "_http._tcp" (http service) 738bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * @return service request for DnsSd. 748bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff */ 758bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff public static WifiP2pDnsSdServiceRequest newInstance(String serviceType) { 768bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff if (serviceType == null) { 778bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff throw new IllegalArgumentException("service type cannot be null"); 788bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff } 798bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff return new WifiP2pDnsSdServiceRequest(serviceType + ".local.", 808bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff WifiP2pDnsSdServiceInfo.DNS_TYPE_PTR, 818bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff WifiP2pDnsSdServiceInfo.VERSION_1); 828bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff } 838bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff 848bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff /** 858bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * Create a service discovery request to get the TXT data from the specified 868bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * Bonjour service. 878bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * 888bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * @param instanceName instance name. Cannot be null. <br> 898bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * "MyPrinter" 908bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * @param serviceType service type. Cannot be null. <br> 918bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * e.g) <br> 928bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * "_afpovertcp._tcp"(Apple File Sharing over TCP)<br> 938bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * "_ipp._tcp" (IP Printing over TCP)<br> 948bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff * @return service request for Bonjour. 958bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff */ 968bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff public static WifiP2pDnsSdServiceRequest newInstance(String instanceName, 978bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff String serviceType) { 988bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff if (instanceName == null || serviceType == null) { 998bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff throw new IllegalArgumentException( 1008bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff "instance name or service type cannot be null"); 1018bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff } 1028bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff String fullDomainName = instanceName + "." + serviceType + ".local."; 1038bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff return new WifiP2pDnsSdServiceRequest(fullDomainName, 1048bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff WifiP2pDnsSdServiceInfo.DNS_TYPE_TXT, 1058bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff WifiP2pDnsSdServiceInfo.VERSION_1); 1068bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff } 1078bf825f48fde77cb2feb8720aac17093581bb085Irfan Sheriff} 108