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