- (
- DNSServiceRef *sdRef,
- DNSServiceFlags flags,
- uint32_t interfaceIndex,
- const char *name,
- const char *regtype,
- const char *domain,
- DNSServiceResolveReply callback,
- void *context /* may be NULL */
- )
- {
- mStatus err = mStatus_NoError;
- const char *errormsg = "Unknown";
- domainlabel n;
- domainname t, d, srv;
- mDNS_DirectOP_Resolve *x;
-
- (void)flags; // Unused
- (void)interfaceIndex; // Unused
-
- // Check parameters
- if (!name[0] || !MakeDomainLabelFromLiteralString(&n, name )) { errormsg = "Bad Instance Name"; goto badparam; }
- if (!regtype[0] || !MakeDomainNameFromDNSNameString(&t, regtype)) { errormsg = "Bad Service Type"; goto badparam; }
- if (!domain[0] || !MakeDomainNameFromDNSNameString(&d, domain )) { errormsg = "Bad Domain"; goto badparam; }
- if (!ConstructServiceName(&srv, &n, &t, &d)) { errormsg = "Bad Name"; goto badparam; }
-
- // Allocate memory, and handle failure
- x = (mDNS_DirectOP_Resolve *)mDNSPlatformMemAllocate(sizeof(*x));
- if (!x) { err = mStatus_NoMemoryErr; errormsg = "No memory"; goto fail; }
-
- // Set up object
- x->disposefn = DNSServiceResolveDispose;
- x->callback = callback;
- x->context = context;
- x->SRV = mDNSNULL;
- x->TXT = mDNSNULL;
-
- x->qSRV.ThisQInterval = -1; // So that DNSServiceResolveDispose() knows whether to cancel this question
- x->qSRV.InterfaceID = mDNSInterface_Any;
- x->qSRV.Target = zeroAddr;
- AssignDomainName(&x->qSRV.qname, &srv);
- x->qSRV.qtype = kDNSType_SRV;
- x->qSRV.qclass = kDNSClass_IN;
- x->qSRV.LongLived = mDNSfalse;
- x->qSRV.ExpectUnique = mDNStrue;
- x->qSRV.ForceMCast = mDNSfalse;
- x->qSRV.QuestionCallback = FoundServiceInfo;
- x->qSRV.QuestionContext = x;
-
- x->qTXT.ThisQInterval = -1; // So that DNSServiceResolveDispose() knows whether to cancel this question
- x->qTXT.InterfaceID = mDNSInterface_Any;
- x->qTXT.Target = zeroAddr;
- AssignDomainName(&x->qTXT.qname, &srv);
- x->qTXT.qtype = kDNSType_TXT;
- x->qTXT.qclass = kDNSClass_IN;
- x->qTXT.LongLived = mDNSfalse;
- x->qTXT.ExpectUnique = mDNStrue;
- x->qTXT.ForceMCast = mDNSfalse;
- x->qTXT.QuestionCallback = FoundServiceInfo;
- x->qTXT.QuestionContext = x;
-
- err = mDNS_StartQuery(&mDNSStorage, &x->qSRV);
- if (err) { DNSServiceResolveDispose((mDNS_DirectOP*)x); errormsg = "mDNS_StartQuery qSRV"; goto fail; }
- err = mDNS_StartQuery(&mDNSStorage, &x->qTXT);
- if (err) { DNSServiceResolveDispose((mDNS_DirectOP*)x); errormsg = "mDNS_StartQuery qTXT"; goto fail; }
-
- // Succeeded: Wrap up and return
- *sdRef = (DNSServiceRef)x;
- return(mStatus_NoError);
+(
+ DNSServiceRef *sdRef,
+ DNSServiceFlags flags,
+ uint32_t interfaceIndex,
+ const char *name,
+ const char *regtype,
+ const char *domain,
+ DNSServiceResolveReply callback,
+ void *context /* may be NULL */
+)
+{
+ mStatus err = mStatus_NoError;
+ const char *errormsg = "Unknown";
+ domainlabel n;
+ domainname t, d, srv;
+ mDNS_DirectOP_Resolve *x;
+
+ (void)flags; // Unused
+ (void)interfaceIndex; // Unused
+
+ // Check parameters
+ if (!name[0] || !MakeDomainLabelFromLiteralString(&n, name )) { errormsg = "Bad Instance Name"; goto badparam; }
+ if (!regtype[0] || !MakeDomainNameFromDNSNameString(&t, regtype)) { errormsg = "Bad Service Type"; goto badparam; }
+ if (!domain[0] || !MakeDomainNameFromDNSNameString(&d, domain )) { errormsg = "Bad Domain"; goto badparam; }
+ if (!ConstructServiceName(&srv, &n, &t, &d)) { errormsg = "Bad Name"; goto badparam; }
+
+ // Allocate memory, and handle failure
+ x = (mDNS_DirectOP_Resolve *)mDNSPlatformMemAllocate(sizeof(*x));
+ if (!x) { err = mStatus_NoMemoryErr; errormsg = "No memory"; goto fail; }
+
+ // Set up object
+ x->disposefn = DNSServiceResolveDispose;
+ x->callback = callback;
+ x->context = context;
+ x->SRV = mDNSNULL;
+ x->TXT = mDNSNULL;
+
+ x->qSRV.ThisQInterval = -1; // So that DNSServiceResolveDispose() knows whether to cancel this question
+ x->qSRV.InterfaceID = mDNSInterface_Any;
+ x->qSRV.flags = 0;
+ x->qSRV.Target = zeroAddr;
+ AssignDomainName(&x->qSRV.qname, &srv);
+ x->qSRV.qtype = kDNSType_SRV;
+ x->qSRV.qclass = kDNSClass_IN;
+ x->qSRV.LongLived = mDNSfalse;
+ x->qSRV.ExpectUnique = mDNStrue;
+ x->qSRV.ForceMCast = mDNSfalse;
+ x->qSRV.ReturnIntermed = mDNSfalse;
+ x->qSRV.SuppressUnusable = mDNSfalse;
+ x->qSRV.SearchListIndex = 0;
+ x->qSRV.AppendSearchDomains = 0;
+ x->qSRV.RetryWithSearchDomains = mDNSfalse;
+ x->qSRV.TimeoutQuestion = 0;
+ x->qSRV.WakeOnResolve = 0;
+ x->qSRV.UseBackgroundTrafficClass = (flags & kDNSServiceFlagsBackgroundTrafficClass) != 0;
+ x->qSRV.ValidationRequired = 0;
+ x->qSRV.ValidatingResponse = 0;
+ x->qSRV.ProxyQuestion = 0;
+ x->qSRV.qnameOrig = mDNSNULL;
+ x->qSRV.AnonInfo = mDNSNULL;
+ x->qSRV.pid = mDNSPlatformGetPID();
+ x->qSRV.QuestionCallback = FoundServiceInfo;
+ x->qSRV.QuestionContext = x;
+
+ x->qTXT.ThisQInterval = -1; // So that DNSServiceResolveDispose() knows whether to cancel this question
+ x->qTXT.InterfaceID = mDNSInterface_Any;
+ x->qTXT.flags = 0;
+ x->qTXT.Target = zeroAddr;
+ AssignDomainName(&x->qTXT.qname, &srv);
+ x->qTXT.qtype = kDNSType_TXT;
+ x->qTXT.qclass = kDNSClass_IN;
+ x->qTXT.LongLived = mDNSfalse;
+ x->qTXT.ExpectUnique = mDNStrue;
+ x->qTXT.ForceMCast = mDNSfalse;
+ x->qTXT.ReturnIntermed = mDNSfalse;
+ x->qTXT.SuppressUnusable = mDNSfalse;
+ x->qTXT.SearchListIndex = 0;
+ x->qTXT.AppendSearchDomains = 0;
+ x->qTXT.RetryWithSearchDomains = mDNSfalse;
+ x->qTXT.TimeoutQuestion = 0;
+ x->qTXT.WakeOnResolve = 0;
+ x->qTXT.UseBackgroundTrafficClass = (flags & kDNSServiceFlagsBackgroundTrafficClass) != 0;
+ x->qTXT.ValidationRequired = 0;
+ x->qTXT.ValidatingResponse = 0;
+ x->qTXT.ProxyQuestion = 0;
+ x->qTXT.qnameOrig = mDNSNULL;
+ x->qTXT.AnonInfo = mDNSNULL;
+ x->qTXT.pid = mDNSPlatformGetPID();
+ x->qTXT.QuestionCallback = FoundServiceInfo;
+ x->qTXT.QuestionContext = x;
+
+ err = mDNS_StartQuery(&mDNSStorage, &x->qSRV);
+ if (err) { DNSServiceResolveDispose((mDNS_DirectOP*)x); errormsg = "mDNS_StartQuery qSRV"; goto fail; }
+ err = mDNS_StartQuery(&mDNSStorage, &x->qTXT);
+ if (err) { DNSServiceResolveDispose((mDNS_DirectOP*)x); errormsg = "mDNS_StartQuery qTXT"; goto fail; }
+
+ // Succeeded: Wrap up and return
+ *sdRef = (DNSServiceRef)x;
+ return(mStatus_NoError);