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