xref: /aosp_15_r20/external/mdnsresponder/mDNSWindows/DLL.NET/dnssd_NET.h (revision 48a54d368dc4fa860885eef7b70b6c53499e7c25)
1*48a54d36SAndroid Build Coastguard Worker /* -*- Mode: C; tab-width: 4 -*-
2*48a54d36SAndroid Build Coastguard Worker  *
3*48a54d36SAndroid Build Coastguard Worker  * Copyright (c) 2003-2004 Apple Computer, Inc. All rights reserved.
4*48a54d36SAndroid Build Coastguard Worker  *
5*48a54d36SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
6*48a54d36SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
7*48a54d36SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
8*48a54d36SAndroid Build Coastguard Worker  *
9*48a54d36SAndroid Build Coastguard Worker  *     http://www.apache.org/licenses/LICENSE-2.0
10*48a54d36SAndroid Build Coastguard Worker  *
11*48a54d36SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
12*48a54d36SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
13*48a54d36SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*48a54d36SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
15*48a54d36SAndroid Build Coastguard Worker  * limitations under the License.
16*48a54d36SAndroid Build Coastguard Worker 
17*48a54d36SAndroid Build Coastguard Worker  *
18*48a54d36SAndroid Build Coastguard Worker  * NOTE:
19*48a54d36SAndroid Build Coastguard Worker  *
20*48a54d36SAndroid Build Coastguard Worker  * These .Net APIs are a work in progress, currently being discussed and refined.
21*48a54d36SAndroid Build Coastguard Worker  * If you plan to build an application based on these APIs, you may wish to
22*48a54d36SAndroid Build Coastguard Worker  * statically link this code into your application, or otherwise distribute
23*48a54d36SAndroid Build Coastguard Worker  * the DLL so that it installs into the same folder as your application
24*48a54d36SAndroid Build Coastguard Worker  * (not into any common system area where it might interfere with other
25*48a54d36SAndroid Build Coastguard Worker  * applications using a future completed version of these APIs).
26*48a54d36SAndroid Build Coastguard Worker  * If you plan to do this, please be sure to inform us by sending email
27*48a54d36SAndroid Build Coastguard Worker  * to [email protected] to let us know.
28*48a54d36SAndroid Build Coastguard Worker  * You may want to discuss what you're doing on the Bonjour mailing
29*48a54d36SAndroid Build Coastguard Worker  * list to see if others in similar positions have any suggestions for you:
30*48a54d36SAndroid Build Coastguard Worker  *
31*48a54d36SAndroid Build Coastguard Worker  * <http://lists.apple.com/bonjour-dev/>
32*48a54d36SAndroid Build Coastguard Worker  *
33*48a54d36SAndroid Build Coastguard Worker  */
34*48a54d36SAndroid Build Coastguard Worker 
35*48a54d36SAndroid Build Coastguard Worker #pragma once
36*48a54d36SAndroid Build Coastguard Worker 
37*48a54d36SAndroid Build Coastguard Worker #include <dns_sd.h>
38*48a54d36SAndroid Build Coastguard Worker #include <vcclr.h>
39*48a54d36SAndroid Build Coastguard Worker #include <memory>
40*48a54d36SAndroid Build Coastguard Worker #include <winsock2.h>
41*48a54d36SAndroid Build Coastguard Worker 
42*48a54d36SAndroid Build Coastguard Worker using namespace System;
43*48a54d36SAndroid Build Coastguard Worker using namespace System::Net;
44*48a54d36SAndroid Build Coastguard Worker using namespace System::Runtime::InteropServices;
45*48a54d36SAndroid Build Coastguard Worker using namespace System::Threading;
46*48a54d36SAndroid Build Coastguard Worker using namespace System::Collections;
47*48a54d36SAndroid Build Coastguard Worker 
48*48a54d36SAndroid Build Coastguard Worker 
49*48a54d36SAndroid Build Coastguard Worker namespace Apple
50*48a54d36SAndroid Build Coastguard Worker {
51*48a54d36SAndroid Build Coastguard Worker 	namespace DNSSD
52*48a54d36SAndroid Build Coastguard Worker 	{
53*48a54d36SAndroid Build Coastguard Worker 		public __gc class ServiceRef;
54*48a54d36SAndroid Build Coastguard Worker 
55*48a54d36SAndroid Build Coastguard Worker 		public __value enum ServiceFlags : int
56*48a54d36SAndroid Build Coastguard Worker 		{
57*48a54d36SAndroid Build Coastguard Worker 			MoreComing			=	1,
58*48a54d36SAndroid Build Coastguard Worker 			/* MoreComing indicates to a callback that at least one more result is
59*48a54d36SAndroid Build Coastguard Worker 				* queued and will be delivered following immediately after this one.
60*48a54d36SAndroid Build Coastguard Worker 				* Applications should not update their UI to display browse
61*48a54d36SAndroid Build Coastguard Worker 				* results when the MoreComing flag is set, because this would
62*48a54d36SAndroid Build Coastguard Worker 				* result in a great deal of ugly flickering on the screen.
63*48a54d36SAndroid Build Coastguard Worker 				* Applications should instead wait until until MoreComing is not set,
64*48a54d36SAndroid Build Coastguard Worker 				* and then update their UI.
65*48a54d36SAndroid Build Coastguard Worker 				* When MoreComing is not set, that doesn't mean there will be no more
66*48a54d36SAndroid Build Coastguard Worker 				* answers EVER, just that there are no more answers immediately
67*48a54d36SAndroid Build Coastguard Worker 				* available right now at this instant. If more answers become available
68*48a54d36SAndroid Build Coastguard Worker 				* in the future they will be delivered as usual.
69*48a54d36SAndroid Build Coastguard Worker 				*/
70*48a54d36SAndroid Build Coastguard Worker 
71*48a54d36SAndroid Build Coastguard Worker 			Add					=	2,
72*48a54d36SAndroid Build Coastguard Worker 			Default				=	4,
73*48a54d36SAndroid Build Coastguard Worker 			/* Flags for domain enumeration and browse/query reply callbacks.
74*48a54d36SAndroid Build Coastguard Worker 				* "Default" applies only to enumeration and is only valid in
75*48a54d36SAndroid Build Coastguard Worker 				* conjuction with "Add".  An enumeration callback with the "Add"
76*48a54d36SAndroid Build Coastguard Worker 				* flag NOT set indicates a "Remove", i.e. the domain is no longer
77*48a54d36SAndroid Build Coastguard Worker 				* valid.
78*48a54d36SAndroid Build Coastguard Worker 				*/
79*48a54d36SAndroid Build Coastguard Worker 
80*48a54d36SAndroid Build Coastguard Worker 			NoAutoRename		=	8,
81*48a54d36SAndroid Build Coastguard Worker 			/* Flag for specifying renaming behavior on name conflict when registering
82*48a54d36SAndroid Build Coastguard Worker 				* non-shared records. By default, name conflicts are automatically handled
83*48a54d36SAndroid Build Coastguard Worker 				* by renaming the service.  NoAutoRename overrides this behavior - with this
84*48a54d36SAndroid Build Coastguard Worker 				* flag set, name conflicts will result in a callback.  The NoAutorename flag
85*48a54d36SAndroid Build Coastguard Worker 				* is only valid if a name is explicitly specified when registering a service
86*48a54d36SAndroid Build Coastguard Worker 				* (i.e. the default name is not used.)
87*48a54d36SAndroid Build Coastguard Worker 				*/
88*48a54d36SAndroid Build Coastguard Worker 
89*48a54d36SAndroid Build Coastguard Worker 			Shared				=	16,
90*48a54d36SAndroid Build Coastguard Worker 			Unique				=	32,
91*48a54d36SAndroid Build Coastguard Worker 			/* Flag for registering individual records on a connected
92*48a54d36SAndroid Build Coastguard Worker 				* DNSServiceRef.  Shared indicates that there may be multiple records
93*48a54d36SAndroid Build Coastguard Worker 				* with this name on the network (e.g. PTR records).  Unique indicates that
94*48a54d36SAndroid Build Coastguard Worker 	the
95*48a54d36SAndroid Build Coastguard Worker 				* record's name is to be unique on the network (e.g. SRV records).
96*48a54d36SAndroid Build Coastguard Worker 				*/
97*48a54d36SAndroid Build Coastguard Worker 
98*48a54d36SAndroid Build Coastguard Worker 			BrowseDomains		=	64,
99*48a54d36SAndroid Build Coastguard Worker 			RegistrationDomains	=	128,
100*48a54d36SAndroid Build Coastguard Worker 			/* Flags for specifying domain enumeration type in DNSServiceEnumerateDomain
101*48a54d36SAndroid Build Coastguard Worker 	s.
102*48a54d36SAndroid Build Coastguard Worker 				* BrowseDomains enumerates domains recommended for browsing, RegistrationDo
103*48a54d36SAndroid Build Coastguard Worker 	mains
104*48a54d36SAndroid Build Coastguard Worker 				* enumerates domains recommended for registration.
105*48a54d36SAndroid Build Coastguard Worker 				*/
106*48a54d36SAndroid Build Coastguard Worker 		};
107*48a54d36SAndroid Build Coastguard Worker 
108*48a54d36SAndroid Build Coastguard Worker 
109*48a54d36SAndroid Build Coastguard Worker 		public __value enum ErrorCode : int
110*48a54d36SAndroid Build Coastguard Worker 		{
111*48a54d36SAndroid Build Coastguard Worker 			NoError				=	0,
112*48a54d36SAndroid Build Coastguard Worker 			Unknown				=	-65537,
113*48a54d36SAndroid Build Coastguard Worker 			NoSuchName			=	-65538,
114*48a54d36SAndroid Build Coastguard Worker 			NoMemory			=	-65539,
115*48a54d36SAndroid Build Coastguard Worker 			BadParam			=	-65540,
116*48a54d36SAndroid Build Coastguard Worker 			BadReference		=	-65541,
117*48a54d36SAndroid Build Coastguard Worker 			BadState			=	-65542,
118*48a54d36SAndroid Build Coastguard Worker 			BadFlags			=	-65543,
119*48a54d36SAndroid Build Coastguard Worker 			Unsupported			=	-65544,
120*48a54d36SAndroid Build Coastguard Worker 			AlreadyRegistered	=	-65547,
121*48a54d36SAndroid Build Coastguard Worker 			NameConflict		=	-65548,
122*48a54d36SAndroid Build Coastguard Worker 			Invalid				=	-65549,
123*48a54d36SAndroid Build Coastguard Worker 			Incompatible		=	-65551,
124*48a54d36SAndroid Build Coastguard Worker 			BadinterfaceIndex	=	-65552
125*48a54d36SAndroid Build Coastguard Worker 
126*48a54d36SAndroid Build Coastguard Worker 			/*
127*48a54d36SAndroid Build Coastguard Worker 				* mDNS Error codes are in the range
128*48a54d36SAndroid Build Coastguard Worker 				* FFFE FF00 (-65792) to FFFE FFFF (-65537)
129*48a54d36SAndroid Build Coastguard Worker 				*/
130*48a54d36SAndroid Build Coastguard Worker 		};
131*48a54d36SAndroid Build Coastguard Worker 
132*48a54d36SAndroid Build Coastguard Worker 		public __gc class DNSServiceException
133*48a54d36SAndroid Build Coastguard Worker 		:
134*48a54d36SAndroid Build Coastguard Worker 			public Exception
135*48a54d36SAndroid Build Coastguard Worker 		{
136*48a54d36SAndroid Build Coastguard Worker 		public:
137*48a54d36SAndroid Build Coastguard Worker 
138*48a54d36SAndroid Build Coastguard Worker 			DNSServiceException
139*48a54d36SAndroid Build Coastguard Worker 				(
140*48a54d36SAndroid Build Coastguard Worker 				int err
141*48a54d36SAndroid Build Coastguard Worker 				);
142*48a54d36SAndroid Build Coastguard Worker 
143*48a54d36SAndroid Build Coastguard Worker 			DNSServiceException
144*48a54d36SAndroid Build Coastguard Worker 				(
145*48a54d36SAndroid Build Coastguard Worker 				String				*	message,
146*48a54d36SAndroid Build Coastguard Worker 				System::Exception	*	innerException
147*48a54d36SAndroid Build Coastguard Worker 				);
148*48a54d36SAndroid Build Coastguard Worker 
149*48a54d36SAndroid Build Coastguard Worker 			int err;
150*48a54d36SAndroid Build Coastguard Worker 		};
151*48a54d36SAndroid Build Coastguard Worker 
152*48a54d36SAndroid Build Coastguard Worker 
153*48a54d36SAndroid Build Coastguard Worker 		/*
154*48a54d36SAndroid Build Coastguard Worker 		* class RecordRef
155*48a54d36SAndroid Build Coastguard Worker 		*
156*48a54d36SAndroid Build Coastguard Worker 		* This is a thin MC++ class facade on top of a DNSRecordRef
157*48a54d36SAndroid Build Coastguard Worker 		*/
158*48a54d36SAndroid Build Coastguard Worker 		public __gc class RecordRef
159*48a54d36SAndroid Build Coastguard Worker 		{
160*48a54d36SAndroid Build Coastguard Worker 		public:
161*48a54d36SAndroid Build Coastguard Worker 
RecordRef()162*48a54d36SAndroid Build Coastguard Worker 			RecordRef()
163*48a54d36SAndroid Build Coastguard Worker 			{
164*48a54d36SAndroid Build Coastguard Worker 				m_impl = new RecordRefImpl;
165*48a54d36SAndroid Build Coastguard Worker 				m_impl->m_ref = NULL;
166*48a54d36SAndroid Build Coastguard Worker 			}
167*48a54d36SAndroid Build Coastguard Worker 
~RecordRef()168*48a54d36SAndroid Build Coastguard Worker 			~RecordRef()
169*48a54d36SAndroid Build Coastguard Worker 			{
170*48a54d36SAndroid Build Coastguard Worker 				delete m_impl;
171*48a54d36SAndroid Build Coastguard Worker 			}
172*48a54d36SAndroid Build Coastguard Worker 
173*48a54d36SAndroid Build Coastguard Worker 			__nogc class RecordRefImpl
174*48a54d36SAndroid Build Coastguard Worker 			{
175*48a54d36SAndroid Build Coastguard Worker 			public:
176*48a54d36SAndroid Build Coastguard Worker 
177*48a54d36SAndroid Build Coastguard Worker 				DNSRecordRef m_ref;
178*48a54d36SAndroid Build Coastguard Worker 			};
179*48a54d36SAndroid Build Coastguard Worker 
180*48a54d36SAndroid Build Coastguard Worker 			RecordRefImpl * m_impl;
181*48a54d36SAndroid Build Coastguard Worker 		};
182*48a54d36SAndroid Build Coastguard Worker 
183*48a54d36SAndroid Build Coastguard Worker 
184*48a54d36SAndroid Build Coastguard Worker 		/*
185*48a54d36SAndroid Build Coastguard Worker 		* class ServiceRef
186*48a54d36SAndroid Build Coastguard Worker 		*
187*48a54d36SAndroid Build Coastguard Worker 		* This is a thin MC++ class facade on top of a DNSServiceRef
188*48a54d36SAndroid Build Coastguard Worker 		*/
189*48a54d36SAndroid Build Coastguard Worker 		public __gc class ServiceRef : public IDisposable
190*48a54d36SAndroid Build Coastguard Worker 		{
191*48a54d36SAndroid Build Coastguard Worker 		public:
192*48a54d36SAndroid Build Coastguard Worker 
193*48a54d36SAndroid Build Coastguard Worker 			ServiceRef(Object * callback);
194*48a54d36SAndroid Build Coastguard Worker 
195*48a54d36SAndroid Build Coastguard Worker 			~ServiceRef();
196*48a54d36SAndroid Build Coastguard Worker 
197*48a54d36SAndroid Build Coastguard Worker 			/*
198*48a54d36SAndroid Build Coastguard Worker 			* This does an underlying DNSServiceRefDeallocate().  After
199*48a54d36SAndroid Build Coastguard Worker 			* calling Dispose, the ServiceRef is no longer usable.
200*48a54d36SAndroid Build Coastguard Worker 			*/
201*48a54d36SAndroid Build Coastguard Worker 			void
202*48a54d36SAndroid Build Coastguard Worker 			Dispose();
203*48a54d36SAndroid Build Coastguard Worker 
204*48a54d36SAndroid Build Coastguard Worker 			/*
205*48a54d36SAndroid Build Coastguard Worker 			* Internal - Dispatch an EnumerateDomains callback
206*48a54d36SAndroid Build Coastguard Worker 			*/
207*48a54d36SAndroid Build Coastguard Worker 			void
208*48a54d36SAndroid Build Coastguard Worker 			EnumerateDomainsDispatch
209*48a54d36SAndroid Build Coastguard Worker 				(
210*48a54d36SAndroid Build Coastguard Worker 				ServiceFlags	flags,
211*48a54d36SAndroid Build Coastguard Worker 				int				interfaceIndex,
212*48a54d36SAndroid Build Coastguard Worker 				ErrorCode		errorCode,
213*48a54d36SAndroid Build Coastguard Worker 				String		*	replyDomain
214*48a54d36SAndroid Build Coastguard Worker 				);
215*48a54d36SAndroid Build Coastguard Worker 
216*48a54d36SAndroid Build Coastguard Worker 			/*
217*48a54d36SAndroid Build Coastguard Worker 			* Internal - Dispatch a Register callback
218*48a54d36SAndroid Build Coastguard Worker 			*/
219*48a54d36SAndroid Build Coastguard Worker 			void
220*48a54d36SAndroid Build Coastguard Worker 			RegisterDispatch
221*48a54d36SAndroid Build Coastguard Worker 				(
222*48a54d36SAndroid Build Coastguard Worker 				ServiceFlags	flags,
223*48a54d36SAndroid Build Coastguard Worker 				ErrorCode		errorCode,
224*48a54d36SAndroid Build Coastguard Worker  				String		*	name,
225*48a54d36SAndroid Build Coastguard Worker 				String		*	regtype,
226*48a54d36SAndroid Build Coastguard Worker 				String		*	domain
227*48a54d36SAndroid Build Coastguard Worker 				);
228*48a54d36SAndroid Build Coastguard Worker 
229*48a54d36SAndroid Build Coastguard Worker 			/*
230*48a54d36SAndroid Build Coastguard Worker 			* Internal - Dispatch a Browse callback
231*48a54d36SAndroid Build Coastguard Worker 			*/
232*48a54d36SAndroid Build Coastguard Worker 			void
233*48a54d36SAndroid Build Coastguard Worker 			BrowseDispatch
234*48a54d36SAndroid Build Coastguard Worker 				(
235*48a54d36SAndroid Build Coastguard Worker 				ServiceFlags	flags,
236*48a54d36SAndroid Build Coastguard Worker 				int				interfaceIndex,
237*48a54d36SAndroid Build Coastguard Worker 				ErrorCode		errorCode,
238*48a54d36SAndroid Build Coastguard Worker 				String		*	serviceName,
239*48a54d36SAndroid Build Coastguard Worker 				String		*	regtype,
240*48a54d36SAndroid Build Coastguard Worker 				String		*	replyDomain
241*48a54d36SAndroid Build Coastguard Worker 				);
242*48a54d36SAndroid Build Coastguard Worker 
243*48a54d36SAndroid Build Coastguard Worker 			/*
244*48a54d36SAndroid Build Coastguard Worker 			* Internal - Dispatch a Resolve callback
245*48a54d36SAndroid Build Coastguard Worker 			*/
246*48a54d36SAndroid Build Coastguard Worker 			void
247*48a54d36SAndroid Build Coastguard Worker 			ResolveDispatch
248*48a54d36SAndroid Build Coastguard Worker 				(
249*48a54d36SAndroid Build Coastguard Worker 				ServiceFlags	flags,
250*48a54d36SAndroid Build Coastguard Worker 				int				interfaceIndex,
251*48a54d36SAndroid Build Coastguard Worker 				ErrorCode		errorCode,
252*48a54d36SAndroid Build Coastguard Worker 				String		*	fullname,
253*48a54d36SAndroid Build Coastguard Worker 				String		*	hosttarget,
254*48a54d36SAndroid Build Coastguard Worker 				int				port,
255*48a54d36SAndroid Build Coastguard Worker 				Byte			txtRecord[]
256*48a54d36SAndroid Build Coastguard Worker 				);
257*48a54d36SAndroid Build Coastguard Worker 
258*48a54d36SAndroid Build Coastguard Worker 			/*
259*48a54d36SAndroid Build Coastguard Worker 			* Internal - Dispatch a RegisterRecord callback
260*48a54d36SAndroid Build Coastguard Worker 			*/
261*48a54d36SAndroid Build Coastguard Worker 			void
262*48a54d36SAndroid Build Coastguard Worker 			RegisterRecordDispatch
263*48a54d36SAndroid Build Coastguard Worker 				(
264*48a54d36SAndroid Build Coastguard Worker 				ServiceFlags	flags,
265*48a54d36SAndroid Build Coastguard Worker 				ErrorCode		errorCode,
266*48a54d36SAndroid Build Coastguard Worker 				RecordRef	*	record
267*48a54d36SAndroid Build Coastguard Worker 				);
268*48a54d36SAndroid Build Coastguard Worker 
269*48a54d36SAndroid Build Coastguard Worker 			/*
270*48a54d36SAndroid Build Coastguard Worker 			* Internal - Dispatch a QueryRecord callback
271*48a54d36SAndroid Build Coastguard Worker 			*/
272*48a54d36SAndroid Build Coastguard Worker 			void
273*48a54d36SAndroid Build Coastguard Worker 			QueryRecordDispatch
274*48a54d36SAndroid Build Coastguard Worker 				(
275*48a54d36SAndroid Build Coastguard Worker 				ServiceFlags	flags,
276*48a54d36SAndroid Build Coastguard Worker 				int				interfaceIndex,
277*48a54d36SAndroid Build Coastguard Worker 				ErrorCode		errorCode,
278*48a54d36SAndroid Build Coastguard Worker 				String		*	fullname,
279*48a54d36SAndroid Build Coastguard Worker 				int				rrtype,
280*48a54d36SAndroid Build Coastguard Worker 				int				rrclass,
281*48a54d36SAndroid Build Coastguard Worker 				Byte			rdata[],
282*48a54d36SAndroid Build Coastguard Worker 				int				ttl
283*48a54d36SAndroid Build Coastguard Worker 				);
284*48a54d36SAndroid Build Coastguard Worker 
285*48a54d36SAndroid Build Coastguard Worker 			/*
286*48a54d36SAndroid Build Coastguard Worker 			* Internal - A non managed class to wrap a DNSServiceRef
287*48a54d36SAndroid Build Coastguard Worker 			*/
288*48a54d36SAndroid Build Coastguard Worker 			__nogc class ServiceRefImpl
289*48a54d36SAndroid Build Coastguard Worker 			{
290*48a54d36SAndroid Build Coastguard Worker 			public:
291*48a54d36SAndroid Build Coastguard Worker 
292*48a54d36SAndroid Build Coastguard Worker 				ServiceRefImpl
293*48a54d36SAndroid Build Coastguard Worker 					(
294*48a54d36SAndroid Build Coastguard Worker 					ServiceRef * outer
295*48a54d36SAndroid Build Coastguard Worker 					);
296*48a54d36SAndroid Build Coastguard Worker 
297*48a54d36SAndroid Build Coastguard Worker 				~ServiceRefImpl();
298*48a54d36SAndroid Build Coastguard Worker 
299*48a54d36SAndroid Build Coastguard Worker 				/*
300*48a54d36SAndroid Build Coastguard Worker 				* Sets up events for threaded operation
301*48a54d36SAndroid Build Coastguard Worker 				*/
302*48a54d36SAndroid Build Coastguard Worker 				void
303*48a54d36SAndroid Build Coastguard Worker 				SetupEvents();
304*48a54d36SAndroid Build Coastguard Worker 
305*48a54d36SAndroid Build Coastguard Worker 				/*
306*48a54d36SAndroid Build Coastguard Worker 				* Main processing thread
307*48a54d36SAndroid Build Coastguard Worker 				*/
308*48a54d36SAndroid Build Coastguard Worker 				void
309*48a54d36SAndroid Build Coastguard Worker 				ProcessingThread();
310*48a54d36SAndroid Build Coastguard Worker 
311*48a54d36SAndroid Build Coastguard Worker 				/*
312*48a54d36SAndroid Build Coastguard Worker 				* Calls DNSServiceRefDeallocate()
313*48a54d36SAndroid Build Coastguard Worker 				*/
314*48a54d36SAndroid Build Coastguard Worker 				void
315*48a54d36SAndroid Build Coastguard Worker 				Dispose();
316*48a54d36SAndroid Build Coastguard Worker 
317*48a54d36SAndroid Build Coastguard Worker 				/*
318*48a54d36SAndroid Build Coastguard Worker 				* Called from dnssd.dll
319*48a54d36SAndroid Build Coastguard Worker 				*/
320*48a54d36SAndroid Build Coastguard Worker 				static void DNSSD_API
321*48a54d36SAndroid Build Coastguard Worker 				EnumerateDomainsCallback
322*48a54d36SAndroid Build Coastguard Worker 					(
323*48a54d36SAndroid Build Coastguard Worker 					DNSServiceRef			sdRef,
324*48a54d36SAndroid Build Coastguard Worker 					DNSServiceFlags			flags,
325*48a54d36SAndroid Build Coastguard Worker 					uint32_t				interfaceIndex,
326*48a54d36SAndroid Build Coastguard Worker 					DNSServiceErrorType		errorCode,
327*48a54d36SAndroid Build Coastguard Worker 					const char			*	replyDomain,
328*48a54d36SAndroid Build Coastguard Worker 					void				*	context
329*48a54d36SAndroid Build Coastguard Worker 					);
330*48a54d36SAndroid Build Coastguard Worker 
331*48a54d36SAndroid Build Coastguard Worker 				static void DNSSD_API
332*48a54d36SAndroid Build Coastguard Worker 				RegisterCallback
333*48a54d36SAndroid Build Coastguard Worker 					(
334*48a54d36SAndroid Build Coastguard Worker 					DNSServiceRef			ref,
335*48a54d36SAndroid Build Coastguard Worker 					DNSServiceFlags			flags,
336*48a54d36SAndroid Build Coastguard Worker 					DNSServiceErrorType		errorCode,
337*48a54d36SAndroid Build Coastguard Worker  					const char			*	name,
338*48a54d36SAndroid Build Coastguard Worker 					const char			*	regtype,
339*48a54d36SAndroid Build Coastguard Worker 					const char			*	domain,
340*48a54d36SAndroid Build Coastguard Worker 					void				*	context
341*48a54d36SAndroid Build Coastguard Worker 					);
342*48a54d36SAndroid Build Coastguard Worker 
343*48a54d36SAndroid Build Coastguard Worker 				static void DNSSD_API
344*48a54d36SAndroid Build Coastguard Worker 				BrowseCallback
345*48a54d36SAndroid Build Coastguard Worker 					(
346*48a54d36SAndroid Build Coastguard Worker 					DNSServiceRef			sdRef,
347*48a54d36SAndroid Build Coastguard Worker    					DNSServiceFlags			flags,
348*48a54d36SAndroid Build Coastguard Worker 					uint32_t				interfaceIndex,
349*48a54d36SAndroid Build Coastguard Worker 					DNSServiceErrorType		errorCode,
350*48a54d36SAndroid Build Coastguard Worker 					const char			*	serviceName,
351*48a54d36SAndroid Build Coastguard Worker 					const char			*	regtype,
352*48a54d36SAndroid Build Coastguard Worker 					const char			*	replyDomain,
353*48a54d36SAndroid Build Coastguard Worker 					void				*	context
354*48a54d36SAndroid Build Coastguard Worker 					);
355*48a54d36SAndroid Build Coastguard Worker 
356*48a54d36SAndroid Build Coastguard Worker 				static void DNSSD_API
357*48a54d36SAndroid Build Coastguard Worker 				ResolveCallback
358*48a54d36SAndroid Build Coastguard Worker 					(
359*48a54d36SAndroid Build Coastguard Worker 					DNSServiceRef			sdRef,
360*48a54d36SAndroid Build Coastguard Worker 					DNSServiceFlags			flags,
361*48a54d36SAndroid Build Coastguard Worker 					uint32_t				interfaceIndex,
362*48a54d36SAndroid Build Coastguard Worker 					DNSServiceErrorType		errorCode,
363*48a54d36SAndroid Build Coastguard Worker 					const char			*	fullname,
364*48a54d36SAndroid Build Coastguard Worker 					const char			*	hosttarget,
365*48a54d36SAndroid Build Coastguard Worker 					uint16_t				notAnIntPort,
366*48a54d36SAndroid Build Coastguard Worker 					uint16_t				txtLen,
367*48a54d36SAndroid Build Coastguard Worker 					const char			*	txtRecord,
368*48a54d36SAndroid Build Coastguard Worker 					void				*	context
369*48a54d36SAndroid Build Coastguard Worker 					);
370*48a54d36SAndroid Build Coastguard Worker 
371*48a54d36SAndroid Build Coastguard Worker 				static void DNSSD_API
372*48a54d36SAndroid Build Coastguard Worker 				RegisterRecordCallback
373*48a54d36SAndroid Build Coastguard Worker 					(
374*48a54d36SAndroid Build Coastguard Worker 					DNSServiceRef		sdRef,
375*48a54d36SAndroid Build Coastguard Worker 					DNSRecordRef		RecordRef,
376*48a54d36SAndroid Build Coastguard Worker 					DNSServiceFlags		flags,
377*48a54d36SAndroid Build Coastguard Worker 					DNSServiceErrorType	errorCode,
378*48a54d36SAndroid Build Coastguard Worker 					void			*	context
379*48a54d36SAndroid Build Coastguard Worker 					);
380*48a54d36SAndroid Build Coastguard Worker 
381*48a54d36SAndroid Build Coastguard Worker 				static void DNSSD_API
382*48a54d36SAndroid Build Coastguard Worker 				QueryRecordCallback
383*48a54d36SAndroid Build Coastguard Worker 					(
384*48a54d36SAndroid Build Coastguard Worker 					DNSServiceRef			DNSServiceRef,
385*48a54d36SAndroid Build Coastguard Worker 					DNSServiceFlags			flags,
386*48a54d36SAndroid Build Coastguard Worker 					uint32_t				interfaceIndex,
387*48a54d36SAndroid Build Coastguard Worker 					DNSServiceErrorType		errorCode,
388*48a54d36SAndroid Build Coastguard Worker 					const char			*	fullname,
389*48a54d36SAndroid Build Coastguard Worker 					uint16_t				rrtype,
390*48a54d36SAndroid Build Coastguard Worker 					uint16_t				rrclass,
391*48a54d36SAndroid Build Coastguard Worker 					uint16_t				rdlen,
392*48a54d36SAndroid Build Coastguard Worker 					const void			*	rdata,
393*48a54d36SAndroid Build Coastguard Worker 					uint32_t				ttl,
394*48a54d36SAndroid Build Coastguard Worker 					void				*	context
395*48a54d36SAndroid Build Coastguard Worker 					);
396*48a54d36SAndroid Build Coastguard Worker 
397*48a54d36SAndroid Build Coastguard Worker 				SOCKET				m_socket;
398*48a54d36SAndroid Build Coastguard Worker 				HANDLE				m_socketEvent;
399*48a54d36SAndroid Build Coastguard Worker 				HANDLE				m_stopEvent;
400*48a54d36SAndroid Build Coastguard Worker 				DWORD				m_threadId;
401*48a54d36SAndroid Build Coastguard Worker 				bool				m_disposed;
402*48a54d36SAndroid Build Coastguard Worker 				DNSServiceRef		m_ref;
403*48a54d36SAndroid Build Coastguard Worker 				gcroot<ServiceRef*> m_outer;
404*48a54d36SAndroid Build Coastguard Worker 			};
405*48a54d36SAndroid Build Coastguard Worker 
406*48a54d36SAndroid Build Coastguard Worker 			void
407*48a54d36SAndroid Build Coastguard Worker 			StartThread();
408*48a54d36SAndroid Build Coastguard Worker 
409*48a54d36SAndroid Build Coastguard Worker 			void
410*48a54d36SAndroid Build Coastguard Worker 			ProcessingThread();
411*48a54d36SAndroid Build Coastguard Worker 
412*48a54d36SAndroid Build Coastguard Worker 			bool				m_bDisposed;
413*48a54d36SAndroid Build Coastguard Worker 			Object			*	m_callback;
414*48a54d36SAndroid Build Coastguard Worker 			Thread			*	m_thread;
415*48a54d36SAndroid Build Coastguard Worker 			ServiceRefImpl	*	m_impl;
416*48a54d36SAndroid Build Coastguard Worker 		};
417*48a54d36SAndroid Build Coastguard Worker 
418*48a54d36SAndroid Build Coastguard Worker 		/*********************************************************************************************
419*48a54d36SAndroid Build Coastguard Worker 		*
420*48a54d36SAndroid Build Coastguard Worker 		*   TXT Record Construction Functions
421*48a54d36SAndroid Build Coastguard Worker 		*
422*48a54d36SAndroid Build Coastguard Worker 		*********************************************************************************************/
423*48a54d36SAndroid Build Coastguard Worker 
424*48a54d36SAndroid Build Coastguard Worker 		/*
425*48a54d36SAndroid Build Coastguard Worker 		* A typical calling sequence for TXT record construction is something like:
426*48a54d36SAndroid Build Coastguard Worker 		*
427*48a54d36SAndroid Build Coastguard Worker 		* DNSService.TextRecord tr = new DNSService.TextRecord(1024);
428*48a54d36SAndroid Build Coastguard Worker 		* tr.SetValue();
429*48a54d36SAndroid Build Coastguard Worker 		* tr.SetValue();
430*48a54d36SAndroid Build Coastguard Worker 		* tr.SetValue();
431*48a54d36SAndroid Build Coastguard Worker 		* ...
432*48a54d36SAndroid Build Coastguard Worker 		* DNSServiceRegister( ... tr.GetLength(), tr.GetBytes() ... );
433*48a54d36SAndroid Build Coastguard Worker 		*/
434*48a54d36SAndroid Build Coastguard Worker 
435*48a54d36SAndroid Build Coastguard Worker 
436*48a54d36SAndroid Build Coastguard Worker 		/* TextRecord
437*48a54d36SAndroid Build Coastguard Worker 		*
438*48a54d36SAndroid Build Coastguard Worker 		* Opaque internal data type.
439*48a54d36SAndroid Build Coastguard Worker 		* Note: Represents a DNS-SD TXT record.
440*48a54d36SAndroid Build Coastguard Worker 		*/
441*48a54d36SAndroid Build Coastguard Worker 
442*48a54d36SAndroid Build Coastguard Worker 
443*48a54d36SAndroid Build Coastguard Worker 		/* TextRecord::TextRecord()
444*48a54d36SAndroid Build Coastguard Worker 		*
445*48a54d36SAndroid Build Coastguard Worker 		* Creates a new empty TextRecord .
446*48a54d36SAndroid Build Coastguard Worker 		*
447*48a54d36SAndroid Build Coastguard Worker 		*/
448*48a54d36SAndroid Build Coastguard Worker 
449*48a54d36SAndroid Build Coastguard Worker 		public __gc class TextRecord
450*48a54d36SAndroid Build Coastguard Worker 		{
451*48a54d36SAndroid Build Coastguard Worker 		public:
452*48a54d36SAndroid Build Coastguard Worker 
TextRecord()453*48a54d36SAndroid Build Coastguard Worker 			TextRecord()
454*48a54d36SAndroid Build Coastguard Worker 			{
455*48a54d36SAndroid Build Coastguard Worker 				m_impl = new TextRecordImpl();
456*48a54d36SAndroid Build Coastguard Worker 				TXTRecordCreate(&m_impl->m_ref, 0, NULL);
457*48a54d36SAndroid Build Coastguard Worker 			}
458*48a54d36SAndroid Build Coastguard Worker 
~TextRecord()459*48a54d36SAndroid Build Coastguard Worker 			~TextRecord()
460*48a54d36SAndroid Build Coastguard Worker 			{
461*48a54d36SAndroid Build Coastguard Worker 				TXTRecordDeallocate(&m_impl->m_ref);
462*48a54d36SAndroid Build Coastguard Worker 				delete m_impl;
463*48a54d36SAndroid Build Coastguard Worker 			}
464*48a54d36SAndroid Build Coastguard Worker 
465*48a54d36SAndroid Build Coastguard Worker 			__nogc class TextRecordImpl
466*48a54d36SAndroid Build Coastguard Worker 			{
467*48a54d36SAndroid Build Coastguard Worker 			public:
468*48a54d36SAndroid Build Coastguard Worker 
469*48a54d36SAndroid Build Coastguard Worker 				TXTRecordRef m_ref;
470*48a54d36SAndroid Build Coastguard Worker 			};
471*48a54d36SAndroid Build Coastguard Worker 
472*48a54d36SAndroid Build Coastguard Worker 			TextRecordImpl * m_impl;
473*48a54d36SAndroid Build Coastguard Worker 
474*48a54d36SAndroid Build Coastguard Worker 
475*48a54d36SAndroid Build Coastguard Worker 			/* SetValue()
476*48a54d36SAndroid Build Coastguard Worker 			*
477*48a54d36SAndroid Build Coastguard Worker 			* Adds a key (optionally with value) to a TextRecord. If the "key" already
478*48a54d36SAndroid Build Coastguard Worker 			* exists in the TextRecord, then the current value will be replaced with
479*48a54d36SAndroid Build Coastguard Worker 			* the new value.
480*48a54d36SAndroid Build Coastguard Worker 			* Keys may exist in four states with respect to a given TXT record:
481*48a54d36SAndroid Build Coastguard Worker 			*  - Absent (key does not appear at all)
482*48a54d36SAndroid Build Coastguard Worker 			*  - Present with no value ("key" appears alone)
483*48a54d36SAndroid Build Coastguard Worker 			*  - Present with empty value ("key=" appears in TXT record)
484*48a54d36SAndroid Build Coastguard Worker 			*  - Present with non-empty value ("key=value" appears in TXT record)
485*48a54d36SAndroid Build Coastguard Worker 			* For more details refer to "Data Syntax for DNS-SD TXT Records" in
486*48a54d36SAndroid Build Coastguard Worker 			* <http://files.dns-sd.org/draft-cheshire-dnsext-dns-sd.txt>
487*48a54d36SAndroid Build Coastguard Worker 			*
488*48a54d36SAndroid Build Coastguard Worker 			* key:             A null-terminated string which only contains printable ASCII
489*48a54d36SAndroid Build Coastguard Worker 			*                  values (0x20-0x7E), excluding '=' (0x3D). Keys should be
490*48a54d36SAndroid Build Coastguard Worker 			*                  14 characters or less (not counting the terminating null).
491*48a54d36SAndroid Build Coastguard Worker 			*
492*48a54d36SAndroid Build Coastguard Worker 			* value:           Any binary value. For values that represent
493*48a54d36SAndroid Build Coastguard Worker 			*                  textual data, UTF-8 is STRONGLY recommended.
494*48a54d36SAndroid Build Coastguard Worker 			*                  For values that represent textual data, valueSize
495*48a54d36SAndroid Build Coastguard Worker 			*                  should NOT include the terminating null (if any)
496*48a54d36SAndroid Build Coastguard Worker 			*                  at the end of the string.
497*48a54d36SAndroid Build Coastguard Worker 			*                  If NULL, then "key" will be added with no value.
498*48a54d36SAndroid Build Coastguard Worker 			*                  If non-NULL but valueSize is zero, then "key=" will be
499*48a54d36SAndroid Build Coastguard Worker 			*                  added with empty value.
500*48a54d36SAndroid Build Coastguard Worker 			*
501*48a54d36SAndroid Build Coastguard Worker 			* exceptions:      Throws kDNSServiceErr_Invalid if the "key" string contains
502*48a54d36SAndroid Build Coastguard Worker 			*                  illegal characters.
503*48a54d36SAndroid Build Coastguard Worker 			*                  Throws kDNSServiceErr_NoMemory if adding this key would
504*48a54d36SAndroid Build Coastguard Worker 			*                  exceed the available storage.
505*48a54d36SAndroid Build Coastguard Worker 			*/
506*48a54d36SAndroid Build Coastguard Worker 
507*48a54d36SAndroid Build Coastguard Worker 			void
508*48a54d36SAndroid Build Coastguard Worker 			SetValue
509*48a54d36SAndroid Build Coastguard Worker 				(
510*48a54d36SAndroid Build Coastguard Worker 				String	*	key,
511*48a54d36SAndroid Build Coastguard Worker 				Byte		value[]  /* may be NULL */
512*48a54d36SAndroid Build Coastguard Worker 				);
513*48a54d36SAndroid Build Coastguard Worker 
514*48a54d36SAndroid Build Coastguard Worker 
515*48a54d36SAndroid Build Coastguard Worker 			/* RemoveValue()
516*48a54d36SAndroid Build Coastguard Worker 			*
517*48a54d36SAndroid Build Coastguard Worker 			* Removes a key from a TextRecord.  The "key" must be an
518*48a54d36SAndroid Build Coastguard Worker 			* ASCII string which exists in the TextRecord.
519*48a54d36SAndroid Build Coastguard Worker 			*
520*48a54d36SAndroid Build Coastguard Worker 			* key:             A key name which exists in the TextRecord.
521*48a54d36SAndroid Build Coastguard Worker 			*
522*48a54d36SAndroid Build Coastguard Worker 			* exceptions:      Throws kDNSServiceErr_NoSuchKey if the "key" does not
523*48a54d36SAndroid Build Coastguard Worker 			*                  exist in the TextRecord.
524*48a54d36SAndroid Build Coastguard Worker 			*
525*48a54d36SAndroid Build Coastguard Worker 			*/
526*48a54d36SAndroid Build Coastguard Worker 
527*48a54d36SAndroid Build Coastguard Worker 			void
528*48a54d36SAndroid Build Coastguard Worker 			RemoveValue
529*48a54d36SAndroid Build Coastguard Worker 				(
530*48a54d36SAndroid Build Coastguard Worker 				String	*	key
531*48a54d36SAndroid Build Coastguard Worker 				);
532*48a54d36SAndroid Build Coastguard Worker 
533*48a54d36SAndroid Build Coastguard Worker 
534*48a54d36SAndroid Build Coastguard Worker 			/* GetLength()
535*48a54d36SAndroid Build Coastguard Worker 			*
536*48a54d36SAndroid Build Coastguard Worker 			* Allows you to determine the length of the raw bytes within a TextRecord.
537*48a54d36SAndroid Build Coastguard Worker 			*
538*48a54d36SAndroid Build Coastguard Worker 			* return value :     Returns the size of the raw bytes inside a TextRecord
539*48a54d36SAndroid Build Coastguard Worker 			*                  which you can pass directly to DNSServiceRegister() or
540*48a54d36SAndroid Build Coastguard Worker 			*                  to DNSServiceUpdateRecord().
541*48a54d36SAndroid Build Coastguard Worker 			*                  Returns 0 if the TextRecord is empty.
542*48a54d36SAndroid Build Coastguard Worker 			*
543*48a54d36SAndroid Build Coastguard Worker 			*/
544*48a54d36SAndroid Build Coastguard Worker 
545*48a54d36SAndroid Build Coastguard Worker 			int
546*48a54d36SAndroid Build Coastguard Worker 			GetLength
547*48a54d36SAndroid Build Coastguard Worker 				(
548*48a54d36SAndroid Build Coastguard Worker 				);
549*48a54d36SAndroid Build Coastguard Worker 
550*48a54d36SAndroid Build Coastguard Worker 
551*48a54d36SAndroid Build Coastguard Worker 			/* GetBytes()
552*48a54d36SAndroid Build Coastguard Worker 			*
553*48a54d36SAndroid Build Coastguard Worker 			* Allows you to retrieve a pointer to the raw bytes within a TextRecord.
554*48a54d36SAndroid Build Coastguard Worker 			*
555*48a54d36SAndroid Build Coastguard Worker 			* return value:    Returns a pointer to the bytes inside the TextRecord
556*48a54d36SAndroid Build Coastguard Worker 			*                  which you can pass directly to DNSServiceRegister() or
557*48a54d36SAndroid Build Coastguard Worker 			*                  to DNSServiceUpdateRecord().
558*48a54d36SAndroid Build Coastguard Worker 			*
559*48a54d36SAndroid Build Coastguard Worker 			*/
560*48a54d36SAndroid Build Coastguard Worker 
561*48a54d36SAndroid Build Coastguard Worker 			Byte
562*48a54d36SAndroid Build Coastguard Worker 			GetBytes
563*48a54d36SAndroid Build Coastguard Worker 				(
564*48a54d36SAndroid Build Coastguard Worker 				) __gc[];
565*48a54d36SAndroid Build Coastguard Worker 
566*48a54d36SAndroid Build Coastguard Worker 
567*48a54d36SAndroid Build Coastguard Worker 			/*********************************************************************************************
568*48a54d36SAndroid Build Coastguard Worker 			*
569*48a54d36SAndroid Build Coastguard Worker 			*   TXT Record Parsing Functions
570*48a54d36SAndroid Build Coastguard Worker 			*
571*48a54d36SAndroid Build Coastguard Worker 			*********************************************************************************************/
572*48a54d36SAndroid Build Coastguard Worker 
573*48a54d36SAndroid Build Coastguard Worker 			/*
574*48a54d36SAndroid Build Coastguard Worker 			* A typical calling sequence for TXT record parsing is something like:
575*48a54d36SAndroid Build Coastguard Worker 			*
576*48a54d36SAndroid Build Coastguard Worker 			* Receive TXT record data in DNSServiceResolve() callback
577*48a54d36SAndroid Build Coastguard Worker 			* if (TXTRecordContainsKey(txtLen, txtRecord, "key")) then do something
578*48a54d36SAndroid Build Coastguard Worker 			* val1ptr = DNSService.TextService.GetValue(txtRecord, "key1", &len1);
579*48a54d36SAndroid Build Coastguard Worker 			* val2ptr = DNSService.TextService.GetValue(txtRecord, "key2", &len2);
580*48a54d36SAndroid Build Coastguard Worker 			* ...
581*48a54d36SAndroid Build Coastguard Worker 			* return;
582*48a54d36SAndroid Build Coastguard Worker 			*
583*48a54d36SAndroid Build Coastguard Worker 			*/
584*48a54d36SAndroid Build Coastguard Worker 
585*48a54d36SAndroid Build Coastguard Worker 			/* ContainsKey()
586*48a54d36SAndroid Build Coastguard Worker 			*
587*48a54d36SAndroid Build Coastguard Worker 			* Allows you to determine if a given TXT Record contains a specified key.
588*48a54d36SAndroid Build Coastguard Worker 			*
589*48a54d36SAndroid Build Coastguard Worker 			* txtRecord:       Pointer to the received TXT Record bytes.
590*48a54d36SAndroid Build Coastguard Worker 			*
591*48a54d36SAndroid Build Coastguard Worker 			* key:             A null-terminated ASCII string containing the key name.
592*48a54d36SAndroid Build Coastguard Worker 			*
593*48a54d36SAndroid Build Coastguard Worker 			* return value:    Returns 1 if the TXT Record contains the specified key.
594*48a54d36SAndroid Build Coastguard Worker 			*                  Otherwise, it returns 0.
595*48a54d36SAndroid Build Coastguard Worker 			*
596*48a54d36SAndroid Build Coastguard Worker 			*/
597*48a54d36SAndroid Build Coastguard Worker 
598*48a54d36SAndroid Build Coastguard Worker 			static public bool
599*48a54d36SAndroid Build Coastguard Worker 			ContainsKey
600*48a54d36SAndroid Build Coastguard Worker 				(
601*48a54d36SAndroid Build Coastguard Worker 				Byte		txtRecord[],
602*48a54d36SAndroid Build Coastguard Worker 				String	*	key
603*48a54d36SAndroid Build Coastguard Worker 				);
604*48a54d36SAndroid Build Coastguard Worker 
605*48a54d36SAndroid Build Coastguard Worker 
606*48a54d36SAndroid Build Coastguard Worker 			/* GetValueBytes()
607*48a54d36SAndroid Build Coastguard Worker 			*
608*48a54d36SAndroid Build Coastguard Worker 			* Allows you to retrieve the value for a given key from a TXT Record.
609*48a54d36SAndroid Build Coastguard Worker 			*
610*48a54d36SAndroid Build Coastguard Worker 			* txtRecord:       Pointer to the received TXT Record bytes.
611*48a54d36SAndroid Build Coastguard Worker 			*
612*48a54d36SAndroid Build Coastguard Worker 			* key:             A null-terminated ASCII string containing the key name.
613*48a54d36SAndroid Build Coastguard Worker 			*
614*48a54d36SAndroid Build Coastguard Worker 			* return value:    Returns NULL if the key does not exist in this TXT record,
615*48a54d36SAndroid Build Coastguard Worker 			*                  or exists with no value (to differentiate between
616*48a54d36SAndroid Build Coastguard Worker 			*                  these two cases use ContainsKey()).
617*48a54d36SAndroid Build Coastguard Worker 			*                  Returns byte array
618*48a54d36SAndroid Build Coastguard Worker 			*                  if the key exists with empty or non-empty value.
619*48a54d36SAndroid Build Coastguard Worker 			*                  For empty value, length of byte array will be zero.
620*48a54d36SAndroid Build Coastguard Worker 			*                  For non-empty value, it will be the length of value data.
621*48a54d36SAndroid Build Coastguard Worker 			*/
622*48a54d36SAndroid Build Coastguard Worker 
623*48a54d36SAndroid Build Coastguard Worker 			static public Byte
624*48a54d36SAndroid Build Coastguard Worker 			GetValueBytes
625*48a54d36SAndroid Build Coastguard Worker 				(
626*48a54d36SAndroid Build Coastguard Worker 				Byte		txtRecord[],
627*48a54d36SAndroid Build Coastguard Worker 				String	*	key
628*48a54d36SAndroid Build Coastguard Worker 				) __gc[];
629*48a54d36SAndroid Build Coastguard Worker 
630*48a54d36SAndroid Build Coastguard Worker 
631*48a54d36SAndroid Build Coastguard Worker 			/* GetCount()
632*48a54d36SAndroid Build Coastguard Worker 			*
633*48a54d36SAndroid Build Coastguard Worker 			* Returns the number of keys stored in the TXT Record.  The count
634*48a54d36SAndroid Build Coastguard Worker 			* can be used with TXTRecordGetItemAtIndex() to iterate through the keys.
635*48a54d36SAndroid Build Coastguard Worker 			*
636*48a54d36SAndroid Build Coastguard Worker 			* txtRecord:       Pointer to the received TXT Record bytes.
637*48a54d36SAndroid Build Coastguard Worker 			*
638*48a54d36SAndroid Build Coastguard Worker 			* return value:    Returns the total number of keys in the TXT Record.
639*48a54d36SAndroid Build Coastguard Worker 			*
640*48a54d36SAndroid Build Coastguard Worker 			*/
641*48a54d36SAndroid Build Coastguard Worker 
642*48a54d36SAndroid Build Coastguard Worker 			static public int
643*48a54d36SAndroid Build Coastguard Worker 			GetCount
644*48a54d36SAndroid Build Coastguard Worker 				(
645*48a54d36SAndroid Build Coastguard Worker 				Byte	txtRecord[]
646*48a54d36SAndroid Build Coastguard Worker 				);
647*48a54d36SAndroid Build Coastguard Worker 
648*48a54d36SAndroid Build Coastguard Worker 
649*48a54d36SAndroid Build Coastguard Worker 			/* GetItemAtIndex()
650*48a54d36SAndroid Build Coastguard Worker 			*
651*48a54d36SAndroid Build Coastguard Worker 			* Allows you to retrieve a key name and value pointer, given an index into
652*48a54d36SAndroid Build Coastguard Worker 			* a TXT Record.  Legal index values range from zero to TXTRecordGetCount()-1.
653*48a54d36SAndroid Build Coastguard Worker 			* It's also possible to iterate through keys in a TXT record by simply
654*48a54d36SAndroid Build Coastguard Worker 			* calling TXTRecordGetItemAtIndex() repeatedly, beginning with index zero
655*48a54d36SAndroid Build Coastguard Worker 			* and increasing until TXTRecordGetItemAtIndex() returns kDNSServiceErr_Invalid.
656*48a54d36SAndroid Build Coastguard Worker 			*
657*48a54d36SAndroid Build Coastguard Worker 			* On return:
658*48a54d36SAndroid Build Coastguard Worker 			* For keys with no value, *value is set to NULL and *valueLen is zero.
659*48a54d36SAndroid Build Coastguard Worker 			* For keys with empty value, *value is non-NULL and *valueLen is zero.
660*48a54d36SAndroid Build Coastguard Worker 			* For keys with non-empty value, *value is non-NULL and *valueLen is non-zero.
661*48a54d36SAndroid Build Coastguard Worker 			*
662*48a54d36SAndroid Build Coastguard Worker 			* txtRecord:       Pointer to the received TXT Record bytes.
663*48a54d36SAndroid Build Coastguard Worker 			*
664*48a54d36SAndroid Build Coastguard Worker 			* index:           An index into the TXT Record.
665*48a54d36SAndroid Build Coastguard Worker 			*
666*48a54d36SAndroid Build Coastguard Worker 			* key:             A string buffer used to store the key name.
667*48a54d36SAndroid Build Coastguard Worker 			*                  On return, the buffer contains a string
668*48a54d36SAndroid Build Coastguard Worker 			*                  giving the key name. DNS-SD TXT keys are usually
669*48a54d36SAndroid Build Coastguard Worker 			*                  14 characters or less.
670*48a54d36SAndroid Build Coastguard Worker 			*
671*48a54d36SAndroid Build Coastguard Worker 			* return value:    Record bytes that holds the value data.
672*48a54d36SAndroid Build Coastguard Worker 			*
673*48a54d36SAndroid Build Coastguard Worker 			* exceptions:      Throws kDNSServiceErr_Invalid if index is greater than
674*48a54d36SAndroid Build Coastguard Worker 			*                  GetCount()-1.
675*48a54d36SAndroid Build Coastguard Worker 			*/
676*48a54d36SAndroid Build Coastguard Worker 
677*48a54d36SAndroid Build Coastguard Worker 			static public Byte
678*48a54d36SAndroid Build Coastguard Worker 			GetItemAtIndex
679*48a54d36SAndroid Build Coastguard Worker 				(
680*48a54d36SAndroid Build Coastguard Worker 				Byte				txtRecord[],
681*48a54d36SAndroid Build Coastguard Worker 				int					index,
682*48a54d36SAndroid Build Coastguard Worker 				[Out] String	**	key
683*48a54d36SAndroid Build Coastguard Worker 				) __gc[];
684*48a54d36SAndroid Build Coastguard Worker 		};
685*48a54d36SAndroid Build Coastguard Worker 
686*48a54d36SAndroid Build Coastguard Worker 
687*48a54d36SAndroid Build Coastguard Worker 		public __abstract __gc class DNSService
688*48a54d36SAndroid Build Coastguard Worker 		{
689*48a54d36SAndroid Build Coastguard Worker 		public:
690*48a54d36SAndroid Build Coastguard Worker 
691*48a54d36SAndroid Build Coastguard Worker 			/*********************************************************************************************
692*48a54d36SAndroid Build Coastguard Worker 			*
693*48a54d36SAndroid Build Coastguard Worker 			* Domain Enumeration
694*48a54d36SAndroid Build Coastguard Worker 			*
695*48a54d36SAndroid Build Coastguard Worker 			*********************************************************************************************/
696*48a54d36SAndroid Build Coastguard Worker 
697*48a54d36SAndroid Build Coastguard Worker 			/* DNSServiceEnumerateDomains()
698*48a54d36SAndroid Build Coastguard Worker 			*
699*48a54d36SAndroid Build Coastguard Worker 			* Asynchronously enumerate domains available for browsing and registration.
700*48a54d36SAndroid Build Coastguard Worker 			* Currently, the only domain returned is "local.", but other domains will be returned in future.
701*48a54d36SAndroid Build Coastguard Worker 			*
702*48a54d36SAndroid Build Coastguard Worker 			* The enumeration MUST be cancelled via DNSServiceRefDeallocate() when no more domains
703*48a54d36SAndroid Build Coastguard Worker 			* are to be found.
704*48a54d36SAndroid Build Coastguard Worker 			*
705*48a54d36SAndroid Build Coastguard Worker 			*
706*48a54d36SAndroid Build Coastguard Worker 			* EnumerateDomainsReply Delegate
707*48a54d36SAndroid Build Coastguard Worker 			*
708*48a54d36SAndroid Build Coastguard Worker 			* This Delegate is invoked upon a reply from an EnumerateDomains call.
709*48a54d36SAndroid Build Coastguard Worker 			*
710*48a54d36SAndroid Build Coastguard Worker 			* sdRef:           The DNSServiceRef initialized by DNSServiceEnumerateDomains().
711*48a54d36SAndroid Build Coastguard Worker 			*
712*48a54d36SAndroid Build Coastguard Worker 			* flags:           Possible values are:
713*48a54d36SAndroid Build Coastguard Worker 			*                  MoreComing
714*48a54d36SAndroid Build Coastguard Worker 			*                  Add
715*48a54d36SAndroid Build Coastguard Worker 			*                  Default
716*48a54d36SAndroid Build Coastguard Worker 			*
717*48a54d36SAndroid Build Coastguard Worker 			* interfaceIndex:  Specifies the interface on which the domain exists.  (The index for a given
718*48a54d36SAndroid Build Coastguard Worker 			*                  interface is determined via the if_nametoindex() family of calls.)
719*48a54d36SAndroid Build Coastguard Worker 			*
720*48a54d36SAndroid Build Coastguard Worker 			* errorCode:       Will be NoError (0) on success, otherwise indicates
721*48a54d36SAndroid Build Coastguard Worker 			*                  the failure that occurred (other parameters are undefined if errorCode is nonzero).
722*48a54d36SAndroid Build Coastguard Worker 			*
723*48a54d36SAndroid Build Coastguard Worker 			* replyDomain:     The name of the domain.
724*48a54d36SAndroid Build Coastguard Worker 			*
725*48a54d36SAndroid Build Coastguard Worker 			*/
726*48a54d36SAndroid Build Coastguard Worker 
727*48a54d36SAndroid Build Coastguard Worker 			__delegate void
728*48a54d36SAndroid Build Coastguard Worker 			EnumerateDomainsReply
729*48a54d36SAndroid Build Coastguard Worker 				(
730*48a54d36SAndroid Build Coastguard Worker 				ServiceRef	*	sdRef,
731*48a54d36SAndroid Build Coastguard Worker 				ServiceFlags	flags,
732*48a54d36SAndroid Build Coastguard Worker 				int				interfaceIndex,
733*48a54d36SAndroid Build Coastguard Worker 				ErrorCode		errorCode,
734*48a54d36SAndroid Build Coastguard Worker 				String		*	replyDomain
735*48a54d36SAndroid Build Coastguard Worker 				);
736*48a54d36SAndroid Build Coastguard Worker 
737*48a54d36SAndroid Build Coastguard Worker 			/* DNSServiceEnumerateDomains() Parameters:
738*48a54d36SAndroid Build Coastguard Worker 			*
739*48a54d36SAndroid Build Coastguard Worker 			*
740*48a54d36SAndroid Build Coastguard Worker 			* flags:           Possible values are:
741*48a54d36SAndroid Build Coastguard Worker 			*                  BrowseDomains to enumerate domains recommended for browsing.
742*48a54d36SAndroid Build Coastguard Worker 			*                  RegistrationDomains to enumerate domains recommended
743*48a54d36SAndroid Build Coastguard Worker 			*                  for registration.
744*48a54d36SAndroid Build Coastguard Worker 			*
745*48a54d36SAndroid Build Coastguard Worker 			* interfaceIndex:  If non-zero, specifies the interface on which to look for domains.
746*48a54d36SAndroid Build Coastguard Worker 			*                  (the index for a given interface is determined via the if_nametoindex()
747*48a54d36SAndroid Build Coastguard Worker 			*                  family of calls.)  Most applications will pass 0 to enumerate domains on
748*48a54d36SAndroid Build Coastguard Worker 			*                  all interfaces.
749*48a54d36SAndroid Build Coastguard Worker 			*
750*48a54d36SAndroid Build Coastguard Worker 			* callback:        The delegate to be called when a domain is found or the call asynchronously
751*48a54d36SAndroid Build Coastguard Worker 			*                  fails.
752*48a54d36SAndroid Build Coastguard Worker 			*
753*48a54d36SAndroid Build Coastguard Worker 			*
754*48a54d36SAndroid Build Coastguard Worker 			* return value:    Returns initialize ServiceRef on succeses (any subsequent, asynchronous
755*48a54d36SAndroid Build Coastguard Worker 			*                  errors are delivered to the delegate), otherwise throws an exception indicating
756*48a54d36SAndroid Build Coastguard Worker 			*                  the error that occurred (the callback is not invoked and the ServiceRef
757*48a54d36SAndroid Build Coastguard Worker 			*                  is not initialized.)
758*48a54d36SAndroid Build Coastguard Worker 			*/
759*48a54d36SAndroid Build Coastguard Worker 
760*48a54d36SAndroid Build Coastguard Worker 			static public ServiceRef*
761*48a54d36SAndroid Build Coastguard Worker 			EnumerateDomains
762*48a54d36SAndroid Build Coastguard Worker 				(
763*48a54d36SAndroid Build Coastguard Worker 				int							flags,
764*48a54d36SAndroid Build Coastguard Worker 				int							interfaceIndex,
765*48a54d36SAndroid Build Coastguard Worker 				EnumerateDomainsReply	*	callback
766*48a54d36SAndroid Build Coastguard Worker 				);
767*48a54d36SAndroid Build Coastguard Worker 
768*48a54d36SAndroid Build Coastguard Worker 			/*********************************************************************************************
769*48a54d36SAndroid Build Coastguard Worker 			*
770*48a54d36SAndroid Build Coastguard Worker 			*  Service Registration
771*48a54d36SAndroid Build Coastguard Worker 			*
772*48a54d36SAndroid Build Coastguard Worker 			*********************************************************************************************/
773*48a54d36SAndroid Build Coastguard Worker 
774*48a54d36SAndroid Build Coastguard Worker 			/* Register a service that is discovered via Browse() and Resolve() calls.
775*48a54d36SAndroid Build Coastguard Worker 			*
776*48a54d36SAndroid Build Coastguard Worker 			* RegisterReply() Callback Parameters:
777*48a54d36SAndroid Build Coastguard Worker 			*
778*48a54d36SAndroid Build Coastguard Worker 			* sdRef:           The ServiceRef initialized by Register().
779*48a54d36SAndroid Build Coastguard Worker 			*
780*48a54d36SAndroid Build Coastguard Worker 			* flags:           Currently unused, reserved for future use.
781*48a54d36SAndroid Build Coastguard Worker 			*
782*48a54d36SAndroid Build Coastguard Worker 			* errorCode:       Will be NoError on success, otherwise will
783*48a54d36SAndroid Build Coastguard Worker 			*                  indicate the failure that occurred (including name conflicts, if the
784*48a54d36SAndroid Build Coastguard Worker 			*                  NoAutoRename flag was passed to the
785*48a54d36SAndroid Build Coastguard Worker 			*                  callout.)  Other parameters are undefined if errorCode is nonzero.
786*48a54d36SAndroid Build Coastguard Worker 			*
787*48a54d36SAndroid Build Coastguard Worker 			* name:            The service name registered (if the application did not specify a name in
788*48a54d36SAndroid Build Coastguard Worker 			*                  DNSServiceRegister(), this indicates what name was automatically chosen).
789*48a54d36SAndroid Build Coastguard Worker 			*
790*48a54d36SAndroid Build Coastguard Worker 			* regtype:         The type of service registered, as it was passed to the callout.
791*48a54d36SAndroid Build Coastguard Worker 			*
792*48a54d36SAndroid Build Coastguard Worker 			* domain:          The domain on which the service was registered (if the application did not
793*48a54d36SAndroid Build Coastguard Worker 			*                  specify a domain in Register(), this indicates the default domain
794*48a54d36SAndroid Build Coastguard Worker 			*                  on which the service was registered).
795*48a54d36SAndroid Build Coastguard Worker 			*
796*48a54d36SAndroid Build Coastguard Worker 			*/
797*48a54d36SAndroid Build Coastguard Worker 
798*48a54d36SAndroid Build Coastguard Worker 			__delegate void
799*48a54d36SAndroid Build Coastguard Worker 			RegisterReply
800*48a54d36SAndroid Build Coastguard Worker 				(
801*48a54d36SAndroid Build Coastguard Worker 				ServiceRef	*	sdRef,
802*48a54d36SAndroid Build Coastguard Worker 				ServiceFlags	flags,
803*48a54d36SAndroid Build Coastguard Worker 				ErrorCode		errorCode,
804*48a54d36SAndroid Build Coastguard Worker 				String		*	name,
805*48a54d36SAndroid Build Coastguard Worker 				String		*	regtype,
806*48a54d36SAndroid Build Coastguard Worker 				String		*	domain
807*48a54d36SAndroid Build Coastguard Worker 				);
808*48a54d36SAndroid Build Coastguard Worker 
809*48a54d36SAndroid Build Coastguard Worker 			/* Register()  Parameters:
810*48a54d36SAndroid Build Coastguard Worker 			*
811*48a54d36SAndroid Build Coastguard Worker 			* flags:           Indicates the renaming behavior on name conflict (most applications
812*48a54d36SAndroid Build Coastguard Worker 			*                  will pass 0).  See flag definitions above for details.
813*48a54d36SAndroid Build Coastguard Worker 			*
814*48a54d36SAndroid Build Coastguard Worker 			* interfaceIndex:  If non-zero, specifies the interface on which to register the service
815*48a54d36SAndroid Build Coastguard Worker 			*                  (the index for a given interface is determined via the if_nametoindex()
816*48a54d36SAndroid Build Coastguard Worker 			*                  family of calls.)  Most applications will pass 0 to register on all
817*48a54d36SAndroid Build Coastguard Worker 			*                  available interfaces.  Pass -1 to register a service only on the local
818*48a54d36SAndroid Build Coastguard Worker 			*                  machine (service will not be visible to remote hosts.)
819*48a54d36SAndroid Build Coastguard Worker 			*
820*48a54d36SAndroid Build Coastguard Worker 			* name:            If non-NULL, specifies the service name to be registered.
821*48a54d36SAndroid Build Coastguard Worker 			*                  Most applications will not specify a name, in which case the
822*48a54d36SAndroid Build Coastguard Worker 			*                  computer name is used (this name is communicated to the client via
823*48a54d36SAndroid Build Coastguard Worker 			*                  the callback).
824*48a54d36SAndroid Build Coastguard Worker 			*
825*48a54d36SAndroid Build Coastguard Worker 			* regtype:         The service type followed by the protocol, separated by a dot
826*48a54d36SAndroid Build Coastguard Worker 			*                  (e.g. "_ftp._tcp").  The transport protocol must be "_tcp" or "_udp".
827*48a54d36SAndroid Build Coastguard Worker 			*                  New service types should be registered at htp://www.dns-sd.org/ServiceTypes.html.
828*48a54d36SAndroid Build Coastguard Worker 			*
829*48a54d36SAndroid Build Coastguard Worker 			* domain:          If non-NULL, specifies the domain on which to advertise the service.
830*48a54d36SAndroid Build Coastguard Worker 			*                  Most applications will not specify a domain, instead automatically
831*48a54d36SAndroid Build Coastguard Worker 			*                  registering in the default domain(s).
832*48a54d36SAndroid Build Coastguard Worker 			*
833*48a54d36SAndroid Build Coastguard Worker 			* host:            If non-NULL, specifies the SRV target host name.  Most applications
834*48a54d36SAndroid Build Coastguard Worker 			*                  will not specify a host, instead automatically using the machine's
835*48a54d36SAndroid Build Coastguard Worker 			*                  default host name(s).  Note that specifying a non-NULL host does NOT
836*48a54d36SAndroid Build Coastguard Worker 			*                  create an address record for that host - the application is responsible
837*48a54d36SAndroid Build Coastguard Worker 			*                  for ensuring that the appropriate address record exists, or creating it
838*48a54d36SAndroid Build Coastguard Worker 			*                  via DNSServiceRegisterRecord().
839*48a54d36SAndroid Build Coastguard Worker 			*
840*48a54d36SAndroid Build Coastguard Worker 			* port:            The port, in host byte order, on which the service accepts connections.
841*48a54d36SAndroid Build Coastguard Worker 			*                  Pass 0 for a "placeholder" service (i.e. a service that will not be discovered
842*48a54d36SAndroid Build Coastguard Worker 			*                  by browsing, but will cause a name conflict if another client tries to
843*48a54d36SAndroid Build Coastguard Worker 			*                  register that same name).  Most clients will not use placeholder services.
844*48a54d36SAndroid Build Coastguard Worker 			*
845*48a54d36SAndroid Build Coastguard Worker 			* txtRecord:       The txt record rdata.  May be NULL.  Note that a non-NULL txtRecord
846*48a54d36SAndroid Build Coastguard Worker 			*                  MUST be a properly formatted DNS TXT record, i.e. <length byte> <data>
847*48a54d36SAndroid Build Coastguard Worker 			*                  <length byte> <data> ...
848*48a54d36SAndroid Build Coastguard Worker 			*
849*48a54d36SAndroid Build Coastguard Worker 			* callback:        The delegate to be called when the registration completes or asynchronously
850*48a54d36SAndroid Build Coastguard Worker 			*                  fails.  The client MAY pass NULL for the callback -  The client will NOT be notified
851*48a54d36SAndroid Build Coastguard Worker 			*                  of the default values picked on its behalf, and the client will NOT be notified of any
852*48a54d36SAndroid Build Coastguard Worker 			*                  asynchronous errors (e.g. out of memory errors, etc.) that may prevent the registration
853*48a54d36SAndroid Build Coastguard Worker 			*                  of the service.  The client may NOT pass the NoAutoRename flag if the callback is NULL.
854*48a54d36SAndroid Build Coastguard Worker 			*                  The client may still deregister the service at any time via DNSServiceRefDeallocate().
855*48a54d36SAndroid Build Coastguard Worker 			*
856*48a54d36SAndroid Build Coastguard Worker 			* return value:    Returns initialize ServiceRef (any subsequent, asynchronous
857*48a54d36SAndroid Build Coastguard Worker 			*                  errors are delivered to the callback), otherwise throws an exception indicating
858*48a54d36SAndroid Build Coastguard Worker 			*                  the error that occurred (the callback is never invoked and the DNSServiceRef
859*48a54d36SAndroid Build Coastguard Worker 			*                  is not initialized.)
860*48a54d36SAndroid Build Coastguard Worker 			*
861*48a54d36SAndroid Build Coastguard Worker 			*/
862*48a54d36SAndroid Build Coastguard Worker 			static public ServiceRef*
863*48a54d36SAndroid Build Coastguard Worker 			Register
864*48a54d36SAndroid Build Coastguard Worker 				(
865*48a54d36SAndroid Build Coastguard Worker 				int					flags,
866*48a54d36SAndroid Build Coastguard Worker 				int					interfaceIndex,
867*48a54d36SAndroid Build Coastguard Worker 				String			*	name,
868*48a54d36SAndroid Build Coastguard Worker 				String			*	regtype,
869*48a54d36SAndroid Build Coastguard Worker 				String			*	domain,
870*48a54d36SAndroid Build Coastguard Worker 				String			*	host,
871*48a54d36SAndroid Build Coastguard Worker 				int					port,
872*48a54d36SAndroid Build Coastguard Worker 				Byte				txtRecord[],
873*48a54d36SAndroid Build Coastguard Worker 				RegisterReply	*	callback
874*48a54d36SAndroid Build Coastguard Worker 				);
875*48a54d36SAndroid Build Coastguard Worker 
876*48a54d36SAndroid Build Coastguard Worker 			/* AddRecord()
877*48a54d36SAndroid Build Coastguard Worker 			*
878*48a54d36SAndroid Build Coastguard Worker 			* Add a record to a registered service.  The name of the record will be the same as the
879*48a54d36SAndroid Build Coastguard Worker 			* registered service's name.
880*48a54d36SAndroid Build Coastguard Worker 			* The record can later be updated or deregistered by passing the RecordRef initialized
881*48a54d36SAndroid Build Coastguard Worker 			* by this function to UpdateRecord() or RemoveRecord().
882*48a54d36SAndroid Build Coastguard Worker 			*
883*48a54d36SAndroid Build Coastguard Worker 			*
884*48a54d36SAndroid Build Coastguard Worker 			* Parameters;
885*48a54d36SAndroid Build Coastguard Worker 			*
886*48a54d36SAndroid Build Coastguard Worker 			* sdRef:           A ServiceRef initialized by Register().
887*48a54d36SAndroid Build Coastguard Worker 			*
888*48a54d36SAndroid Build Coastguard Worker 			* RecordRef:       A pointer to an uninitialized RecordRef.  Upon succesfull completion of this
889*48a54d36SAndroid Build Coastguard Worker 			*                  call, this ref may be passed to UpdateRecord() or RemoveRecord().
890*48a54d36SAndroid Build Coastguard Worker 			*                  If the above ServiceRef is disposed, RecordRef is also
891*48a54d36SAndroid Build Coastguard Worker 			*                  invalidated and may not be used further.
892*48a54d36SAndroid Build Coastguard Worker 			*
893*48a54d36SAndroid Build Coastguard Worker 			* flags:           Currently ignored, reserved for future use.
894*48a54d36SAndroid Build Coastguard Worker 			*
895*48a54d36SAndroid Build Coastguard Worker 			* rrtype:          The type of the record (e.g. TXT, SRV, etc), as defined in nameser.h.
896*48a54d36SAndroid Build Coastguard Worker 			*
897*48a54d36SAndroid Build Coastguard Worker 			* rdata:           The raw rdata to be contained in the added resource record.
898*48a54d36SAndroid Build Coastguard Worker 			*
899*48a54d36SAndroid Build Coastguard Worker 			* ttl:             The time to live of the resource record, in seconds.
900*48a54d36SAndroid Build Coastguard Worker 			*
901*48a54d36SAndroid Build Coastguard Worker 			* return value:    Returns initialized RecordRef, otherwise throws
902*48a54d36SAndroid Build Coastguard Worker 			*                  an exception indicating the error that occurred (the RecordRef is not initialized).
903*48a54d36SAndroid Build Coastguard Worker 			*/
904*48a54d36SAndroid Build Coastguard Worker 
905*48a54d36SAndroid Build Coastguard Worker 			static public RecordRef*
906*48a54d36SAndroid Build Coastguard Worker 			AddRecord
907*48a54d36SAndroid Build Coastguard Worker 				(
908*48a54d36SAndroid Build Coastguard Worker 				ServiceRef	*	sref,
909*48a54d36SAndroid Build Coastguard Worker 				int				flags,
910*48a54d36SAndroid Build Coastguard Worker 				int				rrtype,
911*48a54d36SAndroid Build Coastguard Worker 				Byte			rdata[],
912*48a54d36SAndroid Build Coastguard Worker 				int				ttl
913*48a54d36SAndroid Build Coastguard Worker 				);
914*48a54d36SAndroid Build Coastguard Worker 
915*48a54d36SAndroid Build Coastguard Worker 			/* UpdateRecord
916*48a54d36SAndroid Build Coastguard Worker 			*
917*48a54d36SAndroid Build Coastguard Worker 			* Update a registered resource record.  The record must either be:
918*48a54d36SAndroid Build Coastguard Worker 			*   - The primary txt record of a service registered via Register()
919*48a54d36SAndroid Build Coastguard Worker 			*   - A record added to a registered service via AddRecord()
920*48a54d36SAndroid Build Coastguard Worker 			*   - An individual record registered by RegisterRecord()
921*48a54d36SAndroid Build Coastguard Worker 			*
922*48a54d36SAndroid Build Coastguard Worker 			*
923*48a54d36SAndroid Build Coastguard Worker 			* Parameters:
924*48a54d36SAndroid Build Coastguard Worker 			*
925*48a54d36SAndroid Build Coastguard Worker 			* sdRef:           A ServiceRef that was initialized by Register()
926*48a54d36SAndroid Build Coastguard Worker 			*                  or CreateConnection().
927*48a54d36SAndroid Build Coastguard Worker 			*
928*48a54d36SAndroid Build Coastguard Worker 			* RecordRef:       A RecordRef initialized by AddRecord, or NULL to update the
929*48a54d36SAndroid Build Coastguard Worker 			*                  service's primary txt record.
930*48a54d36SAndroid Build Coastguard Worker 			*
931*48a54d36SAndroid Build Coastguard Worker 			* flags:           Currently ignored, reserved for future use.
932*48a54d36SAndroid Build Coastguard Worker 			*
933*48a54d36SAndroid Build Coastguard Worker 			* rdata:           The new rdata to be contained in the updated resource record.
934*48a54d36SAndroid Build Coastguard Worker 			*
935*48a54d36SAndroid Build Coastguard Worker 			* ttl:             The time to live of the updated resource record, in seconds.
936*48a54d36SAndroid Build Coastguard Worker 			*
937*48a54d36SAndroid Build Coastguard Worker 			* return value:    No return value on success, otherwise throws an exception
938*48a54d36SAndroid Build Coastguard Worker 			*                  indicating the error that occurred.
939*48a54d36SAndroid Build Coastguard Worker 			*/
940*48a54d36SAndroid Build Coastguard Worker 			static public void
941*48a54d36SAndroid Build Coastguard Worker 			UpdateRecord
942*48a54d36SAndroid Build Coastguard Worker 				(
943*48a54d36SAndroid Build Coastguard Worker 				ServiceRef	*	sref,
944*48a54d36SAndroid Build Coastguard Worker 				RecordRef	*	record,
945*48a54d36SAndroid Build Coastguard Worker 				int				flags,
946*48a54d36SAndroid Build Coastguard Worker 				Byte			rdata[],
947*48a54d36SAndroid Build Coastguard Worker 				int				ttl
948*48a54d36SAndroid Build Coastguard Worker 				);
949*48a54d36SAndroid Build Coastguard Worker 
950*48a54d36SAndroid Build Coastguard Worker 			/* RemoveRecord
951*48a54d36SAndroid Build Coastguard Worker 			*
952*48a54d36SAndroid Build Coastguard Worker 			* Remove a record previously added to a service record set via AddRecord(), or deregister
953*48a54d36SAndroid Build Coastguard Worker 			* an record registered individually via RegisterRecord().
954*48a54d36SAndroid Build Coastguard Worker 			*
955*48a54d36SAndroid Build Coastguard Worker 			* Parameters:
956*48a54d36SAndroid Build Coastguard Worker 			*
957*48a54d36SAndroid Build Coastguard Worker 			* sdRef:           A ServiceRef initialized by Register() (if the
958*48a54d36SAndroid Build Coastguard Worker 			*                  record being removed was registered via AddRecord()) or by
959*48a54d36SAndroid Build Coastguard Worker 			*                  CreateConnection() (if the record being removed was registered via
960*48a54d36SAndroid Build Coastguard Worker 			*                  RegisterRecord()).
961*48a54d36SAndroid Build Coastguard Worker 			*
962*48a54d36SAndroid Build Coastguard Worker 			* recordRef:       A RecordRef initialized by a successful call to AddRecord()
963*48a54d36SAndroid Build Coastguard Worker 			*                  or RegisterRecord().
964*48a54d36SAndroid Build Coastguard Worker 			*
965*48a54d36SAndroid Build Coastguard Worker 			* flags:           Currently ignored, reserved for future use.
966*48a54d36SAndroid Build Coastguard Worker 			*
967*48a54d36SAndroid Build Coastguard Worker 			* return value:    Nothing on success, otherwise throws an
968*48a54d36SAndroid Build Coastguard Worker 			*                  exception indicating the error that occurred.
969*48a54d36SAndroid Build Coastguard Worker 			*/
970*48a54d36SAndroid Build Coastguard Worker 
971*48a54d36SAndroid Build Coastguard Worker 			static public void
972*48a54d36SAndroid Build Coastguard Worker 			RemoveRecord
973*48a54d36SAndroid Build Coastguard Worker 							(
974*48a54d36SAndroid Build Coastguard Worker 							ServiceRef	*	sref,
975*48a54d36SAndroid Build Coastguard Worker 							RecordRef	*	record,
976*48a54d36SAndroid Build Coastguard Worker 							int				flags
977*48a54d36SAndroid Build Coastguard Worker 							);
978*48a54d36SAndroid Build Coastguard Worker 
979*48a54d36SAndroid Build Coastguard Worker 			/*********************************************************************************************
980*48a54d36SAndroid Build Coastguard Worker 			*
981*48a54d36SAndroid Build Coastguard Worker 			*  Service Discovery
982*48a54d36SAndroid Build Coastguard Worker 			*
983*48a54d36SAndroid Build Coastguard Worker 			*********************************************************************************************/
984*48a54d36SAndroid Build Coastguard Worker 
985*48a54d36SAndroid Build Coastguard Worker 			/* Browse for instances of a service.
986*48a54d36SAndroid Build Coastguard Worker 			*
987*48a54d36SAndroid Build Coastguard Worker 			*
988*48a54d36SAndroid Build Coastguard Worker 			* BrowseReply() Parameters:
989*48a54d36SAndroid Build Coastguard Worker 			*
990*48a54d36SAndroid Build Coastguard Worker 			* sdRef:           The DNSServiceRef initialized by Browse().
991*48a54d36SAndroid Build Coastguard Worker 			*
992*48a54d36SAndroid Build Coastguard Worker 			* flags:           Possible values are MoreComing and Add.
993*48a54d36SAndroid Build Coastguard Worker 			*                  See flag definitions for details.
994*48a54d36SAndroid Build Coastguard Worker 			*
995*48a54d36SAndroid Build Coastguard Worker 			* interfaceIndex:  The interface on which the service is advertised.  This index should
996*48a54d36SAndroid Build Coastguard Worker 			*                  be passed to Resolve() when resolving the service.
997*48a54d36SAndroid Build Coastguard Worker 			*
998*48a54d36SAndroid Build Coastguard Worker 			* errorCode:       Will be NoError (0) on success, otherwise will
999*48a54d36SAndroid Build Coastguard Worker 			*                  indicate the failure that occurred.  Other parameters are undefined if
1000*48a54d36SAndroid Build Coastguard Worker 			*                  the errorCode is nonzero.
1001*48a54d36SAndroid Build Coastguard Worker 			*
1002*48a54d36SAndroid Build Coastguard Worker 			* serviceName:     The service name discovered.
1003*48a54d36SAndroid Build Coastguard Worker 			*
1004*48a54d36SAndroid Build Coastguard Worker 			* regtype:         The service type, as passed in to Browse().
1005*48a54d36SAndroid Build Coastguard Worker 			*
1006*48a54d36SAndroid Build Coastguard Worker 			* domain:          The domain on which the service was discovered (if the application did not
1007*48a54d36SAndroid Build Coastguard Worker 			*                  specify a domain in Browse(), this indicates the domain on which the
1008*48a54d36SAndroid Build Coastguard Worker 			*                  service was discovered.)
1009*48a54d36SAndroid Build Coastguard Worker 			*
1010*48a54d36SAndroid Build Coastguard Worker 			*/
1011*48a54d36SAndroid Build Coastguard Worker 
1012*48a54d36SAndroid Build Coastguard Worker 			__delegate void
1013*48a54d36SAndroid Build Coastguard Worker 			BrowseReply
1014*48a54d36SAndroid Build Coastguard Worker 				(
1015*48a54d36SAndroid Build Coastguard Worker 				ServiceRef	*	sdRef,
1016*48a54d36SAndroid Build Coastguard Worker 				ServiceFlags	flags,
1017*48a54d36SAndroid Build Coastguard Worker 				int				interfaceIndex,
1018*48a54d36SAndroid Build Coastguard Worker 				ErrorCode		errorCode,
1019*48a54d36SAndroid Build Coastguard Worker 				String		*	name,
1020*48a54d36SAndroid Build Coastguard Worker 				String		*	type,
1021*48a54d36SAndroid Build Coastguard Worker 				String		*	domain
1022*48a54d36SAndroid Build Coastguard Worker 				);
1023*48a54d36SAndroid Build Coastguard Worker 
1024*48a54d36SAndroid Build Coastguard Worker 			/* DNSServiceBrowse() Parameters:
1025*48a54d36SAndroid Build Coastguard Worker 			*
1026*48a54d36SAndroid Build Coastguard Worker 			* sdRef:           A pointer to an uninitialized ServiceRef.  Call ServiceRef.Dispose()
1027*48a54d36SAndroid Build Coastguard Worker 			*                  to terminate the browse.
1028*48a54d36SAndroid Build Coastguard Worker 			*
1029*48a54d36SAndroid Build Coastguard Worker 			* flags:           Currently ignored, reserved for future use.
1030*48a54d36SAndroid Build Coastguard Worker 			*
1031*48a54d36SAndroid Build Coastguard Worker 			* interfaceIndex:  If non-zero, specifies the interface on which to browse for services
1032*48a54d36SAndroid Build Coastguard Worker 			*                  (the index for a given interface is determined via the if_nametoindex()
1033*48a54d36SAndroid Build Coastguard Worker 			*                  family of calls.)  Most applications will pass 0 to browse on all available
1034*48a54d36SAndroid Build Coastguard Worker 			*                  interfaces.  Pass -1 to only browse for services provided on the local host.
1035*48a54d36SAndroid Build Coastguard Worker 			*
1036*48a54d36SAndroid Build Coastguard Worker 			* regtype:         The service type being browsed for followed by the protocol, separated by a
1037*48a54d36SAndroid Build Coastguard Worker 			*                  dot (e.g. "_ftp._tcp").  The transport protocol must be "_tcp" or "_udp".
1038*48a54d36SAndroid Build Coastguard Worker 			*
1039*48a54d36SAndroid Build Coastguard Worker 			* domain:          If non-NULL, specifies the domain on which to browse for services.
1040*48a54d36SAndroid Build Coastguard Worker 			*                  Most applications will not specify a domain, instead browsing on the
1041*48a54d36SAndroid Build Coastguard Worker 			*                  default domain(s).
1042*48a54d36SAndroid Build Coastguard Worker 			*
1043*48a54d36SAndroid Build Coastguard Worker 			* callback:        The delegate to be called when an instance of the service being browsed for
1044*48a54d36SAndroid Build Coastguard Worker 			*                  is found, or if the call asynchronously fails.
1045*48a54d36SAndroid Build Coastguard Worker 			*
1046*48a54d36SAndroid Build Coastguard Worker 			* return value:    Returns initialized ServiceRef on succeses (any subsequent, asynchronous
1047*48a54d36SAndroid Build Coastguard Worker 			*                  errors are delivered to the callback), otherwise throws an exception indicating
1048*48a54d36SAndroid Build Coastguard Worker 			*                  the error that occurred (the callback is not invoked and the ServiceRef
1049*48a54d36SAndroid Build Coastguard Worker 			*                  is not initialized.)
1050*48a54d36SAndroid Build Coastguard Worker 			*/
1051*48a54d36SAndroid Build Coastguard Worker 
1052*48a54d36SAndroid Build Coastguard Worker 			static public ServiceRef*
1053*48a54d36SAndroid Build Coastguard Worker 			Browse
1054*48a54d36SAndroid Build Coastguard Worker 				(
1055*48a54d36SAndroid Build Coastguard Worker 				int				flags,
1056*48a54d36SAndroid Build Coastguard Worker 				int				interfaceIndex,
1057*48a54d36SAndroid Build Coastguard Worker 				String		*	regtype,
1058*48a54d36SAndroid Build Coastguard Worker 				String		*	domain,
1059*48a54d36SAndroid Build Coastguard Worker 				BrowseReply	*	callback
1060*48a54d36SAndroid Build Coastguard Worker 				);
1061*48a54d36SAndroid Build Coastguard Worker 
1062*48a54d36SAndroid Build Coastguard Worker 			/* ResolveReply() Parameters:
1063*48a54d36SAndroid Build Coastguard Worker 			*
1064*48a54d36SAndroid Build Coastguard Worker 			* Resolve a service name discovered via Browse() to a target host name, port number, and
1065*48a54d36SAndroid Build Coastguard Worker 			* txt record.
1066*48a54d36SAndroid Build Coastguard Worker 			*
1067*48a54d36SAndroid Build Coastguard Worker 			* Note: Applications should NOT use Resolve() solely for txt record monitoring - use
1068*48a54d36SAndroid Build Coastguard Worker 			* QueryRecord() instead, as it is more efficient for this task.
1069*48a54d36SAndroid Build Coastguard Worker 			*
1070*48a54d36SAndroid Build Coastguard Worker 			* Note: When the desired results have been returned, the client MUST terminate the resolve by calling
1071*48a54d36SAndroid Build Coastguard Worker 			* ServiceRef.Dispose().
1072*48a54d36SAndroid Build Coastguard Worker 			*
1073*48a54d36SAndroid Build Coastguard Worker 			* Note: Resolve() behaves correctly for typical services that have a single SRV record and
1074*48a54d36SAndroid Build Coastguard Worker 			* a single TXT record (the TXT record may be empty.)  To resolve non-standard services with multiple
1075*48a54d36SAndroid Build Coastguard Worker 			* SRV or TXT records, QueryRecord() should be used.
1076*48a54d36SAndroid Build Coastguard Worker 			*
1077*48a54d36SAndroid Build Coastguard Worker 			* ResolveReply Callback Parameters:
1078*48a54d36SAndroid Build Coastguard Worker 			*
1079*48a54d36SAndroid Build Coastguard Worker 			* sdRef:           The DNSServiceRef initialized by Resolve().
1080*48a54d36SAndroid Build Coastguard Worker 			*
1081*48a54d36SAndroid Build Coastguard Worker 			* flags:           Currently unused, reserved for future use.
1082*48a54d36SAndroid Build Coastguard Worker 			*
1083*48a54d36SAndroid Build Coastguard Worker 			* interfaceIndex:  The interface on which the service was resolved.
1084*48a54d36SAndroid Build Coastguard Worker 			*
1085*48a54d36SAndroid Build Coastguard Worker 			* errorCode:       Will be NoError (0) on success, otherwise will
1086*48a54d36SAndroid Build Coastguard Worker 			*                  indicate the failure that occurred.  Other parameters are undefined if
1087*48a54d36SAndroid Build Coastguard Worker 			*                  the errorCode is nonzero.
1088*48a54d36SAndroid Build Coastguard Worker 			*
1089*48a54d36SAndroid Build Coastguard Worker 			* fullname:        The full service domain name, in the form <servicename>.<protocol>.<domain>.
1090*48a54d36SAndroid Build Coastguard Worker 			*                  (Any literal dots (".") are escaped with a backslash ("\."), and literal
1091*48a54d36SAndroid Build Coastguard Worker 			*                  backslashes are escaped with a second backslash ("\\"), e.g. a web server
1092*48a54d36SAndroid Build Coastguard Worker 			*                  named "Dr. Pepper" would have the fullname  "Dr\.\032Pepper._http._tcp.local.").
1093*48a54d36SAndroid Build Coastguard Worker 			*                  This is the appropriate format to pass to standard system DNS APIs such as
1094*48a54d36SAndroid Build Coastguard Worker 			*                  res_query(), or to the special-purpose functions included in this API that
1095*48a54d36SAndroid Build Coastguard Worker 			*                  take fullname parameters.
1096*48a54d36SAndroid Build Coastguard Worker 			*
1097*48a54d36SAndroid Build Coastguard Worker 			* hosttarget:      The target hostname of the machine providing the service.  This name can
1098*48a54d36SAndroid Build Coastguard Worker 			*                  be passed to functions like gethostbyname() to identify the host's IP address.
1099*48a54d36SAndroid Build Coastguard Worker 			*
1100*48a54d36SAndroid Build Coastguard Worker 			* port:            The port, in host byte order, on which connections are accepted for this service.
1101*48a54d36SAndroid Build Coastguard Worker 			*
1102*48a54d36SAndroid Build Coastguard Worker 			* txtRecord:       The service's primary txt record, in standard txt record format.
1103*48a54d36SAndroid Build Coastguard Worker 			*
1104*48a54d36SAndroid Build Coastguard Worker 			*/
1105*48a54d36SAndroid Build Coastguard Worker 
1106*48a54d36SAndroid Build Coastguard Worker 			__delegate void
1107*48a54d36SAndroid Build Coastguard Worker 			ResolveReply
1108*48a54d36SAndroid Build Coastguard Worker 				(
1109*48a54d36SAndroid Build Coastguard Worker 				ServiceRef	*	sdRef,
1110*48a54d36SAndroid Build Coastguard Worker 				ServiceFlags	flags,
1111*48a54d36SAndroid Build Coastguard Worker 				int				interfaceIndex,
1112*48a54d36SAndroid Build Coastguard Worker 				ErrorCode		errorCode,
1113*48a54d36SAndroid Build Coastguard Worker 				String		*	fullName,
1114*48a54d36SAndroid Build Coastguard Worker 				String		*	hostName,
1115*48a54d36SAndroid Build Coastguard Worker 				int				port,
1116*48a54d36SAndroid Build Coastguard Worker 				Byte			txtRecord[]
1117*48a54d36SAndroid Build Coastguard Worker 				);
1118*48a54d36SAndroid Build Coastguard Worker 
1119*48a54d36SAndroid Build Coastguard Worker 			/* Resolve() Parameters
1120*48a54d36SAndroid Build Coastguard Worker 			*
1121*48a54d36SAndroid Build Coastguard Worker 			* flags:           Currently ignored, reserved for future use.
1122*48a54d36SAndroid Build Coastguard Worker 			*
1123*48a54d36SAndroid Build Coastguard Worker 			* interfaceIndex:  The interface on which to resolve the service.  The client should
1124*48a54d36SAndroid Build Coastguard Worker 			*                  pass the interface on which the servicename was discovered, i.e.
1125*48a54d36SAndroid Build Coastguard Worker 			*                  the interfaceIndex passed to the DNSServiceBrowseReply callback,
1126*48a54d36SAndroid Build Coastguard Worker 			*                  or 0 to resolve the named service on all available interfaces.
1127*48a54d36SAndroid Build Coastguard Worker 			*
1128*48a54d36SAndroid Build Coastguard Worker 			* name:            The servicename to be resolved.
1129*48a54d36SAndroid Build Coastguard Worker 			*
1130*48a54d36SAndroid Build Coastguard Worker 			* regtype:         The service type being resolved followed by the protocol, separated by a
1131*48a54d36SAndroid Build Coastguard Worker 			*                  dot (e.g. "_ftp._tcp").  The transport protocol must be "_tcp" or "_udp".
1132*48a54d36SAndroid Build Coastguard Worker 			*
1133*48a54d36SAndroid Build Coastguard Worker 			* domain:          The domain on which the service is registered, i.e. the domain passed
1134*48a54d36SAndroid Build Coastguard Worker 			*                  to the DNSServiceBrowseReply callback.
1135*48a54d36SAndroid Build Coastguard Worker 			*
1136*48a54d36SAndroid Build Coastguard Worker 			* callback:        The delegate to be called when a result is found, or if the call
1137*48a54d36SAndroid Build Coastguard Worker 			*                  asynchronously fails.
1138*48a54d36SAndroid Build Coastguard Worker 			*
1139*48a54d36SAndroid Build Coastguard Worker 			*
1140*48a54d36SAndroid Build Coastguard Worker 			* return value:    Returns initialized ServiceRef on succeses (any subsequent, asynchronous
1141*48a54d36SAndroid Build Coastguard Worker 			*                  errors are delivered to the callback), otherwise throws an exception indicating
1142*48a54d36SAndroid Build Coastguard Worker 			*                  the error that occurred (the callback is never invoked and the DNSServiceRef
1143*48a54d36SAndroid Build Coastguard Worker 			*                  is not initialized.)
1144*48a54d36SAndroid Build Coastguard Worker 			*/
1145*48a54d36SAndroid Build Coastguard Worker 
1146*48a54d36SAndroid Build Coastguard Worker 			static public ServiceRef*
1147*48a54d36SAndroid Build Coastguard Worker 			Resolve
1148*48a54d36SAndroid Build Coastguard Worker 				(
1149*48a54d36SAndroid Build Coastguard Worker 				int					flags,
1150*48a54d36SAndroid Build Coastguard Worker 				int					interfaceIndex,
1151*48a54d36SAndroid Build Coastguard Worker 				String			*	name,
1152*48a54d36SAndroid Build Coastguard Worker 				String			*	regtype,
1153*48a54d36SAndroid Build Coastguard Worker 				String			*	domain,
1154*48a54d36SAndroid Build Coastguard Worker 				ResolveReply	*	callback
1155*48a54d36SAndroid Build Coastguard Worker 				);
1156*48a54d36SAndroid Build Coastguard Worker 
1157*48a54d36SAndroid Build Coastguard Worker 			/*********************************************************************************************
1158*48a54d36SAndroid Build Coastguard Worker 			*
1159*48a54d36SAndroid Build Coastguard Worker 			*  Special Purpose Calls (most applications will not use these)
1160*48a54d36SAndroid Build Coastguard Worker 			*
1161*48a54d36SAndroid Build Coastguard Worker 			*********************************************************************************************/
1162*48a54d36SAndroid Build Coastguard Worker 
1163*48a54d36SAndroid Build Coastguard Worker 			/* CreateConnection/RegisterRecord
1164*48a54d36SAndroid Build Coastguard Worker 			*
1165*48a54d36SAndroid Build Coastguard Worker 			* Register an individual resource record on a connected ServiceRef.
1166*48a54d36SAndroid Build Coastguard Worker 			*
1167*48a54d36SAndroid Build Coastguard Worker 			* Note that name conflicts occurring for records registered via this call must be handled
1168*48a54d36SAndroid Build Coastguard Worker 			* by the client in the callback.
1169*48a54d36SAndroid Build Coastguard Worker 			*
1170*48a54d36SAndroid Build Coastguard Worker 			*
1171*48a54d36SAndroid Build Coastguard Worker 			* RecordReply() parameters:
1172*48a54d36SAndroid Build Coastguard Worker 			*
1173*48a54d36SAndroid Build Coastguard Worker 			* sdRef:           The connected ServiceRef initialized by
1174*48a54d36SAndroid Build Coastguard Worker 			*                  CreateConnection().
1175*48a54d36SAndroid Build Coastguard Worker 			*
1176*48a54d36SAndroid Build Coastguard Worker 			* RecordRef:       The RecordRef initialized by RegisterRecord().  If the above
1177*48a54d36SAndroid Build Coastguard Worker 			*                  ServiceRef.Dispose is called, this RecordRef is
1178*48a54d36SAndroid Build Coastguard Worker 			*                  invalidated, and may not be used further.
1179*48a54d36SAndroid Build Coastguard Worker 			*
1180*48a54d36SAndroid Build Coastguard Worker 			* flags:           Currently unused, reserved for future use.
1181*48a54d36SAndroid Build Coastguard Worker 			*
1182*48a54d36SAndroid Build Coastguard Worker 			* errorCode:       Will be NoError on success, otherwise will
1183*48a54d36SAndroid Build Coastguard Worker 			*                  indicate the failure that occurred (including name conflicts.)
1184*48a54d36SAndroid Build Coastguard Worker 			*                  Other parameters are undefined if errorCode is nonzero.
1185*48a54d36SAndroid Build Coastguard Worker 			*
1186*48a54d36SAndroid Build Coastguard Worker 			*/
1187*48a54d36SAndroid Build Coastguard Worker 
1188*48a54d36SAndroid Build Coastguard Worker 			__delegate void
1189*48a54d36SAndroid Build Coastguard Worker 			RegisterRecordReply
1190*48a54d36SAndroid Build Coastguard Worker 				(
1191*48a54d36SAndroid Build Coastguard Worker 				ServiceRef	*	sdRef,
1192*48a54d36SAndroid Build Coastguard Worker 				ServiceFlags	flags,
1193*48a54d36SAndroid Build Coastguard Worker 				ErrorCode		errorCode,
1194*48a54d36SAndroid Build Coastguard Worker 				RecordRef	*	record
1195*48a54d36SAndroid Build Coastguard Worker 				);
1196*48a54d36SAndroid Build Coastguard Worker 
1197*48a54d36SAndroid Build Coastguard Worker 			/* CreateConnection()
1198*48a54d36SAndroid Build Coastguard Worker 			*
1199*48a54d36SAndroid Build Coastguard Worker 			* Create a connection to the daemon allowing efficient registration of
1200*48a54d36SAndroid Build Coastguard Worker 			* multiple individual records.
1201*48a54d36SAndroid Build Coastguard Worker 			*
1202*48a54d36SAndroid Build Coastguard Worker 			*
1203*48a54d36SAndroid Build Coastguard Worker 			* Parameters:
1204*48a54d36SAndroid Build Coastguard Worker 			*
1205*48a54d36SAndroid Build Coastguard Worker 			* callback:        The delegate to be called when a result is found, or if the call
1206*48a54d36SAndroid Build Coastguard Worker 			*                  asynchronously fails (e.g. because of a name conflict.)
1207*48a54d36SAndroid Build Coastguard Worker 			*
1208*48a54d36SAndroid Build Coastguard Worker 			* return value:    Returns initialize ServiceRef on success, otherwise throws
1209*48a54d36SAndroid Build Coastguard Worker 			*                  an exception indicating the specific failure that occurred (in which
1210*48a54d36SAndroid Build Coastguard Worker 			*                  case the ServiceRef is not initialized).
1211*48a54d36SAndroid Build Coastguard Worker 			*/
1212*48a54d36SAndroid Build Coastguard Worker 
1213*48a54d36SAndroid Build Coastguard Worker 			static public ServiceRef*
1214*48a54d36SAndroid Build Coastguard Worker 			CreateConnection
1215*48a54d36SAndroid Build Coastguard Worker 				(
1216*48a54d36SAndroid Build Coastguard Worker 				RegisterRecordReply * callback
1217*48a54d36SAndroid Build Coastguard Worker 				);
1218*48a54d36SAndroid Build Coastguard Worker 
1219*48a54d36SAndroid Build Coastguard Worker 
1220*48a54d36SAndroid Build Coastguard Worker 			/* RegisterRecord() Parameters:
1221*48a54d36SAndroid Build Coastguard Worker 			*
1222*48a54d36SAndroid Build Coastguard Worker 			* sdRef:           A ServiceRef initialized by CreateConnection().
1223*48a54d36SAndroid Build Coastguard Worker 			*
1224*48a54d36SAndroid Build Coastguard Worker 			* RecordRef:       A pointer to an uninitialized RecordRef.  Upon succesfull completion of this
1225*48a54d36SAndroid Build Coastguard Worker 			*                  call, this ref may be passed to UpdateRecord() or RemoveRecord().
1226*48a54d36SAndroid Build Coastguard Worker 			*                  (To deregister ALL records registered on a single connected ServiceRef
1227*48a54d36SAndroid Build Coastguard Worker 			*                  and deallocate each of their corresponding RecordRefs, call
1228*48a54d36SAndroid Build Coastguard Worker 			*                  ServiceRef.Dispose()).
1229*48a54d36SAndroid Build Coastguard Worker 			*
1230*48a54d36SAndroid Build Coastguard Worker 			* flags:           Possible values are Shared or Unique
1231*48a54d36SAndroid Build Coastguard Worker 			*                  (see flag type definitions for details).
1232*48a54d36SAndroid Build Coastguard Worker 			*
1233*48a54d36SAndroid Build Coastguard Worker 			* interfaceIndex:  If non-zero, specifies the interface on which to register the record
1234*48a54d36SAndroid Build Coastguard Worker 			*                  (the index for a given interface is determined via the if_nametoindex()
1235*48a54d36SAndroid Build Coastguard Worker 			*                  family of calls.)  Passing 0 causes the record to be registered on all interfaces.
1236*48a54d36SAndroid Build Coastguard Worker 			*                  Passing -1 causes the record to only be visible on the local host.
1237*48a54d36SAndroid Build Coastguard Worker 			*
1238*48a54d36SAndroid Build Coastguard Worker 			* fullname:        The full domain name of the resource record.
1239*48a54d36SAndroid Build Coastguard Worker 			*
1240*48a54d36SAndroid Build Coastguard Worker 			* rrtype:          The numerical type of the resource record (e.g. PTR, SRV, etc), as defined
1241*48a54d36SAndroid Build Coastguard Worker 			*                  in nameser.h.
1242*48a54d36SAndroid Build Coastguard Worker 			*
1243*48a54d36SAndroid Build Coastguard Worker 			* rrclass:         The class of the resource record, as defined in nameser.h (usually 1 for the
1244*48a54d36SAndroid Build Coastguard Worker 			*                  Internet class).
1245*48a54d36SAndroid Build Coastguard Worker 			*
1246*48a54d36SAndroid Build Coastguard Worker 			* rdata:           A pointer to the raw rdata, as it is to appear in the DNS record.
1247*48a54d36SAndroid Build Coastguard Worker 			*
1248*48a54d36SAndroid Build Coastguard Worker 			* ttl:             The time to live of the resource record, in seconds.
1249*48a54d36SAndroid Build Coastguard Worker 			*
1250*48a54d36SAndroid Build Coastguard Worker 			*
1251*48a54d36SAndroid Build Coastguard Worker 			* return value:    Returns initialize RecordRef on succeses (any subsequent, asynchronous
1252*48a54d36SAndroid Build Coastguard Worker 			*                  errors are delivered to the callback), otherwise throws an exception indicating
1253*48a54d36SAndroid Build Coastguard Worker 			*                  the error that occurred (the callback is never invoked and the RecordRef is
1254*48a54d36SAndroid Build Coastguard Worker 			*                  not initialized.)
1255*48a54d36SAndroid Build Coastguard Worker 			*/
1256*48a54d36SAndroid Build Coastguard Worker 			static public RecordRef*
1257*48a54d36SAndroid Build Coastguard Worker 			RegisterRecord
1258*48a54d36SAndroid Build Coastguard Worker 				(
1259*48a54d36SAndroid Build Coastguard Worker 				ServiceRef			*	sdRef,
1260*48a54d36SAndroid Build Coastguard Worker 				ServiceFlags			flags,
1261*48a54d36SAndroid Build Coastguard Worker 				int						interfaceIndex,
1262*48a54d36SAndroid Build Coastguard Worker 				String				*	fullname,
1263*48a54d36SAndroid Build Coastguard Worker 				int						rrtype,
1264*48a54d36SAndroid Build Coastguard Worker 				int						rrclass,
1265*48a54d36SAndroid Build Coastguard Worker 				Byte					rdata[],
1266*48a54d36SAndroid Build Coastguard Worker 				int						ttl
1267*48a54d36SAndroid Build Coastguard Worker 				);
1268*48a54d36SAndroid Build Coastguard Worker 
1269*48a54d36SAndroid Build Coastguard Worker 
1270*48a54d36SAndroid Build Coastguard Worker 			/* DNSServiceQueryRecord
1271*48a54d36SAndroid Build Coastguard Worker 			*
1272*48a54d36SAndroid Build Coastguard Worker 			* Query for an arbitrary DNS record.
1273*48a54d36SAndroid Build Coastguard Worker 			*
1274*48a54d36SAndroid Build Coastguard Worker 			*
1275*48a54d36SAndroid Build Coastguard Worker 			* QueryRecordReply() Delegate Parameters:
1276*48a54d36SAndroid Build Coastguard Worker 			*
1277*48a54d36SAndroid Build Coastguard Worker 			* sdRef:           The ServiceRef initialized by QueryRecord().
1278*48a54d36SAndroid Build Coastguard Worker 			*
1279*48a54d36SAndroid Build Coastguard Worker 			* flags:           Possible values are MoreComing and
1280*48a54d36SAndroid Build Coastguard Worker 			*                  Add.  The Add flag is NOT set for PTR records
1281*48a54d36SAndroid Build Coastguard Worker 			*                  with a ttl of 0, i.e. "Remove" events.
1282*48a54d36SAndroid Build Coastguard Worker 			*
1283*48a54d36SAndroid Build Coastguard Worker 			* interfaceIndex:  The interface on which the query was resolved (the index for a given
1284*48a54d36SAndroid Build Coastguard Worker 			*                  interface is determined via the if_nametoindex() family of calls).
1285*48a54d36SAndroid Build Coastguard Worker 			*
1286*48a54d36SAndroid Build Coastguard Worker 			* errorCode:       Will be kDNSServiceErr_NoError on success, otherwise will
1287*48a54d36SAndroid Build Coastguard Worker 			*                  indicate the failure that occurred.  Other parameters are undefined if
1288*48a54d36SAndroid Build Coastguard Worker 			*                  errorCode is nonzero.
1289*48a54d36SAndroid Build Coastguard Worker 			*
1290*48a54d36SAndroid Build Coastguard Worker 			* fullname:        The resource record's full domain name.
1291*48a54d36SAndroid Build Coastguard Worker 			*
1292*48a54d36SAndroid Build Coastguard Worker 			* rrtype:          The resource record's type (e.g. PTR, SRV, etc) as defined in nameser.h.
1293*48a54d36SAndroid Build Coastguard Worker 			*
1294*48a54d36SAndroid Build Coastguard Worker 			* rrclass:         The class of the resource record, as defined in nameser.h (usually 1).
1295*48a54d36SAndroid Build Coastguard Worker 			*
1296*48a54d36SAndroid Build Coastguard Worker 			* rdata:           The raw rdata of the resource record.
1297*48a54d36SAndroid Build Coastguard Worker 			*
1298*48a54d36SAndroid Build Coastguard Worker 			* ttl:             The resource record's time to live, in seconds.
1299*48a54d36SAndroid Build Coastguard Worker 			*
1300*48a54d36SAndroid Build Coastguard Worker 			*/
1301*48a54d36SAndroid Build Coastguard Worker 
1302*48a54d36SAndroid Build Coastguard Worker 			__delegate void
1303*48a54d36SAndroid Build Coastguard Worker 			QueryRecordReply
1304*48a54d36SAndroid Build Coastguard Worker 				(
1305*48a54d36SAndroid Build Coastguard Worker 				ServiceRef	*	sdRef,
1306*48a54d36SAndroid Build Coastguard Worker 				ServiceFlags	flags,
1307*48a54d36SAndroid Build Coastguard Worker 				int				interfaceIndex,
1308*48a54d36SAndroid Build Coastguard Worker 				ErrorCode		errorCode,
1309*48a54d36SAndroid Build Coastguard Worker 				String		*	fullName,
1310*48a54d36SAndroid Build Coastguard Worker 				int				rrtype,
1311*48a54d36SAndroid Build Coastguard Worker 				int				rrclass,
1312*48a54d36SAndroid Build Coastguard Worker 				Byte			rdata[],
1313*48a54d36SAndroid Build Coastguard Worker 				int				ttl
1314*48a54d36SAndroid Build Coastguard Worker 				);
1315*48a54d36SAndroid Build Coastguard Worker 
1316*48a54d36SAndroid Build Coastguard Worker 			/* QueryRecord() Parameters:
1317*48a54d36SAndroid Build Coastguard Worker 			*
1318*48a54d36SAndroid Build Coastguard Worker 			* flags:           Pass LongLivedQuery to create a "long-lived" unicast
1319*48a54d36SAndroid Build Coastguard Worker 			*                  query in a non-local domain.  Without setting this flag, unicast queries
1320*48a54d36SAndroid Build Coastguard Worker 			*                  will be one-shot - that is, only answers available at the time of the call
1321*48a54d36SAndroid Build Coastguard Worker 			*                  will be returned.  By setting this flag, answers (including Add and Remove
1322*48a54d36SAndroid Build Coastguard Worker 			*                  events) that become available after the initial call is made will generate
1323*48a54d36SAndroid Build Coastguard Worker 			*                  callbacks.  This flag has no effect on link-local multicast queries.
1324*48a54d36SAndroid Build Coastguard Worker 			*
1325*48a54d36SAndroid Build Coastguard Worker 			* interfaceIndex:  If non-zero, specifies the interface on which to issue the query
1326*48a54d36SAndroid Build Coastguard Worker 			*                  (the index for a given interface is determined via the if_nametoindex()
1327*48a54d36SAndroid Build Coastguard Worker 			*                  family of calls.)  Passing 0 causes the name to be queried for on all
1328*48a54d36SAndroid Build Coastguard Worker 			*                  interfaces.  Passing -1 causes the name to be queried for only on the
1329*48a54d36SAndroid Build Coastguard Worker 			*                  local host.
1330*48a54d36SAndroid Build Coastguard Worker 			*
1331*48a54d36SAndroid Build Coastguard Worker 			* fullname:        The full domain name of the resource record to be queried for.
1332*48a54d36SAndroid Build Coastguard Worker 			*
1333*48a54d36SAndroid Build Coastguard Worker 			* rrtype:          The numerical type of the resource record to be queried for (e.g. PTR, SRV, etc)
1334*48a54d36SAndroid Build Coastguard Worker 			*                  as defined in nameser.h.
1335*48a54d36SAndroid Build Coastguard Worker 			*
1336*48a54d36SAndroid Build Coastguard Worker 			* rrclass:         The class of the resource record, as defined in nameser.h
1337*48a54d36SAndroid Build Coastguard Worker 			*                  (usually 1 for the Internet class).
1338*48a54d36SAndroid Build Coastguard Worker 			*
1339*48a54d36SAndroid Build Coastguard Worker 			* callback:        The delegate to be called when a result is found, or if the call
1340*48a54d36SAndroid Build Coastguard Worker 			*                  asynchronously fails.
1341*48a54d36SAndroid Build Coastguard Worker 			*
1342*48a54d36SAndroid Build Coastguard Worker 			*
1343*48a54d36SAndroid Build Coastguard Worker 			* return value:    Returns initialized ServiceRef on succeses (any subsequent, asynchronous
1344*48a54d36SAndroid Build Coastguard Worker 			*                  errors are delivered to the callback), otherwise throws an exception indicating
1345*48a54d36SAndroid Build Coastguard Worker 			*                  the error that occurred (the callback is never invoked and the ServiceRef
1346*48a54d36SAndroid Build Coastguard Worker 			*                  is not initialized.)
1347*48a54d36SAndroid Build Coastguard Worker 			*/
1348*48a54d36SAndroid Build Coastguard Worker 
1349*48a54d36SAndroid Build Coastguard Worker 			static public ServiceRef*
1350*48a54d36SAndroid Build Coastguard Worker 			QueryRecord
1351*48a54d36SAndroid Build Coastguard Worker 				(
1352*48a54d36SAndroid Build Coastguard Worker 				ServiceFlags			flags,
1353*48a54d36SAndroid Build Coastguard Worker 				int						interfaceIndex,
1354*48a54d36SAndroid Build Coastguard Worker 				String				*	fullname,
1355*48a54d36SAndroid Build Coastguard Worker 				int						rrtype,
1356*48a54d36SAndroid Build Coastguard Worker 				int						rrclass,
1357*48a54d36SAndroid Build Coastguard Worker 				QueryRecordReply	*	callback
1358*48a54d36SAndroid Build Coastguard Worker 				);
1359*48a54d36SAndroid Build Coastguard Worker 
1360*48a54d36SAndroid Build Coastguard Worker 			/* ReconfirmRecord
1361*48a54d36SAndroid Build Coastguard Worker 			*
1362*48a54d36SAndroid Build Coastguard Worker 			* Instruct the daemon to verify the validity of a resource record that appears to
1363*48a54d36SAndroid Build Coastguard Worker 			* be out of date (e.g. because tcp connection to a service's target failed.)
1364*48a54d36SAndroid Build Coastguard Worker 			* Causes the record to be flushed from the daemon's cache (as well as all other
1365*48a54d36SAndroid Build Coastguard Worker 			* daemons' caches on the network) if the record is determined to be invalid.
1366*48a54d36SAndroid Build Coastguard Worker 			*
1367*48a54d36SAndroid Build Coastguard Worker 			* Parameters:
1368*48a54d36SAndroid Build Coastguard Worker 			*
1369*48a54d36SAndroid Build Coastguard Worker 			* flags:           Currently unused, reserved for future use.
1370*48a54d36SAndroid Build Coastguard Worker 			*
1371*48a54d36SAndroid Build Coastguard Worker 			* fullname:        The resource record's full domain name.
1372*48a54d36SAndroid Build Coastguard Worker 			*
1373*48a54d36SAndroid Build Coastguard Worker 			* rrtype:          The resource record's type (e.g. PTR, SRV, etc) as defined in nameser.h.
1374*48a54d36SAndroid Build Coastguard Worker 			*
1375*48a54d36SAndroid Build Coastguard Worker 			* rrclass:         The class of the resource record, as defined in nameser.h (usually 1).
1376*48a54d36SAndroid Build Coastguard Worker 			*
1377*48a54d36SAndroid Build Coastguard Worker 			* rdata:           The raw rdata of the resource record.
1378*48a54d36SAndroid Build Coastguard Worker 			*
1379*48a54d36SAndroid Build Coastguard Worker 			*/
1380*48a54d36SAndroid Build Coastguard Worker 			static public void
1381*48a54d36SAndroid Build Coastguard Worker 			ReconfirmRecord
1382*48a54d36SAndroid Build Coastguard Worker 				(
1383*48a54d36SAndroid Build Coastguard Worker 				ServiceFlags	flags,
1384*48a54d36SAndroid Build Coastguard Worker 				int				interfaceIndex,
1385*48a54d36SAndroid Build Coastguard Worker 				String		*	fullname,
1386*48a54d36SAndroid Build Coastguard Worker 				int				rrtype,
1387*48a54d36SAndroid Build Coastguard Worker 				int				rrclass,
1388*48a54d36SAndroid Build Coastguard Worker 				Byte			rdata[]
1389*48a54d36SAndroid Build Coastguard Worker 				);
1390*48a54d36SAndroid Build Coastguard Worker 		};
1391*48a54d36SAndroid Build Coastguard Worker 	}
1392*48a54d36SAndroid Build Coastguard Worker }
1393