1fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff/*
2fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff * Copyright (C) 2012 The Android Open Source Project
3fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff *
4fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff * Licensed under the Apache License, Version 2.0 (the "License");
5fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff * you may not use this file except in compliance with the License.
6fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff * You may obtain a copy of the License at
7fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff *
8fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff *      http://www.apache.org/licenses/LICENSE-2.0
9fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff *
10fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff * Unless required by applicable law or agreed to in writing, software
11fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff * distributed under the License is distributed on an "AS IS" BASIS,
12fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff * See the License for the specific language governing permissions and
14fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff * limitations under the License.
15fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff */
16fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
17fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriffpackage android.net.nsd;
18fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
19fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriffimport android.os.Parcelable;
20fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriffimport android.os.Parcel;
21fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
22817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriffimport java.net.InetAddress;
23817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff
24fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff/**
2592784670c48759c0db604ddb95c05a7b9bdebed8Irfan Sheriff * A class representing service information for network service discovery
2692784670c48759c0db604ddb95c05a7b9bdebed8Irfan Sheriff * {@see NsdManager}
27fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff */
2822af38c5261d2c03796b496e6edb125327cace16Irfan Sheriffpublic final class NsdServiceInfo implements Parcelable {
29fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
30fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    private String mServiceName;
31fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
32817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff    private String mServiceType;
33fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
34fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    private DnsSdTxtRecord mTxtRecord;
35fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
36817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff    private InetAddress mHost;
37fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
38fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    private int mPort;
39fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
4022af38c5261d2c03796b496e6edb125327cace16Irfan Sheriff    public NsdServiceInfo() {
41fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    }
42fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
4392784670c48759c0db604ddb95c05a7b9bdebed8Irfan Sheriff    /** @hide */
4422af38c5261d2c03796b496e6edb125327cace16Irfan Sheriff    public NsdServiceInfo(String sn, String rt, DnsSdTxtRecord tr) {
45fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff        mServiceName = sn;
46817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff        mServiceType = rt;
47fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff        mTxtRecord = tr;
48fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    }
49fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
5092784670c48759c0db604ddb95c05a7b9bdebed8Irfan Sheriff    /** Get the service name */
51fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    public String getServiceName() {
52fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff        return mServiceName;
53fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    }
54fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
5592784670c48759c0db604ddb95c05a7b9bdebed8Irfan Sheriff    /** Set the service name */
56fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    public void setServiceName(String s) {
57fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff        mServiceName = s;
58fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    }
59fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
6092784670c48759c0db604ddb95c05a7b9bdebed8Irfan Sheriff    /** Get the service type */
61fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    public String getServiceType() {
62817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff        return mServiceType;
63fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    }
64fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
6592784670c48759c0db604ddb95c05a7b9bdebed8Irfan Sheriff    /** Set the service type */
66fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    public void setServiceType(String s) {
67817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff        mServiceType = s;
68fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    }
69fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
7092784670c48759c0db604ddb95c05a7b9bdebed8Irfan Sheriff    /** @hide */
71fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    public DnsSdTxtRecord getTxtRecord() {
72fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff        return mTxtRecord;
73fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    }
74fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
7592784670c48759c0db604ddb95c05a7b9bdebed8Irfan Sheriff    /** @hide */
76fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    public void setTxtRecord(DnsSdTxtRecord t) {
77fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff        mTxtRecord = new DnsSdTxtRecord(t);
78fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    }
79fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
8092784670c48759c0db604ddb95c05a7b9bdebed8Irfan Sheriff    /** Get the host address. The host address is valid for a resolved service. */
81817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff    public InetAddress getHost() {
82817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff        return mHost;
83fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    }
84fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
8592784670c48759c0db604ddb95c05a7b9bdebed8Irfan Sheriff    /** Set the host address */
86817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff    public void setHost(InetAddress s) {
87817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff        mHost = s;
88fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    }
89fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
9092784670c48759c0db604ddb95c05a7b9bdebed8Irfan Sheriff    /** Get port number. The port number is valid for a resolved service. */
91fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    public int getPort() {
92fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff        return mPort;
93fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    }
94fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
9592784670c48759c0db604ddb95c05a7b9bdebed8Irfan Sheriff    /** Set port number */
96fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    public void setPort(int p) {
97fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff        mPort = p;
98fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    }
99fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
100fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    public String toString() {
101fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff        StringBuffer sb = new StringBuffer();
102fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
103fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff        sb.append("name: ").append(mServiceName).
104817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff            append("type: ").append(mServiceType).
105817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff            append("host: ").append(mHost).
106817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff            append("port: ").append(mPort).
107fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff            append("txtRecord: ").append(mTxtRecord);
108fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff        return sb.toString();
109fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    }
110fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
111fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    /** Implement the Parcelable interface */
112fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    public int describeContents() {
113fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff        return 0;
114fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    }
115fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
116fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    /** Implement the Parcelable interface */
117fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    public void writeToParcel(Parcel dest, int flags) {
118fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff        dest.writeString(mServiceName);
119817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff        dest.writeString(mServiceType);
120fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff        dest.writeParcelable(mTxtRecord, flags);
121817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff        if (mHost != null) {
122817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff            dest.writeByte((byte)1);
123817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff            dest.writeByteArray(mHost.getAddress());
124817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff        } else {
125817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff            dest.writeByte((byte)0);
126817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff        }
127fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff        dest.writeInt(mPort);
128fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    }
129fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
130fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff    /** Implement the Parcelable interface */
13122af38c5261d2c03796b496e6edb125327cace16Irfan Sheriff    public static final Creator<NsdServiceInfo> CREATOR =
13222af38c5261d2c03796b496e6edb125327cace16Irfan Sheriff        new Creator<NsdServiceInfo>() {
13322af38c5261d2c03796b496e6edb125327cace16Irfan Sheriff            public NsdServiceInfo createFromParcel(Parcel in) {
13422af38c5261d2c03796b496e6edb125327cace16Irfan Sheriff                NsdServiceInfo info = new NsdServiceInfo();
135fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff                info.mServiceName = in.readString();
136817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff                info.mServiceType = in.readString();
137fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff                info.mTxtRecord = in.readParcelable(null);
138817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff
139817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff                if (in.readByte() == 1) {
140817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff                    try {
141817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff                        info.mHost = InetAddress.getByAddress(in.createByteArray());
142817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff                    } catch (java.net.UnknownHostException e) {}
143817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff                }
144817388e056a5d1d0e7cd7de2c6b0c9c80617bc5fIrfan Sheriff
145fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff                info.mPort = in.readInt();
146fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff                return info;
147fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff            }
148fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff
14922af38c5261d2c03796b496e6edb125327cace16Irfan Sheriff            public NsdServiceInfo[] newArray(int size) {
15022af38c5261d2c03796b496e6edb125327cace16Irfan Sheriff                return new NsdServiceInfo[size];
151fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff            }
152fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff        };
153fa291e66910c41f441df0b9ea8e6f7630c298637Irfan Sheriff}
154