1*5e7646d2SAndroid Build Coastguard Worker /*
2*5e7646d2SAndroid Build Coastguard Worker * Dynamic wrapper for Bonjour SDK for Windows.
3*5e7646d2SAndroid Build Coastguard Worker *
4*5e7646d2SAndroid Build Coastguard Worker * Copyright 2018 by Apple Inc.
5*5e7646d2SAndroid Build Coastguard Worker *
6*5e7646d2SAndroid Build Coastguard Worker * Licensed under Apache License v2.0. See the file "LICENSE" for more
7*5e7646d2SAndroid Build Coastguard Worker * information.
8*5e7646d2SAndroid Build Coastguard Worker */
9*5e7646d2SAndroid Build Coastguard Worker
10*5e7646d2SAndroid Build Coastguard Worker //#include <cups/http-private.h>
11*5e7646d2SAndroid Build Coastguard Worker #include <cups/thread-private.h>
12*5e7646d2SAndroid Build Coastguard Worker #include "dns_sd.h"
13*5e7646d2SAndroid Build Coastguard Worker
14*5e7646d2SAndroid Build Coastguard Worker
15*5e7646d2SAndroid Build Coastguard Worker /*
16*5e7646d2SAndroid Build Coastguard Worker * Pointers for functions...
17*5e7646d2SAndroid Build Coastguard Worker */
18*5e7646d2SAndroid Build Coastguard Worker
19*5e7646d2SAndroid Build Coastguard Worker static int dnssd_initialized = 0;
20*5e7646d2SAndroid Build Coastguard Worker static _cups_mutex_t dnssd_mutex = _CUPS_MUTEX_INITIALIZER;
21*5e7646d2SAndroid Build Coastguard Worker static DNSServiceErrorType (*dnssd_add_record)(DNSServiceRef sdRef, DNSRecordRef *RecordRef, DNSServiceFlags flags, uint16_t rrtype, uint16_t rdlen, const void *rdata, uint32_t ttl);
22*5e7646d2SAndroid Build Coastguard Worker static DNSServiceErrorType (*dnssd_browse)(DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, const char *regtype, const char *domain, DNSServiceBrowseReply callBack, void *context);
23*5e7646d2SAndroid Build Coastguard Worker static DNSServiceErrorType (*dnssd_construct_full_name)(char * const fullName, const char * const service, const char * const regtype, const char * const domain);
24*5e7646d2SAndroid Build Coastguard Worker static DNSServiceErrorType (*dnssd_create_connection)(DNSServiceRef *sdRef);
25*5e7646d2SAndroid Build Coastguard Worker static DNSServiceErrorType (*dnssd_process_result)(DNSServiceRef sdRef);
26*5e7646d2SAndroid Build Coastguard Worker static DNSServiceErrorType (*dnssd_query_record)(DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, const char *fullname, uint16_t rrtype, uint16_t rrclass, DNSServiceQueryRecordReply callBack, void *context);
27*5e7646d2SAndroid Build Coastguard Worker static void (*dnssd_deallocate)(DNSServiceRef sdRef);
28*5e7646d2SAndroid Build Coastguard Worker static int (*dnssd_sock_fd)(DNSServiceRef sdRef);
29*5e7646d2SAndroid Build Coastguard Worker static DNSServiceErrorType (*dnssd_register)(DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, const char *name, const char *regtype, const char *domain, const char *host, uint16_t port, uint16_t txtLen, const void *txtRecord, DNSServiceRegisterReply callBack, void *context);
30*5e7646d2SAndroid Build Coastguard Worker static DNSServiceErrorType (*dnssd_remove_record)(DNSServiceRef sdRef, DNSRecordRef RecordRef, DNSServiceFlags flags);
31*5e7646d2SAndroid Build Coastguard Worker static DNSServiceErrorType (*dnssd_resolve)(DNSServiceRef *sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, const char *name, const char *regtype, const char *domain, DNSServiceResolveReply callBack, void *context);
32*5e7646d2SAndroid Build Coastguard Worker static DNSServiceErrorType (*dnssd_update_record)(DNSServiceRef sdRef, DNSRecordRef RecordRef, DNSServiceFlags flags, uint16_t rdlen, const void *rdata, uint32_t ttl);
33*5e7646d2SAndroid Build Coastguard Worker
34*5e7646d2SAndroid Build Coastguard Worker static void (*dnssd_txt_create)(TXTRecordRef *txtRecord, uint16_t bufferLen, void *buffer);
35*5e7646d2SAndroid Build Coastguard Worker static void (*dnssd_txt_deallocate)(TXTRecordRef *txtRecord);
36*5e7646d2SAndroid Build Coastguard Worker static const void *(*dnssd_txt_get_bytes_ptr)(const TXTRecordRef *txtRecord);
37*5e7646d2SAndroid Build Coastguard Worker static uint16_t (*dnssd_txt_get_count)(uint16_t txtLen, const void *txtRecord);
38*5e7646d2SAndroid Build Coastguard Worker static uint16_t (*dnssd_txt_get_length)(const TXTRecordRef *txtRecord);
39*5e7646d2SAndroid Build Coastguard Worker static DNSServiceErrorType (*dnssd_txt_get_item_at_index)(uint16_t txtLen, const void *txtRecord, uint16_t itemIndex, uint16_t keyBufLen, char *key, uint8_t *valueLen, const void **value);
40*5e7646d2SAndroid Build Coastguard Worker static const void *(*dnssd_txt_get_value_ptr)(uint16_t txtLen, const void *txtRecord, const char *key, uint8_t *valueLen);
41*5e7646d2SAndroid Build Coastguard Worker static DNSServiceErrorType (*dnssd_txt_set_value)(TXTRecordRef *txtRecord, const char *key, uint8_t valueSize, const void *value);
42*5e7646d2SAndroid Build Coastguard Worker
43*5e7646d2SAndroid Build Coastguard Worker
44*5e7646d2SAndroid Build Coastguard Worker /*
45*5e7646d2SAndroid Build Coastguard Worker * Function to initialize pointers...
46*5e7646d2SAndroid Build Coastguard Worker */
47*5e7646d2SAndroid Build Coastguard Worker
48*5e7646d2SAndroid Build Coastguard Worker static void
dnssd_init(void)49*5e7646d2SAndroid Build Coastguard Worker dnssd_init(void)
50*5e7646d2SAndroid Build Coastguard Worker {
51*5e7646d2SAndroid Build Coastguard Worker _cupsMutexLock(&dnssd_mutex);
52*5e7646d2SAndroid Build Coastguard Worker if (!dnssd_initialized)
53*5e7646d2SAndroid Build Coastguard Worker {
54*5e7646d2SAndroid Build Coastguard Worker HINSTANCE dll_handle = LoadLibraryA("dnssd.dll");
55*5e7646d2SAndroid Build Coastguard Worker
56*5e7646d2SAndroid Build Coastguard Worker if (dll_handle)
57*5e7646d2SAndroid Build Coastguard Worker {
58*5e7646d2SAndroid Build Coastguard Worker dnssd_add_record = (DNSServiceErrorType (*)(DNSServiceRef, DNSRecordRef *, DNSServiceFlags, uint16_t, uint16_t, const void *, uint32_t))GetProcAddress(dll_handle, "DNSServiceAddRecord");
59*5e7646d2SAndroid Build Coastguard Worker dnssd_browse = (DNSServiceErrorType(*)(DNSServiceRef *, DNSServiceFlags, uint32_t, const char *, const char *, DNSServiceBrowseReply, void *))GetProcAddress(dll_handle, "DNSServiceBrowse");
60*5e7646d2SAndroid Build Coastguard Worker dnssd_construct_full_name = (DNSServiceErrorType(*)(char * const, const char * const, const char * const, const char * const))GetProcAddress(dll_handle, "DNSServiceConstructFullName");
61*5e7646d2SAndroid Build Coastguard Worker dnssd_create_connection = (DNSServiceErrorType(*)(DNSServiceRef *))GetProcAddress(dll_handle, "DNSServiceCreateConnection");
62*5e7646d2SAndroid Build Coastguard Worker dnssd_deallocate = (DNSServiceErrorType(*)(DNSServiceRef))GetProcAddress(dll_handle, "DNSServiceRefDeallocate");
63*5e7646d2SAndroid Build Coastguard Worker dnssd_process_result = (DNSServiceErrorType(*)(DNSServiceRef))GetProcAddress(dll_handle, "DNSServiceProcessResult");
64*5e7646d2SAndroid Build Coastguard Worker dnssd_query_record = (DNSServiceErrorType(*)(DNSServiceRef *, DNSServiceFlags, uint32_t, const char *, uint16_t, uint16_t, DNSServiceQueryRecordReply, void *))GetProcAddress(dll_handle, "DNSServiceQueryRecord");
65*5e7646d2SAndroid Build Coastguard Worker dnssd_register = (DNSServiceErrorType(*)(DNSServiceRef *, DNSServiceFlags, uint32_t, const char *, const char *, const char *, const char *, uint16_t, uint16_t, const void *, DNSServiceRegisterReply, void *))GetProcAddress(dll_handle, "DNSServiceRegister");
66*5e7646d2SAndroid Build Coastguard Worker dnssd_remove_record = (DNSServiceErrorType(*)(DNSServiceRef, DNSRecordRef, DNSServiceFlags))GetProcAddress(dll_handle, "DNSServiceRemoveRecord");
67*5e7646d2SAndroid Build Coastguard Worker dnssd_resolve = (DNSServiceErrorType(*)(DNSServiceRef *, DNSServiceFlags, uint32_t, const char *, const char *, const char *, DNSServiceResolveReply, void *))GetProcAddress(dll_handle, "DNSServiceResolve");
68*5e7646d2SAndroid Build Coastguard Worker dnssd_sock_fd = (int(*)(DNSServiceRef))GetProcAddress(dll_handle, "DNSServiceRefSockFD");
69*5e7646d2SAndroid Build Coastguard Worker dnssd_update_record = (DNSServiceErrorType(*)(DNSServiceRef, DNSRecordRef, DNSServiceFlags, uint16_t, const void *, uint32_t))GetProcAddress(dll_handle, "DNSServiceUpdateRecord");
70*5e7646d2SAndroid Build Coastguard Worker
71*5e7646d2SAndroid Build Coastguard Worker dnssd_txt_create = (void (*)(TXTRecordRef *, uint16_t, void *))GetProcAddress(dll_handle, "TXTRecordCreate");
72*5e7646d2SAndroid Build Coastguard Worker dnssd_txt_deallocate = (void (*)(TXTRecordRef *))GetProcAddress(dll_handle, "TXTRecordDeallocate");
73*5e7646d2SAndroid Build Coastguard Worker dnssd_txt_get_bytes_ptr = (const void *(*)(const TXTRecordRef *))GetProcAddress(dll_handle, "TXTRecordGetBytesPtr");
74*5e7646d2SAndroid Build Coastguard Worker dnssd_txt_get_count = (uint16_t (*)(uint16_t, const void *))GetProcAddress(dll_handle, "TXTRecordGetCount");
75*5e7646d2SAndroid Build Coastguard Worker dnssd_txt_get_item_at_index = (DNSServiceErrorType (*)(uint16_t, const void *, uint16_t, uint16_t, char *, uint8_t *, const void **))GetProcAddress(dll_handle, "TXTRecordGetItemAtIndex");
76*5e7646d2SAndroid Build Coastguard Worker dnssd_txt_get_length = (uint16_t (*)(const TXTRecordRef *))GetProcAddress(dll_handle, "TXTRecordGetLength");
77*5e7646d2SAndroid Build Coastguard Worker dnssd_txt_get_value_ptr = (const void *(*)(uint16_t, const void *, const char *, uint8_t *))GetProcAddress(dll_handle, "TXTRecordGetValuePtr");
78*5e7646d2SAndroid Build Coastguard Worker dnssd_txt_set_value = (DNSServiceErrorType (*)(TXTRecordRef *, const char *, uint8_t, const void *))GetProcAddress(dll_handle, "TXTRecordSetValue");
79*5e7646d2SAndroid Build Coastguard Worker }
80*5e7646d2SAndroid Build Coastguard Worker
81*5e7646d2SAndroid Build Coastguard Worker dnssd_initialized = 1;
82*5e7646d2SAndroid Build Coastguard Worker }
83*5e7646d2SAndroid Build Coastguard Worker _cupsMutexUnlock(&dnssd_mutex);
84*5e7646d2SAndroid Build Coastguard Worker }
85*5e7646d2SAndroid Build Coastguard Worker
86*5e7646d2SAndroid Build Coastguard Worker
87*5e7646d2SAndroid Build Coastguard Worker // DNSServiceAddRecord
DNSServiceAddRecord(DNSServiceRef sdRef,DNSRecordRef * RecordRef,DNSServiceFlags flags,uint16_t rrtype,uint16_t rdlen,const void * rdata,uint32_t ttl)88*5e7646d2SAndroid Build Coastguard Worker DNSServiceErrorType DNSSD_API DNSServiceAddRecord
89*5e7646d2SAndroid Build Coastguard Worker (
90*5e7646d2SAndroid Build Coastguard Worker DNSServiceRef sdRef,
91*5e7646d2SAndroid Build Coastguard Worker DNSRecordRef *RecordRef,
92*5e7646d2SAndroid Build Coastguard Worker DNSServiceFlags flags,
93*5e7646d2SAndroid Build Coastguard Worker uint16_t rrtype,
94*5e7646d2SAndroid Build Coastguard Worker uint16_t rdlen,
95*5e7646d2SAndroid Build Coastguard Worker const void *rdata,
96*5e7646d2SAndroid Build Coastguard Worker uint32_t ttl
97*5e7646d2SAndroid Build Coastguard Worker )
98*5e7646d2SAndroid Build Coastguard Worker {
99*5e7646d2SAndroid Build Coastguard Worker if (!dnssd_initialized)
100*5e7646d2SAndroid Build Coastguard Worker dnssd_init();
101*5e7646d2SAndroid Build Coastguard Worker
102*5e7646d2SAndroid Build Coastguard Worker if (dnssd_add_record)
103*5e7646d2SAndroid Build Coastguard Worker return (*dnssd_add_record)(sdRef, RecordRef, flags, rrtype, rdlen, rdata, ttl);
104*5e7646d2SAndroid Build Coastguard Worker else
105*5e7646d2SAndroid Build Coastguard Worker return (kDNSServiceErr_ServiceNotRunning);
106*5e7646d2SAndroid Build Coastguard Worker }
107*5e7646d2SAndroid Build Coastguard Worker
108*5e7646d2SAndroid Build Coastguard Worker
109*5e7646d2SAndroid Build Coastguard Worker // DNSServiceBrowse
DNSServiceBrowse(DNSServiceRef * sdRef,DNSServiceFlags flags,uint32_t interfaceIndex,const char * regtype,const char * domain,DNSServiceBrowseReply callBack,void * context)110*5e7646d2SAndroid Build Coastguard Worker DNSServiceErrorType DNSSD_API DNSServiceBrowse
111*5e7646d2SAndroid Build Coastguard Worker (
112*5e7646d2SAndroid Build Coastguard Worker DNSServiceRef *sdRef,
113*5e7646d2SAndroid Build Coastguard Worker DNSServiceFlags flags,
114*5e7646d2SAndroid Build Coastguard Worker uint32_t interfaceIndex,
115*5e7646d2SAndroid Build Coastguard Worker const char *regtype,
116*5e7646d2SAndroid Build Coastguard Worker const char *domain, /* may be NULL */
117*5e7646d2SAndroid Build Coastguard Worker DNSServiceBrowseReply callBack,
118*5e7646d2SAndroid Build Coastguard Worker void *context /* may be NULL */
119*5e7646d2SAndroid Build Coastguard Worker )
120*5e7646d2SAndroid Build Coastguard Worker {
121*5e7646d2SAndroid Build Coastguard Worker if (!dnssd_initialized)
122*5e7646d2SAndroid Build Coastguard Worker dnssd_init();
123*5e7646d2SAndroid Build Coastguard Worker
124*5e7646d2SAndroid Build Coastguard Worker if (dnssd_browse)
125*5e7646d2SAndroid Build Coastguard Worker return (*dnssd_browse)(sdRef, flags, interfaceIndex, regtype, domain, callBack, context);
126*5e7646d2SAndroid Build Coastguard Worker else
127*5e7646d2SAndroid Build Coastguard Worker return (kDNSServiceErr_ServiceNotRunning);
128*5e7646d2SAndroid Build Coastguard Worker }
129*5e7646d2SAndroid Build Coastguard Worker
130*5e7646d2SAndroid Build Coastguard Worker
131*5e7646d2SAndroid Build Coastguard Worker // DNSServiceConstructFullName
DNSServiceConstructFullName(char * const fullName,const char * const service,const char * const regtype,const char * const domain)132*5e7646d2SAndroid Build Coastguard Worker DNSServiceErrorType DNSSD_API DNSServiceConstructFullName
133*5e7646d2SAndroid Build Coastguard Worker (
134*5e7646d2SAndroid Build Coastguard Worker char * const fullName,
135*5e7646d2SAndroid Build Coastguard Worker const char * const service, /* may be NULL */
136*5e7646d2SAndroid Build Coastguard Worker const char * const regtype,
137*5e7646d2SAndroid Build Coastguard Worker const char * const domain
138*5e7646d2SAndroid Build Coastguard Worker )
139*5e7646d2SAndroid Build Coastguard Worker {
140*5e7646d2SAndroid Build Coastguard Worker if (!dnssd_initialized)
141*5e7646d2SAndroid Build Coastguard Worker dnssd_init();
142*5e7646d2SAndroid Build Coastguard Worker
143*5e7646d2SAndroid Build Coastguard Worker if (dnssd_construct_full_name)
144*5e7646d2SAndroid Build Coastguard Worker return (*dnssd_construct_full_name)(fullName, service, regtype, domain);
145*5e7646d2SAndroid Build Coastguard Worker else
146*5e7646d2SAndroid Build Coastguard Worker return (-1);
147*5e7646d2SAndroid Build Coastguard Worker }
148*5e7646d2SAndroid Build Coastguard Worker
149*5e7646d2SAndroid Build Coastguard Worker
150*5e7646d2SAndroid Build Coastguard Worker // DNSServiceCreateConnection
DNSServiceCreateConnection(DNSServiceRef * sdRef)151*5e7646d2SAndroid Build Coastguard Worker DNSServiceErrorType DNSSD_API DNSServiceCreateConnection(DNSServiceRef *sdRef)
152*5e7646d2SAndroid Build Coastguard Worker {
153*5e7646d2SAndroid Build Coastguard Worker if (!dnssd_initialized)
154*5e7646d2SAndroid Build Coastguard Worker dnssd_init();
155*5e7646d2SAndroid Build Coastguard Worker
156*5e7646d2SAndroid Build Coastguard Worker if (dnssd_create_connection)
157*5e7646d2SAndroid Build Coastguard Worker return (*dnssd_create_connection)(sdRef);
158*5e7646d2SAndroid Build Coastguard Worker else
159*5e7646d2SAndroid Build Coastguard Worker return (kDNSServiceErr_ServiceNotRunning);
160*5e7646d2SAndroid Build Coastguard Worker }
161*5e7646d2SAndroid Build Coastguard Worker
162*5e7646d2SAndroid Build Coastguard Worker
163*5e7646d2SAndroid Build Coastguard Worker // DNSServiceProcessResult
DNSServiceProcessResult(DNSServiceRef sdRef)164*5e7646d2SAndroid Build Coastguard Worker DNSServiceErrorType DNSSD_API DNSServiceProcessResult(DNSServiceRef sdRef)
165*5e7646d2SAndroid Build Coastguard Worker {
166*5e7646d2SAndroid Build Coastguard Worker if (!dnssd_initialized)
167*5e7646d2SAndroid Build Coastguard Worker dnssd_init();
168*5e7646d2SAndroid Build Coastguard Worker
169*5e7646d2SAndroid Build Coastguard Worker if (dnssd_process_result)
170*5e7646d2SAndroid Build Coastguard Worker return (*dnssd_process_result)(sdRef);
171*5e7646d2SAndroid Build Coastguard Worker else
172*5e7646d2SAndroid Build Coastguard Worker return (kDNSServiceErr_ServiceNotRunning);
173*5e7646d2SAndroid Build Coastguard Worker }
174*5e7646d2SAndroid Build Coastguard Worker
175*5e7646d2SAndroid Build Coastguard Worker
176*5e7646d2SAndroid Build Coastguard Worker // DNSServiceQueryRecord
DNSServiceQueryRecord(DNSServiceRef * sdRef,DNSServiceFlags flags,uint32_t interfaceIndex,const char * fullname,uint16_t rrtype,uint16_t rrclass,DNSServiceQueryRecordReply callBack,void * context)177*5e7646d2SAndroid Build Coastguard Worker DNSServiceErrorType DNSSD_API DNSServiceQueryRecord
178*5e7646d2SAndroid Build Coastguard Worker (
179*5e7646d2SAndroid Build Coastguard Worker DNSServiceRef *sdRef,
180*5e7646d2SAndroid Build Coastguard Worker DNSServiceFlags flags,
181*5e7646d2SAndroid Build Coastguard Worker uint32_t interfaceIndex,
182*5e7646d2SAndroid Build Coastguard Worker const char *fullname,
183*5e7646d2SAndroid Build Coastguard Worker uint16_t rrtype,
184*5e7646d2SAndroid Build Coastguard Worker uint16_t rrclass,
185*5e7646d2SAndroid Build Coastguard Worker DNSServiceQueryRecordReply callBack,
186*5e7646d2SAndroid Build Coastguard Worker void *context /* may be NULL */
187*5e7646d2SAndroid Build Coastguard Worker )
188*5e7646d2SAndroid Build Coastguard Worker {
189*5e7646d2SAndroid Build Coastguard Worker if (!dnssd_initialized)
190*5e7646d2SAndroid Build Coastguard Worker dnssd_init();
191*5e7646d2SAndroid Build Coastguard Worker
192*5e7646d2SAndroid Build Coastguard Worker if (dnssd_query_record)
193*5e7646d2SAndroid Build Coastguard Worker return (*dnssd_query_record)(sdRef, flags, interfaceIndex, fullname, rrtype, rrclass, callBack, context);
194*5e7646d2SAndroid Build Coastguard Worker else
195*5e7646d2SAndroid Build Coastguard Worker return (kDNSServiceErr_ServiceNotRunning);
196*5e7646d2SAndroid Build Coastguard Worker }
197*5e7646d2SAndroid Build Coastguard Worker
198*5e7646d2SAndroid Build Coastguard Worker
199*5e7646d2SAndroid Build Coastguard Worker // DNSServiceRefDeallocate
DNSServiceRefDeallocate(DNSServiceRef sdRef)200*5e7646d2SAndroid Build Coastguard Worker void DNSSD_API DNSServiceRefDeallocate(DNSServiceRef sdRef)
201*5e7646d2SAndroid Build Coastguard Worker {
202*5e7646d2SAndroid Build Coastguard Worker if (!dnssd_initialized)
203*5e7646d2SAndroid Build Coastguard Worker dnssd_init();
204*5e7646d2SAndroid Build Coastguard Worker
205*5e7646d2SAndroid Build Coastguard Worker if (dnssd_deallocate)
206*5e7646d2SAndroid Build Coastguard Worker (*dnssd_deallocate)(sdRef);
207*5e7646d2SAndroid Build Coastguard Worker }
208*5e7646d2SAndroid Build Coastguard Worker
209*5e7646d2SAndroid Build Coastguard Worker
210*5e7646d2SAndroid Build Coastguard Worker // DNSServiceRefSockFD
DNSServiceRefSockFD(DNSServiceRef sdRef)211*5e7646d2SAndroid Build Coastguard Worker int DNSSD_API DNSServiceRefSockFD(DNSServiceRef sdRef)
212*5e7646d2SAndroid Build Coastguard Worker {
213*5e7646d2SAndroid Build Coastguard Worker if (!dnssd_initialized)
214*5e7646d2SAndroid Build Coastguard Worker dnssd_init();
215*5e7646d2SAndroid Build Coastguard Worker
216*5e7646d2SAndroid Build Coastguard Worker if (dnssd_sock_fd)
217*5e7646d2SAndroid Build Coastguard Worker return (*dnssd_sock_fd)(sdRef);
218*5e7646d2SAndroid Build Coastguard Worker else
219*5e7646d2SAndroid Build Coastguard Worker return (kDNSServiceErr_ServiceNotRunning);
220*5e7646d2SAndroid Build Coastguard Worker }
221*5e7646d2SAndroid Build Coastguard Worker
222*5e7646d2SAndroid Build Coastguard Worker
223*5e7646d2SAndroid Build Coastguard Worker // DNSServiceRegister
DNSServiceRegister(DNSServiceRef * sdRef,DNSServiceFlags flags,uint32_t interfaceIndex,const char * name,const char * regtype,const char * domain,const char * host,uint16_t port,uint16_t txtLen,const void * txtRecord,DNSServiceRegisterReply callBack,void * context)224*5e7646d2SAndroid Build Coastguard Worker DNSServiceErrorType DNSSD_API DNSServiceRegister
225*5e7646d2SAndroid Build Coastguard Worker (
226*5e7646d2SAndroid Build Coastguard Worker DNSServiceRef *sdRef,
227*5e7646d2SAndroid Build Coastguard Worker DNSServiceFlags flags,
228*5e7646d2SAndroid Build Coastguard Worker uint32_t interfaceIndex,
229*5e7646d2SAndroid Build Coastguard Worker const char *name, /* may be NULL */
230*5e7646d2SAndroid Build Coastguard Worker const char *regtype,
231*5e7646d2SAndroid Build Coastguard Worker const char *domain, /* may be NULL */
232*5e7646d2SAndroid Build Coastguard Worker const char *host, /* may be NULL */
233*5e7646d2SAndroid Build Coastguard Worker uint16_t port, /* In network byte order */
234*5e7646d2SAndroid Build Coastguard Worker uint16_t txtLen,
235*5e7646d2SAndroid Build Coastguard Worker const void *txtRecord, /* may be NULL */
236*5e7646d2SAndroid Build Coastguard Worker DNSServiceRegisterReply callBack, /* may be NULL */
237*5e7646d2SAndroid Build Coastguard Worker void *context /* may be NULL */
238*5e7646d2SAndroid Build Coastguard Worker )
239*5e7646d2SAndroid Build Coastguard Worker {
240*5e7646d2SAndroid Build Coastguard Worker if (!dnssd_initialized)
241*5e7646d2SAndroid Build Coastguard Worker dnssd_init();
242*5e7646d2SAndroid Build Coastguard Worker
243*5e7646d2SAndroid Build Coastguard Worker if (dnssd_register)
244*5e7646d2SAndroid Build Coastguard Worker return (*dnssd_register)(sdRef, flags, interfaceIndex, name, regtype, domain, host, port, txtLen, txtRecord, callBack, context);
245*5e7646d2SAndroid Build Coastguard Worker else
246*5e7646d2SAndroid Build Coastguard Worker return (kDNSServiceErr_ServiceNotRunning);
247*5e7646d2SAndroid Build Coastguard Worker }
248*5e7646d2SAndroid Build Coastguard Worker
249*5e7646d2SAndroid Build Coastguard Worker
250*5e7646d2SAndroid Build Coastguard Worker // DNSServiceRemoveRecord
DNSServiceRemoveRecord(DNSServiceRef sdRef,DNSRecordRef RecordRef,DNSServiceFlags flags)251*5e7646d2SAndroid Build Coastguard Worker DNSServiceErrorType DNSSD_API DNSServiceRemoveRecord
252*5e7646d2SAndroid Build Coastguard Worker (
253*5e7646d2SAndroid Build Coastguard Worker DNSServiceRef sdRef,
254*5e7646d2SAndroid Build Coastguard Worker DNSRecordRef RecordRef,
255*5e7646d2SAndroid Build Coastguard Worker DNSServiceFlags flags
256*5e7646d2SAndroid Build Coastguard Worker )
257*5e7646d2SAndroid Build Coastguard Worker {
258*5e7646d2SAndroid Build Coastguard Worker if (!dnssd_initialized)
259*5e7646d2SAndroid Build Coastguard Worker dnssd_init();
260*5e7646d2SAndroid Build Coastguard Worker
261*5e7646d2SAndroid Build Coastguard Worker if (dnssd_remove_record)
262*5e7646d2SAndroid Build Coastguard Worker return (*dnssd_remove_record)(sdRef, RecordRef, flags);
263*5e7646d2SAndroid Build Coastguard Worker else
264*5e7646d2SAndroid Build Coastguard Worker return (kDNSServiceErr_ServiceNotRunning);
265*5e7646d2SAndroid Build Coastguard Worker }
266*5e7646d2SAndroid Build Coastguard Worker
267*5e7646d2SAndroid Build Coastguard Worker
268*5e7646d2SAndroid Build Coastguard Worker // DNSServiceResolve
DNSServiceResolve(DNSServiceRef * sdRef,DNSServiceFlags flags,uint32_t interfaceIndex,const char * name,const char * regtype,const char * domain,DNSServiceResolveReply callBack,void * context)269*5e7646d2SAndroid Build Coastguard Worker DNSServiceErrorType DNSSD_API DNSServiceResolve
270*5e7646d2SAndroid Build Coastguard Worker (
271*5e7646d2SAndroid Build Coastguard Worker DNSServiceRef *sdRef,
272*5e7646d2SAndroid Build Coastguard Worker DNSServiceFlags flags,
273*5e7646d2SAndroid Build Coastguard Worker uint32_t interfaceIndex,
274*5e7646d2SAndroid Build Coastguard Worker const char *name,
275*5e7646d2SAndroid Build Coastguard Worker const char *regtype,
276*5e7646d2SAndroid Build Coastguard Worker const char *domain,
277*5e7646d2SAndroid Build Coastguard Worker DNSServiceResolveReply callBack,
278*5e7646d2SAndroid Build Coastguard Worker void *context /* may be NULL */
279*5e7646d2SAndroid Build Coastguard Worker )
280*5e7646d2SAndroid Build Coastguard Worker {
281*5e7646d2SAndroid Build Coastguard Worker if (!dnssd_initialized)
282*5e7646d2SAndroid Build Coastguard Worker dnssd_init();
283*5e7646d2SAndroid Build Coastguard Worker
284*5e7646d2SAndroid Build Coastguard Worker if (dnssd_resolve)
285*5e7646d2SAndroid Build Coastguard Worker return (*dnssd_resolve)(sdRef, flags, interfaceIndex, name, regtype, domain, callBack, context);
286*5e7646d2SAndroid Build Coastguard Worker else
287*5e7646d2SAndroid Build Coastguard Worker return (kDNSServiceErr_ServiceNotRunning);
288*5e7646d2SAndroid Build Coastguard Worker }
289*5e7646d2SAndroid Build Coastguard Worker
290*5e7646d2SAndroid Build Coastguard Worker
291*5e7646d2SAndroid Build Coastguard Worker // DNSServiceUpdateRecord
DNSServiceUpdateRecord(DNSServiceRef sdRef,DNSRecordRef RecordRef,DNSServiceFlags flags,uint16_t rdlen,const void * rdata,uint32_t ttl)292*5e7646d2SAndroid Build Coastguard Worker DNSServiceErrorType DNSSD_API DNSServiceUpdateRecord
293*5e7646d2SAndroid Build Coastguard Worker (
294*5e7646d2SAndroid Build Coastguard Worker DNSServiceRef sdRef,
295*5e7646d2SAndroid Build Coastguard Worker DNSRecordRef RecordRef, /* may be NULL */
296*5e7646d2SAndroid Build Coastguard Worker DNSServiceFlags flags,
297*5e7646d2SAndroid Build Coastguard Worker uint16_t rdlen,
298*5e7646d2SAndroid Build Coastguard Worker const void *rdata,
299*5e7646d2SAndroid Build Coastguard Worker uint32_t ttl
300*5e7646d2SAndroid Build Coastguard Worker )
301*5e7646d2SAndroid Build Coastguard Worker {
302*5e7646d2SAndroid Build Coastguard Worker if (!dnssd_initialized)
303*5e7646d2SAndroid Build Coastguard Worker dnssd_init();
304*5e7646d2SAndroid Build Coastguard Worker
305*5e7646d2SAndroid Build Coastguard Worker if (dnssd_update_record)
306*5e7646d2SAndroid Build Coastguard Worker return (*dnssd_update_record)(sdRef, RecordRef, flags, rdlen, rdata, ttl);
307*5e7646d2SAndroid Build Coastguard Worker else
308*5e7646d2SAndroid Build Coastguard Worker return (kDNSServiceErr_ServiceNotRunning);
309*5e7646d2SAndroid Build Coastguard Worker }
310*5e7646d2SAndroid Build Coastguard Worker
311*5e7646d2SAndroid Build Coastguard Worker
312*5e7646d2SAndroid Build Coastguard Worker // TXTRecordCreate
313*5e7646d2SAndroid Build Coastguard Worker void DNSSD_API
TXTRecordCreate(TXTRecordRef * txtRecord,uint16_t bufferLen,void * buffer)314*5e7646d2SAndroid Build Coastguard Worker TXTRecordCreate(
315*5e7646d2SAndroid Build Coastguard Worker TXTRecordRef *txtRecord,
316*5e7646d2SAndroid Build Coastguard Worker uint16_t bufferLen,
317*5e7646d2SAndroid Build Coastguard Worker void *buffer)
318*5e7646d2SAndroid Build Coastguard Worker {
319*5e7646d2SAndroid Build Coastguard Worker if (!dnssd_initialized)
320*5e7646d2SAndroid Build Coastguard Worker dnssd_init();
321*5e7646d2SAndroid Build Coastguard Worker
322*5e7646d2SAndroid Build Coastguard Worker if (dnssd_txt_create)
323*5e7646d2SAndroid Build Coastguard Worker (*dnssd_txt_create)(txtRecord, bufferLen, buffer);
324*5e7646d2SAndroid Build Coastguard Worker }
325*5e7646d2SAndroid Build Coastguard Worker
326*5e7646d2SAndroid Build Coastguard Worker
327*5e7646d2SAndroid Build Coastguard Worker // TXTRecordDeallocate
TXTRecordDeallocate(TXTRecordRef * txtRecord)328*5e7646d2SAndroid Build Coastguard Worker void DNSSD_API TXTRecordDeallocate
329*5e7646d2SAndroid Build Coastguard Worker (
330*5e7646d2SAndroid Build Coastguard Worker TXTRecordRef *txtRecord
331*5e7646d2SAndroid Build Coastguard Worker )
332*5e7646d2SAndroid Build Coastguard Worker {
333*5e7646d2SAndroid Build Coastguard Worker if (!dnssd_initialized)
334*5e7646d2SAndroid Build Coastguard Worker dnssd_init();
335*5e7646d2SAndroid Build Coastguard Worker
336*5e7646d2SAndroid Build Coastguard Worker if (dnssd_txt_deallocate)
337*5e7646d2SAndroid Build Coastguard Worker (*dnssd_txt_deallocate)(txtRecord);
338*5e7646d2SAndroid Build Coastguard Worker }
339*5e7646d2SAndroid Build Coastguard Worker
340*5e7646d2SAndroid Build Coastguard Worker
341*5e7646d2SAndroid Build Coastguard Worker // TXTRecordGetBytesPtr
TXTRecordGetBytesPtr(const TXTRecordRef * txtRecord)342*5e7646d2SAndroid Build Coastguard Worker const void * DNSSD_API TXTRecordGetBytesPtr
343*5e7646d2SAndroid Build Coastguard Worker (
344*5e7646d2SAndroid Build Coastguard Worker const TXTRecordRef *txtRecord
345*5e7646d2SAndroid Build Coastguard Worker )
346*5e7646d2SAndroid Build Coastguard Worker {
347*5e7646d2SAndroid Build Coastguard Worker if (!dnssd_initialized)
348*5e7646d2SAndroid Build Coastguard Worker dnssd_init();
349*5e7646d2SAndroid Build Coastguard Worker
350*5e7646d2SAndroid Build Coastguard Worker if (dnssd_txt_get_bytes_ptr)
351*5e7646d2SAndroid Build Coastguard Worker return (*dnssd_txt_get_bytes_ptr)(txtRecord);
352*5e7646d2SAndroid Build Coastguard Worker else
353*5e7646d2SAndroid Build Coastguard Worker return (NULL);
354*5e7646d2SAndroid Build Coastguard Worker }
355*5e7646d2SAndroid Build Coastguard Worker
356*5e7646d2SAndroid Build Coastguard Worker
357*5e7646d2SAndroid Build Coastguard Worker // TXTRecordGetLength
TXTRecordGetLength(const TXTRecordRef * txtRecord)358*5e7646d2SAndroid Build Coastguard Worker uint16_t DNSSD_API TXTRecordGetLength
359*5e7646d2SAndroid Build Coastguard Worker (
360*5e7646d2SAndroid Build Coastguard Worker const TXTRecordRef *txtRecord
361*5e7646d2SAndroid Build Coastguard Worker )
362*5e7646d2SAndroid Build Coastguard Worker {
363*5e7646d2SAndroid Build Coastguard Worker if (!dnssd_initialized)
364*5e7646d2SAndroid Build Coastguard Worker dnssd_init();
365*5e7646d2SAndroid Build Coastguard Worker
366*5e7646d2SAndroid Build Coastguard Worker if (dnssd_txt_get_length)
367*5e7646d2SAndroid Build Coastguard Worker return (*dnssd_txt_get_length)(txtRecord);
368*5e7646d2SAndroid Build Coastguard Worker else
369*5e7646d2SAndroid Build Coastguard Worker return (0);
370*5e7646d2SAndroid Build Coastguard Worker }
371*5e7646d2SAndroid Build Coastguard Worker
372*5e7646d2SAndroid Build Coastguard Worker
373*5e7646d2SAndroid Build Coastguard Worker // TXTRecordSetValue
TXTRecordSetValue(TXTRecordRef * txtRecord,const char * key,uint8_t valueSize,const void * value)374*5e7646d2SAndroid Build Coastguard Worker DNSServiceErrorType DNSSD_API TXTRecordSetValue
375*5e7646d2SAndroid Build Coastguard Worker (
376*5e7646d2SAndroid Build Coastguard Worker TXTRecordRef *txtRecord,
377*5e7646d2SAndroid Build Coastguard Worker const char *key,
378*5e7646d2SAndroid Build Coastguard Worker uint8_t valueSize, /* may be zero */
379*5e7646d2SAndroid Build Coastguard Worker const void *value /* may be NULL */
380*5e7646d2SAndroid Build Coastguard Worker )
381*5e7646d2SAndroid Build Coastguard Worker {
382*5e7646d2SAndroid Build Coastguard Worker if (!dnssd_initialized)
383*5e7646d2SAndroid Build Coastguard Worker dnssd_init();
384*5e7646d2SAndroid Build Coastguard Worker
385*5e7646d2SAndroid Build Coastguard Worker if (dnssd_txt_set_value)
386*5e7646d2SAndroid Build Coastguard Worker return (*dnssd_txt_set_value)(txtRecord, key, valueSize, value);
387*5e7646d2SAndroid Build Coastguard Worker else
388*5e7646d2SAndroid Build Coastguard Worker return (-1);
389*5e7646d2SAndroid Build Coastguard Worker }
390*5e7646d2SAndroid Build Coastguard Worker
391*5e7646d2SAndroid Build Coastguard Worker
392*5e7646d2SAndroid Build Coastguard Worker // TXTRecordGetCount
393*5e7646d2SAndroid Build Coastguard Worker uint16_t DNSSD_API
TXTRecordGetCount(uint16_t txtLen,const void * txtRecord)394*5e7646d2SAndroid Build Coastguard Worker TXTRecordGetCount(
395*5e7646d2SAndroid Build Coastguard Worker uint16_t txtLen,
396*5e7646d2SAndroid Build Coastguard Worker const void *txtRecord)
397*5e7646d2SAndroid Build Coastguard Worker {
398*5e7646d2SAndroid Build Coastguard Worker if (!dnssd_initialized)
399*5e7646d2SAndroid Build Coastguard Worker dnssd_init();
400*5e7646d2SAndroid Build Coastguard Worker
401*5e7646d2SAndroid Build Coastguard Worker if (dnssd_txt_get_count)
402*5e7646d2SAndroid Build Coastguard Worker return (*dnssd_txt_get_count)(txtLen, txtRecord);
403*5e7646d2SAndroid Build Coastguard Worker else
404*5e7646d2SAndroid Build Coastguard Worker return (0);
405*5e7646d2SAndroid Build Coastguard Worker }
406*5e7646d2SAndroid Build Coastguard Worker
407*5e7646d2SAndroid Build Coastguard Worker
408*5e7646d2SAndroid Build Coastguard Worker // TXTRecordGetItemAtIndex
409*5e7646d2SAndroid Build Coastguard Worker DNSServiceErrorType DNSSD_API
TXTRecordGetItemAtIndex(uint16_t txtLen,const void * txtRecord,uint16_t itemIndex,uint16_t keyBufLen,char * key,uint8_t * valueLen,const void ** value)410*5e7646d2SAndroid Build Coastguard Worker TXTRecordGetItemAtIndex(
411*5e7646d2SAndroid Build Coastguard Worker uint16_t txtLen,
412*5e7646d2SAndroid Build Coastguard Worker const void *txtRecord,
413*5e7646d2SAndroid Build Coastguard Worker uint16_t itemIndex,
414*5e7646d2SAndroid Build Coastguard Worker uint16_t keyBufLen,
415*5e7646d2SAndroid Build Coastguard Worker char *key,
416*5e7646d2SAndroid Build Coastguard Worker uint8_t *valueLen,
417*5e7646d2SAndroid Build Coastguard Worker const void **value)
418*5e7646d2SAndroid Build Coastguard Worker {
419*5e7646d2SAndroid Build Coastguard Worker if (!dnssd_initialized)
420*5e7646d2SAndroid Build Coastguard Worker dnssd_init();
421*5e7646d2SAndroid Build Coastguard Worker
422*5e7646d2SAndroid Build Coastguard Worker if (dnssd_txt_get_item_at_index)
423*5e7646d2SAndroid Build Coastguard Worker return (*dnssd_txt_get_item_at_index)(txtLen, txtRecord, itemIndex, keyBufLen, key, valueLen, value);
424*5e7646d2SAndroid Build Coastguard Worker else
425*5e7646d2SAndroid Build Coastguard Worker return (-1);
426*5e7646d2SAndroid Build Coastguard Worker }
427*5e7646d2SAndroid Build Coastguard Worker
428*5e7646d2SAndroid Build Coastguard Worker
429*5e7646d2SAndroid Build Coastguard Worker // TXTRecordGetValuePtr
430*5e7646d2SAndroid Build Coastguard Worker const void * DNSSD_API
TXTRecordGetValuePtr(uint16_t txtLen,const void * txtRecord,const char * key,uint8_t * valueLen)431*5e7646d2SAndroid Build Coastguard Worker TXTRecordGetValuePtr(
432*5e7646d2SAndroid Build Coastguard Worker uint16_t txtLen,
433*5e7646d2SAndroid Build Coastguard Worker const void *txtRecord,
434*5e7646d2SAndroid Build Coastguard Worker const char *key,
435*5e7646d2SAndroid Build Coastguard Worker uint8_t *valueLen)
436*5e7646d2SAndroid Build Coastguard Worker {
437*5e7646d2SAndroid Build Coastguard Worker if (!dnssd_initialized)
438*5e7646d2SAndroid Build Coastguard Worker dnssd_init();
439*5e7646d2SAndroid Build Coastguard Worker
440*5e7646d2SAndroid Build Coastguard Worker if (dnssd_txt_get_value_ptr)
441*5e7646d2SAndroid Build Coastguard Worker return (*dnssd_txt_get_value_ptr)(txtLen, txtRecord, key, valueLen);
442*5e7646d2SAndroid Build Coastguard Worker else
443*5e7646d2SAndroid Build Coastguard Worker return (NULL);
444*5e7646d2SAndroid Build Coastguard Worker }
445