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