mDNSlocal void NoSuchServiceCallback(mDNS *const m, AuthRecord *const rr, mStatus result) { const domainname *proxyhostname = (const domainname *)rr->RecordContext; switch (result) { case mStatus_NoError: debugf("Callback: %##s Name Registered", rr->resrec.name->c); break; case mStatus_NameConflict: debugf("Callback: %##s Name Conflict", rr->resrec.name->c); break; case mStatus_MemFree: debugf("Callback: %##s Memory Free", rr->resrec.name->c); break; default: debugf("Callback: %##s Unknown Result %ld", rr->resrec.name->c, result); break; } if (result == mStatus_NoError) { char buffer[MAX_ESCAPED_DOMAIN_NAME]; ConvertDomainNameToCString(rr->resrec.name, buffer); printf("Non-existence assertion %s now registered and active\n", buffer); } if (result == mStatus_NameConflict) { domainlabel n; domainname t, d; char buffer1[MAX_ESCAPED_DOMAIN_NAME], buffer2[MAX_ESCAPED_DOMAIN_NAME]; ConvertDomainNameToCString(rr->resrec.name, buffer1); DeconstructServiceName(rr->resrec.name, &n, &t, &d); IncrementLabelSuffix(&n, mDNStrue); mDNS_RegisterNoSuchService(m, rr, &n, &t, &d, proxyhostname, mDNSInterface_Any, NoSuchServiceCallback, mDNSNULL, 0); ConvertDomainNameToCString(rr->resrec.name, buffer2); printf("Name Conflict! %s renamed as %s\n", buffer1, buffer2); } }
mDNSlocal void RegCallback(mDNS *const m, ServiceRecordSet *const sr, mStatus result) { mDNS_DirectOP_Register *x = (mDNS_DirectOP_Register*)sr->ServiceContext; domainlabel name; domainname type, dom; char namestr[MAX_DOMAIN_LABEL+1]; // Unescaped name: up to 63 bytes plus C-string terminating NULL. char typestr[MAX_ESCAPED_DOMAIN_NAME]; char domstr [MAX_ESCAPED_DOMAIN_NAME]; if (!DeconstructServiceName(sr->RR_SRV.resrec.name, &name, &type, &dom)) return; if (!ConvertDomainLabelToCString_unescaped(&name, namestr)) return; if (!ConvertDomainNameToCString(&type, typestr)) return; if (!ConvertDomainNameToCString(&dom, domstr)) return; if (result == mStatus_NoError) { if (x->callback) x->callback((DNSServiceRef)x, 0, result, namestr, typestr, domstr, x->context); } else if (result == mStatus_NameConflict) { if (x->autoname) mDNS_RenameAndReregisterService(m, sr, mDNSNULL); else if (x->autorename) { IncrementLabelSuffix(&x->name, mDNStrue); mDNS_RenameAndReregisterService(m, &x->s, &x->name); } else if (x->callback) x->callback((DNSServiceRef)x, 0, result, namestr, typestr, domstr, x->context); } else if (result == mStatus_MemFree) { if (x->autorename) { x->autorename = mDNSfalse; x->name = mDNSStorage.nicelabel; mDNS_RenameAndReregisterService(m, &x->s, &x->name); } else FreeDNSServiceRegistration(x); } }