Lines Matching refs:resrec

144                                         (rr)->resrec.RecordType & kDNSRecordTypeUniqueMask && \
145 ((rr)->resrec.rrtype == kDNSType_A || (rr)->resrec.rrtype == kDNSType_AAAA || \
146 (rr)->resrec.rrtype == kDNSType_CNAME || \
147 (rr)->resrec.rrtype == kDNSType_PTR))
298 const mDNSu32 slot = AuthHashSlot(rr->resrec.name);
299 ag = AuthGroupForRecord(r, slot, &rr->resrec);
300 if (!ag) ag = GetAuthGroup(r, slot, &rr->resrec); // If we don't have a AuthGroup for this name, make one now
315 const mDNSu32 slot = AuthHashSlot(rr->resrec.name);
317 a = AuthGroupForRecord(r, slot, &rr->resrec);
433 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
559 followcname = FollowCNAME(q, &rr->resrec, AddRecord);
562 if (!(rr->resrec.RecordType & kDNSRecordTypeActiveMask))
565 AddRecord ? "Add" : "Rmv", rr->resrec.RecordType, ARDisplayString(m, rr));
582 q->QuestionCallback(m, q, &rr->resrec, AddRecord);
588 AnswerQuestionByFollowingCNAME(m, q, &rr->resrec);
593 q->QuestionCallback(m, q, &rr->resrec, AddRecord);
610 answered = ResourceRecordAnswersQuestion(&rr->resrec, q);
645 answered = ResourceRecordAnswersQuestion(&rr->resrec, q);
670 #define ResourceRecordIsValidAnswer(RR) ( ((RR)->resrec.RecordType & kDNSRecordTypeActiveMask) && \
671 ((RR)->Additional1 == mDNSNULL || ((RR)->Additional1->resrec.RecordType & kDNSRecordTypeActiveMask)) && \
672 ((RR)->Additional2 == mDNSNULL || ((RR)->Additional2->resrec.RecordType & kDNSRecordTypeActiveMask)) && \
673 ((RR)->DependentOn == mDNSNULL || ((RR)->DependentOn->resrec.RecordType & kDNSRecordTypeActiveMask)) )
677 ((RR)->resrec.InterfaceID == mDNSInterface_Any || (RR)->resrec.InterfaceID == (INTID)))
711 #define TicksTTL(RR) ((mDNSs32)(RR)->resrec.rroriginalttl * mDNSPlatformOneSecond)
737 #define SameResourceRecordSignature(A,B) (A)->resrec.rrtype == (B)->resrec.rrtype && SameResourceRecordNameClassInterface((A),(B))
743 if (r1->resrec.InterfaceID &&
744 r2->resrec.InterfaceID &&
745 r1->resrec.InterfaceID != r2->resrec.InterfaceID) return(mDNSfalse);
747 r1->resrec.rrclass == r2->resrec.rrclass &&
748 r1->resrec.namehash == r2->resrec.namehash &&
749 SameDomainName(r1->resrec.name, r2->resrec.name));
764 if (pktrr->resrec.InterfaceID &&
765 authrr->resrec.InterfaceID &&
766 pktrr->resrec.InterfaceID != authrr->resrec.InterfaceID) return(mDNSfalse);
767 if (!(authrr->resrec.RecordType & kDNSRecordTypeUniqueMask) || authrr->WakeUp.HMAC.l[0])
768 if (pktrr->resrec.rrtype != authrr->resrec.rrtype) return(mDNSfalse);
770 pktrr->resrec.rrclass == authrr->resrec.rrclass &&
771 pktrr->resrec.namehash == authrr->resrec.namehash &&
772 SameDomainName(pktrr->resrec.name, authrr->resrec.name));
785 if (!IdenticalResourceRecord(&ka->resrec, &rr->resrec)) return(mDNSfalse);
796 return (mDNSBool)(ka->resrec.rroriginalttl >= rr->resrec.rroriginalttl / 2);
801 if (rr->resrec.RecordType == kDNSRecordTypeUnique)
817 else if (rr->AnnounceCount && (ResourceRecordIsValidAnswer(rr) || rr->resrec.RecordType == kDNSRecordTypeDeregistering))
827 rr->ThisAPInterval = rr->AddressProxy.type ? mDNSPlatformOneSecond : DefaultAPIntervalForRecordType(rr->resrec.RecordType);
912 DomainAuthInfo *AuthInfo = GetAuthInfoForName_internal(m, rr->resrec.name);
935 domainname *const target = GetRRDomainNameTarget(&rr->resrec);
938 if (!target) LogInfo("SetTargetToHostName: Don't know how to set the target of rrtype %s", DNSTypeName(rr->resrec.rrtype));
944 else { if (target) target->c[0] = 0; SetNewRData(&rr->resrec, mDNSNULL, 0); return; }
948 debugf("SetTargetToHostName: Target of %##s is already %##s", rr->resrec.name->c, target->c);
953 SetNewRData(&rr->resrec, mDNSNULL, 0); // Update rdlength, rdestimate, rdatahash
958 rr->ProbeCount = DefaultProbeCountForRecordType(rr->resrec.RecordType);
963 if (rr->RequireGoodbye && rr->resrec.RecordType == kDNSRecordTypeShared)
965 rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype));
993 if (rr->resrec.rrtype != kDNSType_SRV)
996 if (rr->resrec.rrtype == kDNSType_PTR)
998 else if (rr->resrec.rrtype == kDNSType_TXT)
1002 if (srvRR->resrec.rrtype != kDNSType_SRV)
1009 ARDisplayString(m, srvRR), srvRR->state, rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype));
1025 if (rr->resrec.RecordType == kDNSRecordTypeDeregistering)
1062 #define RecordLDT(A,B) ((A)->resrec.RecordType == (B)->resrec.RecordType || \
1063 ((A)->resrec.RecordType | (B)->resrec.RecordType) == (kDNSRecordTypeUnique | kDNSRecordTypeVerified) || \
1064 ((A)->resrec.RecordType == kDNSRecordTypeDeregistering || (B)->resrec.RecordType == kDNSRecordTypeDeregistering))
1067 ((A)->resrec.InterfaceID == (B)->resrec.InterfaceID && RecordLDT((A),(B)) && IdenticalResourceRecord(& (A)->resrec, & (B)->resrec))
1074 const mDNSu32 slot = AuthHashSlot(rr->resrec.name);
1076 a = AuthGroupForRecord(r, slot, &rr->resrec);
1085 if ((*rp)->resrec.RecordType == kDNSRecordTypeDeregistering)
1101 const mDNSu32 slot = AuthHashSlot(rr->resrec.name);
1103 a = AuthGroupForRecord(r, slot, &rr->resrec);
1110 if (s1 != s2 && SameResourceRecordSignature((*rp), rr) && !IdenticalSameNameRecord(&(*rp)->resrec, &rr->resrec))
1124 const mDNSu32 slot = AuthHashSlot(rr->resrec.name);
1126 a = AuthGroupForRecord(r, slot, &rr->resrec);
1151 if (!AuthRecord_uDNS(rr) && rr->resrec.rrtype == kDNSType_SRV && rr->AutoTarget == Target_AutoHost)
1193 if (!AuthRecord_uDNS(rr) && rr->resrec.rrtype == kDNSType_SRV && rr->AutoTarget == Target_AutoHost)
1211 if (mDNS_KeepaliveRecord(&rr->resrec))
1225 domainname *target = GetRRDomainNameTarget(&rr->resrec);
1230 if ((mDNSs32)rr->resrec.rroriginalttl <= 0)
1231 { LogMsg("mDNS_Register_internal: TTL %X should be 1 - 0x7FFFFFFF %s", rr->resrec.rroriginalttl, ARDisplayString(m, rr)); return(mStatus_BadParamErr); }
1233 if (!rr->resrec.RecordType)
1241 mDNSInterfaceID previousID = rr->resrec.InterfaceID;
1242 if (rr->resrec.InterfaceID == mDNSInterface_Any || rr->resrec.InterfaceID == mDNSInterface_P2P)
1244 rr->resrec.InterfaceID = mDNSInterface_LocalOnly;
1247 if (rr->resrec.InterfaceID != mDNSInterface_LocalOnly)
1249 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, rr->resrec.InterfaceID);
1250 if (intf && !intf->Advertise) { rr->resrec.InterfaceID = mDNSInterface_LocalOnly; rr->ARType = AuthRecordLocalOnly; }
1252 if (rr->resrec.InterfaceID != previousID)
1261 rr, rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype));
1271 rr, rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype));
1280 rr, rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype));
1286 if (rr->resrec.RecordType == kDNSRecordTypeUnique)
1287 rr->resrec.RecordType = kDNSRecordTypeVerified;
1291 rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype));
1294 if (!(rr->DependentOn->resrec.RecordType & (kDNSRecordTypeUnique | kDNSRecordTypeVerified | kDNSRecordTypeKnownUnique)))
1297 rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype), rr->DependentOn->resrec.RecordType);
1322 rr->ProbeCount = DefaultProbeCountForRecordType(rr->resrec.RecordType);
1359 rr->zone = rr->resrec.name;
1372 //if (rr->resrec.rrtype == kDNSType_SRV) rr->NATinfo.IntPort = rr->resrec.rdata->u.srv.port;
1374 // rr->resrec.interface = already set in mDNS_SetupResourceRecord
1375 // rr->resrec.name->c = MUST be set by client
1376 // rr->resrec.rrtype = already set in mDNS_SetupResourceRecord
1377 // rr->resrec.rrclass = already set in mDNS_SetupResourceRecord
1378 // rr->resrec.rroriginalttl = already set in mDNS_SetupResourceRecord
1379 // rr->resrec.rdata = MUST be set by client, unless record type is CNAME or PTR and rr->HostTarget is set
1384 if (rr->resrec.rrtype == kDNSType_TXT && rr->resrec.rdlength == 0) { rr->resrec.rdlength = 1; rr->resrec.rdata->u.txt.c[0] = 0; }
1395 domainname *tar = GetRRDomainNameTarget(&rr->resrec);
1403 rr->resrec.rdlength = GetRDLength(&rr->resrec, mDNSfalse);
1404 rr->resrec.rdestimate = GetRDLength(&rr->resrec, mDNStrue);
1407 if (!ValidateDomainName(rr->resrec.name))
1410 // Don't do this until *after* we've set rr->resrec.rdlength
1411 if (!ValidateRData(rr->resrec.rrtype, rr->resrec.rdlength, rr->resrec.rdata))
1414 rr->resrec.namehash = DomainNameHashValue(rr->resrec.name);
1415 rr->resrec.rdatahash = target ? DomainNameHashValue(target) : RDataHashValue(&rr->resrec);
1425 if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask)
1429 LogInfo("mDNS_Register_internal: Name conflict %s (%p), InterfaceID %p", ARDisplayString(m, rr), rr, rr->resrec.InterfaceID);
1445 if (rr->resrec.RecordType == kDNSRecordTypeUnique) rr->resrec.RecordType = kDNSRecordTypeVerified;
1467 if (r->resrec.RecordType == kDNSRecordTypeDeregistering) r->AnnounceCount = 0;
1480 if (rr->resrec.RecordType == kDNSRecordTypeUnique && r->resrec.RecordType == kDNSRecordTypeVerified)
1496 if (rr->resrec.RecordType == kDNSRecordTypeUnique) rr->resrec.RecordType = kDNSRecordTypeVerified;
1509 if (!rr->WakeUp.HMAC.l[0] && mDNS_KeepaliveRecord(&rr->resrec))
1514 rr->resrec.RecordType = kDNSRecordTypeKnownUnique;
1528 if (rr->resrec.RecordType != kDNSRecordTypeUnique && rr->resrec.RecordType != kDNSRecordTypeDeregistering)
1553 m->NumFailedProbes, rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype));
1559 RData *OldRData = rr->resrec.rdata;
1560 mDNSu16 OldRDLen = rr->resrec.rdlength;
1561 SetNewRData(&rr->resrec, rr->NewRData, rr->newrdlength); // Update our rdata
1573 mDNSu8 RecordType = rr->resrec.RecordType;
1582 const mDNSu32 slot = AuthHashSlot(rr->resrec.name);
1584 a = AuthGroupForRecord(&m->rrauth, slot, &rr->resrec);
1614 dup, rr, rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype));
1626 dup->resrec.RecordType = rr->resrec.RecordType;
1664 rr->resrec.RecordType = kDNSRecordTypeDeregistering;
1668 rr, rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype));
1699 rr->resrec.RecordType = kDNSRecordTypeDeregistering;
1748 rr->resrec.RecordType = kDNSRecordTypeDeregistering;
1749 rr->resrec.rroriginalttl = 0;
1779 rr->resrec.RecordType = kDNSRecordTypeUnregistered;
1783 rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype));
1850 debugf("AddRecordToResponseList: %##s (%s) already in list", rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype));
1867 if (rr->resrec.rrtype == kDNSType_SRV)
1870 if (RRTypeIsAddressType(rr2->resrec.rrtype) && // For all address records (A/AAAA) ...
1872 rr->resrec.rdatahash == rr2->resrec.namehash && // ... whose name is the name of the SRV target
1873 SameDomainName(&rr->resrec.rdata->u.srv.target, rr2->resrec.name))
1876 else if (RRTypeIsAddressType(rr->resrec.rrtype)) // For A or AAAA, put counterpart as additional
1879 if (RRTypeIsAddressType(rr2->resrec.rrtype) && // For all address records (A/AAAA) ...
1881 rr->resrec.namehash == rr2->resrec.namehash && // ... and have the same name
1882 SameDomainName(rr->resrec.name, rr2->resrec.name))
1885 else if (rr->resrec.rrtype == kDNSType_PTR) // For service PTR, see if we want to add DeviceInfo record
1888 SameDomainLabel(rr->resrec.rdata->u.name.c, m->DeviceInfo.resrec.name->c))
1958 if (rr->resrec.AnonInfo)
1960 AnoninfoSpace += AnonInfoSpace(rr->resrec.AnonInfo);
1961 rr->resrec.AnonInfo->SendNow = mDNSInterfaceMark;
1963 if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask)
1964 rr->resrec.rrclass |= kDNSClass_UniqueRRSet; // Temporarily set the cache flush bit so PutResourceRecord will set it
1967 newptr = PutResourceRecordTTLWithLimit(&m->omsg, responseptr, &m->omsg.h.numAnswers, &rr->resrec, rr->resrec.rroriginalttl,
1970 rr->resrec.rrclass &= ~kDNSClass_UniqueRRSet; // Make sure to clear cache flush bit back to normal state
1987 if (rr->resrec.AnonInfo && rr->resrec.AnonInfo->SendNow == mDNSInterfaceMark)
1989 ResourceRecord *nsec3RR = rr->resrec.AnonInfo->nsec3RR;
2002 rr->resrec.AnonInfo->SendNow = mDNSNULL;
2010 if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask)
2011 rr->resrec.rrclass |= kDNSClass_UniqueRRSet; // Temporarily set the cache flush bit so PutResourceRecord will set it
2012 newptr = PutResourceRecord(&m->omsg, responseptr, &m->omsg.h.numAdditionals, &rr->resrec);
2013 rr->resrec.rrclass &= ~kDNSClass_UniqueRRSet; // Make sure to clear cache flush bit back to normal state
2017 else if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask) rr->ImmedAnswer = mDNSInterfaceMark;
2036 rr->resrec.RecordType = kDNSRecordTypeShared;
2057 if (!AuthRecord_uDNS(rr) && rr->resrec.RecordType == kDNSRecordTypeDeregistering)
2138 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, rr->resrec.InterfaceID);
2139 if (!intf) { LogMsg("SendARP: No interface with InterfaceID %p found %s", rr->resrec.InterfaceID, ARDisplayString(m,rr)); return; }
2170 mDNSPlatformSendRawPacket(m->omsg.data, ptr, rr->resrec.InterfaceID);
2209 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, rr->resrec.InterfaceID);
2210 if (!intf) { LogMsg("SendNDP: No interface with InterfaceID %p found %s", rr->resrec.InterfaceID, ARDisplayString(m,rr)); return; }
2295 mDNSPlatformSendRawPacket(m->omsg.data, ptr, rr->resrec.InterfaceID);
2411 if (rr->resrec.RecordType == kDNSRecordTypeDeregistering)
2420 SendWakeup(m, rr->resrec.InterfaceID, &rr->WakeUp.IMAC, &rr->WakeUp.password);
2422 if ((r2->resrec.RecordType == kDNSRecordTypeDeregistering) && r2->AnnounceCount && (r2->resrec.InterfaceID == rr->resrec.InterfaceID) &&
2476 if ((rr->resrec.InterfaceID && rr->ImmedAnswer) ||
2489 if (rr->ImmedAnswer && rr->resrec.rrtype == kDNSType_SRV)
2491 if (RRTypeIsAddressType(r2->resrec.rrtype) && // For all address records (A/AAAA) ...
2494 rr->resrec.rdatahash == r2->resrec.namehash && // ... whose name is the name of the SRV target
2495 SameDomainName(&rr->resrec.rdata->u.srv.target, r2->resrec.name) &&
2496 (rr->ImmedAnswer == mDNSInterfaceMark || rr->ImmedAnswer == r2->resrec.InterfaceID))
2497 r2->ImmedAdditional = r2->resrec.InterfaceID; // ... then mark this address record for sending too
2501 if (rr->ImmedAnswer && rr->resrec.RecordType == kDNSRecordTypeShared && rr->resrec.rrtype == kDNSType_PTR)
2502 if (ResourceRecordIsValidAnswer(&m->DeviceInfo) && SameDomainLabel(rr->resrec.rdata->u.name.c, m->DeviceInfo.resrec.name->c))
2516 if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask)
2540 rr->SendRNow = !intf ? mDNSNULL : (rr->resrec.InterfaceID) ? rr->resrec.InterfaceID : intf->InterfaceID;
2548 if (rr->resrec.RecordType != kDNSRecordTypeDeregistering)
2551 debugf("Announcing %##s (%s) %d", rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype), rr->AnnounceCount);
2591 ((rr->resrec.InterfaceID == mDNSInterface_Any) && !mDNSPlatformValidRecordForInterface(rr, intf)))
2598 RData *OldRData = rr->resrec.rdata;
2599 mDNSu16 oldrdlength = rr->resrec.rdlength;
2601 (rr->resrec.RecordType != kDNSRecordTypeDeregistering && !ShouldSendGoodbyesBeforeSleep(m, intf, rr));
2606 if (ResourceRecordIsValidAnswer(rr) && rr->resrec.RecordType == kDNSRecordTypeShared && rr->RequireGoodbye)
2608 newptr = PutRR_OS_TTL(responseptr, &m->omsg.h.numAnswers, &rr->resrec, 0);
2612 SetNewRData(&rr->resrec, rr->NewRData, rr->newrdlength);
2615 if (rr->resrec.AnonInfo)
2617 int tmp = AnonInfoSpace(rr->resrec.AnonInfo);
2626 if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask)
2627 rr->resrec.rrclass |= kDNSClass_UniqueRRSet; // Temporarily set the cache flush bit so PutResourceRecord will set it
2628 newptr = PutRR_OS_TTL(responseptr, &m->omsg.h.numAnswers, &rr->resrec, active ? rr->resrec.rroriginalttl : 0);
2629 rr->resrec.rrclass &= ~kDNSClass_UniqueRRSet; // Make sure to clear cache flush bit back to normal state
2634 if (rr->resrec.RecordType == kDNSRecordTypeDeregistering) numDereg++;
2639 SetNewRData(&rr->resrec, OldRData, oldrdlength);
2643 if (!pktcount && active && (rr->resrec.RecordType & kDNSRecordTypeActiveUniqueMask) && !rr->SendNSECNow)
2648 if (rr->resrec.AnonInfo)
2652 rr->resrec.AnonInfo->SendNow = intf->InterfaceID;
2656 if (rr->ImmedAnswer == mDNSInterfaceMark && rr->resrec.InterfaceID == mDNSInterface_Any)
2670 if (rr->resrec.AnonInfo && rr->resrec.AnonInfo->SendNow == intf->InterfaceID)
2672 ResourceRecord *nsec3RR = rr->resrec.AnonInfo->nsec3RR;
2686 rr->resrec.AnonInfo->SendNow = mDNSNULL;
2701 if (!SendAdditional && (rr->resrec.RecordType & kDNSRecordTypeUniqueMask))
2715 if (!pktcount && (rr->resrec.RecordType & kDNSRecordTypeActiveUniqueMask) && !rr->SendNSECNow)
2718 if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask)
2719 rr->resrec.rrclass |= kDNSClass_UniqueRRSet; // Temporarily set the cache flush bit so PutResourceRecord will set it
2720 newptr = PutRR_OS(newptr, &m->omsg.h.numAdditionals, &rr->resrec);
2721 rr->resrec.rrclass &= ~kDNSClass_UniqueRRSet; // Make sure to clear cache flush bit back to normal state
2747 mDNS_SetupResourceRecord(&nsec, mDNSNULL, mDNSInterface_Any, kDNSType_NSEC, rr->resrec.rroriginalttl, kDNSRecordTypeUnique, AuthRecordAny, mDNSNULL, mDNSNULL);
2748 nsec.resrec.rrclass |= kDNSClass_UniqueRRSet;
2749 AssignDomainName(&nsec.namestorage, rr->resrec.name);
2751 len = DomainNameLength(rr->resrec.name);
2753 nsec.resrec.rdlength = len + 2 + NSEC_MCAST_WINDOW_SIZE;
2754 if (nsec.resrec.rdlength <= StandardAuthRDSize)
2756 mDNSPlatformMemZero(ptr, nsec.resrec.rdlength);
2757 AssignDomainName((domainname *)ptr, rr->resrec.name);
2764 if (r2->resrec.rrtype >= kDNSQType_ANY) { LogMsg("SendResponses: Can't create NSEC for record %s", ARDisplayString(m, r2)); break; }
2765 else ptr[r2->resrec.rrtype >> 3] |= 128 >> (r2->resrec.rrtype & 7);
2770 newptr = PutRR_OS(responseptr, &m->omsg.h.numAdditionals, &nsec.resrec);
2774 else LogMsg("SendResponses: not enough space (%d) in authrecord for nsec", nsec.resrec.rdlength);
2796 opt.resrec.rrclass = NormalMaxDNSMessageData;
2797 opt.resrec.rdlength = sizeof(rdataOPT);
2798 opt.resrec.rdestimate = sizeof(rdataOPT);
2801 opt.resrec.rdlength += sizeof(rdataOPT); // Two options in this OPT record
2802 opt.resrec.rdestimate += sizeof(rdataOPT);
2803 SetupOwnerOpt(m, intf, &opt.resrec.rdata->u.opt[0]);
2804 SetupTracerOpt(m, &opt.resrec.rdata->u.opt[1]);
2808 SetupOwnerOpt(m, intf, &opt.resrec.rdata->u.opt[0]);
2812 SetupTracerOpt(m, &opt.resrec.rdata->u.opt[0]);
2814 newptr = PutResourceRecord(&m->omsg, responseptr, &m->omsg.h.numAdditionals, &opt.resrec);
2872 (uint32_t)rr->SendRNow, (uint32_t)rr->resrec.InterfaceID, rr->resrec.RecordType, ARDisplayString(m, rr));
2876 if (rr->ImmedAnswer || rr->resrec.RecordType == kDNSRecordTypeDeregistering)
2880 if (rr->resrec.RecordType == kDNSRecordTypeDeregistering && rr->AnnounceCount == 0)
2912 ((RR)->resrec.rroriginalttl > 10 ) ? (mDNSPlatformOneSecond) : \
2913 ((RR)->resrec.rroriginalttl > 0 ) ? (mDNSPlatformOneSecond/10) : 0)
2927 // rr->resrec.rroriginalttl
2943 ScheduleNextCacheCheckTime(m, HashSlot(rr->resrec.name), NextCacheCheckEvent(rr));
2967 rr->resrec.rroriginalttl = (interval * 4 + mDNSPlatformOneSecond - 1) / mDNSPlatformOneSecond;
3000 if (rr->resrec.InterfaceID == q->SendQNow && // received on this interface
3001 !(rr->resrec.RecordType & kDNSRecordTypeUniqueMask) && // which is a shared (i.e. not unique) record type
3003 rr->resrec.rdlength <= SmallRecordLimit && // which is small enough to sensibly fit in the packet
3004 SameNameRecordAnswersQuestion(&rr->resrec, q) && // which answers our question
3017 forecast += 12 + rr->resrec.rdestimate;
3038 if (rr->resrec.InterfaceID == q->SendQNow && // received on this interface
3040 SameNameRecordAnswersQuestion(&rr->resrec, q)) // which answers our question
3071 domainname *crtarget = GetRRDomainNameTarget(&cr->resrec);
3072 if (crtarget && cr->resrec.rdatahash == namehash && SameDomainName(crtarget, name))
3077 ReconfirmAntecedents(m, cr->resrec.name, cr->resrec.namehash, depth+1);
3090 while (cr && !RRTypeIsAddressType(cr->resrec.rrtype)) cr=cr->next;
3102 if (cr->resrec.rrtype == kDNSType_PTR && cr->resrec.rdlength >= 6) // If record is PTR type, with long enough name,
3104 if (SameNameRecordAnswersQuestion(&cr->resrec, q)) // and answers our browse query,
3105 if (!IdenticalSameNameRecord(&cr->resrec, &m->SPSRecords.RR_PTR.resrec)) // and is not our own advertised service...
3107 mDNSu32 metric = SPSMetric(cr->resrec.rdata->u.name.c);
3127 metric1 = SPSMetric((*sps1)->resrec.rdata->u.name.c);
3128 metric2 = SPSMetric((*sps2)->resrec.rdata->u.name.c);
3129 if (!SPSFeatures((*sps1)->resrec.rdata->u.name.c) && SPSFeatures((*sps2)->resrec.rdata->u.name.c) && (metric2 >= metric1))
3274 if (rr->resrec.rdlength <= SmallRecordLimit && // which is small enough to sensibly fit in the packet
3275 SameNameRecordAnswersQuestion(&rr->resrec, q) && // which answers our question
3280 forecast += 12 + rr->resrec.rdestimate;
3326 ExpireDupSuppressInfoOnInterface(q->DupSuppress, m->timenow - TicksTTL(cr)/20, cr->resrec.InterfaceID);
3341 q->SendQNow = cr->resrec.InterfaceID;
3343 else if (q->SendQNow != cr->resrec.InterfaceID)
3503 if (!AuthRecord_uDNS(ar) && ar->resrec.RecordType == kDNSRecordTypeUnique) // For all records that are still probing...
3520 LogSPS("SendQueries ARP Probe %d %s %s", ar->ProbeCount, InterfaceNameForID(m, ar->resrec.InterfaceID), ARDisplayString(m,ar));
3525 LogSPS("SendQueries NDP Probe %d %s %s", ar->ProbeCount, InterfaceNameForID(m, ar->resrec.InterfaceID), ARDisplayString(m,ar));
3533 ar->SendRNow = (!intf || ar->WakeUp.HMAC.l[0]) ? mDNSNULL : ar->resrec.InterfaceID ? ar->resrec.InterfaceID : intf->InterfaceID;
3547 if (r2->resrec.RecordType == kDNSRecordTypeUnique && RecordIsLocalDuplicate(r2, ar))
3565 ar->resrec.RecordType = kDNSRecordTypeVerified;
3577 if (ar->resrec.RecordType == kDNSRecordTypeUnique && ar->ProbeCount == 0 && !ar->Acknowledged)
3657 mDNSu32 forecast = answerforecast + 12 + ar->resrec.rdestimate;
3658 mDNSu8 *newptr = putQuestion(&m->omsg, queryptr, limit - forecast, ar->resrec.name, kDNSQType_ANY, (mDNSu16)(ar->resrec.rrclass | ucbit));
3663 ar->SendRNow = (ar->resrec.InterfaceID) ? mDNSNULL : GetNextActiveInterfaceID(intf);
3666 ar->resrec.name->c, DNSTypeName(ar->resrec.rrtype), ar->ProbeCount);
3676 mDNSu8 *newptr = PutResourceRecordTTLWithLimit(&m->omsg, queryptr, &m->omsg.h.numAnswers, &ka->resrec, ka->resrec.rroriginalttl - SecsSinceRcvd,
3681 ka->resrec.name->c, DNSTypeName(ka->resrec.rrtype), queryptr - m->omsg.data, newptr - m->omsg.data);
3701 mDNSu8 *newptr = PutResourceRecord(&m->omsg, queryptr, &m->omsg.h.numAuthorities, &ar->resrec);
3733 opt.resrec.rrclass = NormalMaxDNSMessageData;
3734 opt.resrec.rdlength = sizeof(rdataOPT);
3735 opt.resrec.rdestimate = sizeof(rdataOPT);
3738 opt.resrec.rdlength += sizeof(rdataOPT); // Two options in this OPT record
3739 opt.resrec.rdestimate += sizeof(rdataOPT);
3740 SetupOwnerOpt(m, intf, &opt.resrec.rdata->u.opt[0]);
3741 SetupTracerOpt(m, &opt.resrec.rdata->u.opt[1]);
3745 SetupOwnerOpt(m, intf, &opt.resrec.rdata->u.opt[0]);
3749 SetupTracerOpt(m, &opt.resrec.rdata->u.opt[0]);
3753 &opt.resrec, opt.resrec.rroriginalttl, m->omsg.data + AbsoluteMaxDNSMessageData);
3801 (uint32_t)ar->SendRNow, (uint32_t)ar->resrec.InterfaceID, ARDisplayString(m, ar));
3906 mDNSBool followcname = FollowCNAME(q, &rr->resrec, AddRecord);
3909 q->CurrentAnswers, AddRecord ? "Add" : "Rmv", rr->resrec.rroriginalttl, CRDisplayString(m, rr));
3924 (rr->resrec.RecordType == kDNSRecordTypePacketNegative && (AddRecord == QC_add))))
3947 if (!q->TimeoutQuestion || rr->resrec.RecordType != kDNSRecordTypePacketNegative || (m->timenow - q->StopTime < 0))
3998 (AddRecord == QC_add && (q->ExpectUnique || (rr->resrec.RecordType & kDNSRecordTypePacketUniqueMask))))
4008 if (rr->resrec.RecordType == kDNSRecordTypePacketNegative || (q->qtype != kDNSType_NSEC && RRAssertsNonexistence(&rr->resrec, q->qtype)))
4015 if (q->qtype != kDNSType_NSEC && RRAssertsNonexistence(&rr->resrec, q->qtype))
4018 MakeNegativeCacheRecord(m, &neg, &q->qname, q->qnamehash, q->qtype, q->qclass, 1, rr->resrec.InterfaceID, q->qDNSServer);
4019 q->QuestionCallback(m, q, &neg.resrec, AddRecord);
4022 q->QuestionCallback(m, q, &rr->resrec, AddRecord);
4057 AnswerQuestionByFollowingCNAME(m, q, &rr->resrec);
4070 if (ResourceRecordAnswersQuestion(&rr->resrec, q))
4116 if (purge && !rr->resrec.InterfaceID && !rr->CRActiveQuestion && rr->resrec.rroriginalttl)
4118 mDNSu32 uTTL = RRUnadjustedTTL(rr->resrec.rroriginalttl);
4122 CRDisplayString(m, rr), rr->resrec.rroriginalttl, uTTL, (m->timenow - rr->TimeRcvd)/mDNSPlatformOneSecond);
4155 if (ResourceRecordAnswersQuestion(&rr->resrec, q))
4177 verbosedebugf("CacheRecordAdd %p %##s (%s) %lu %#a:%d question %p", rr, rr->resrec.name->c,
4178 DNSTypeName(rr->resrec.rrtype), rr->resrec.rroriginalttl, rr->resrec.rDNSServer ?
4179 &rr->resrec.rDNSServer->addr : mDNSNULL, mDNSVal16(rr->resrec.rDNSServer ?
4180 rr->resrec.rDNSServer->port : zp), q);
4184 if (rr->resrec.rdlength > SmallRecordLimit) q->LargeAnswers++;
4185 if (rr->resrec.RecordType & kDNSRecordTypePacketUniqueMask) q->UniqueAnswers++;
4192 rr->resrec.rroriginalttl = 0;
4206 if (ResourceRecordAnswersQuestion(&rr->resrec, q))
4229 LogMsg("No cache space: Delivering non-cached result for %##s", m->rec.r.resrec.name->c);
4238 if (ResourceRecordAnswersQuestion(&rr->resrec, q))
4271 if (!QuerySuppressed(q) && ResourceRecordAnswersQuestion(&rr->resrec, q))
4286 if (rr->resrec.rdlength > SmallRecordLimit) q->LargeAnswers--;
4287 if (rr->resrec.RecordType & kDNSRecordTypePacketUniqueMask) q->UniqueAnswers--;
4300 if (rr->resrec.rdata->MaxRDLength) // Never generate "remove" events for negative results
4348 if (rr->resrec.rdata && rr->resrec.rdata != (RData*)&rr->smallrdatastorage)
4350 mDNSPlatformMemFree(rr->resrec.rdata);
4351 rr->resrec.rdata = mDNSNULL;
4355 if (rr->resrec.name)
4357 debugf("ReleaseAdditionalCacheRecords: freeing cached record %##s (%s)", rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype));
4358 mDNSPlatformMemFree((void *)rr->resrec.name);
4359 rr->resrec.name = mDNSNULL;
4362 if (!rr->resrec.InterfaceID)
4364 m->rrcache_totalused_unicast -= rr->resrec.rdlength;
4365 if (DNSSECRecordType(rr->resrec.rrtype))
4366 BumpDNSSECStats(m, kStatsActionDecrement, kStatsTypeMemoryUsage, rr->resrec.rdlength);
4375 const mDNSu32 slot = HashSlot(r->resrec.name);
4378 if (r->resrec.rdata && r->resrec.rdata != (RData*)&r->smallrdatastorage) mDNSPlatformMemFree(r->resrec.rdata);
4379 r->resrec.rdata = mDNSNULL;
4381 cg = CacheGroupForRecord(m, slot, &r->resrec);
4386 LogInfo("ReleaseCacheRecord: ERROR!! cg NULL for %##s (%s)", r->resrec.name->c, DNSTypeName(r->resrec.rrtype));
4391 if (r->resrec.name && cg && r->resrec.name != cg->name)
4393 debugf("ReleaseCacheRecord: freeing %##s (%s)", r->resrec.name->c, DNSTypeName(r->resrec.rrtype));
4394 mDNSPlatformMemFree((void *)r->resrec.name);
4396 r->resrec.name = mDNSNULL;
4398 if (r->resrec.AnonInfo)
4400 debugf("ReleaseCacheRecord: freeing AnonInfo for %##s (%s)", r->resrec.name->c, DNSTypeName(r->resrec.rrtype));
4401 FreeAnonInfo((void *)r->resrec.AnonInfo);
4403 r->resrec.AnonInfo = mDNSNULL;
4405 if (!r->resrec.InterfaceID)
4407 m->rrcache_totalused_unicast -= r->resrec.rdlength;
4408 if (DNSSECRecordType(r->resrec.rrtype))
4409 BumpDNSSECStats(m, kStatsActionDecrement, kStatsTypeMemoryUsage, r->resrec.rdlength);
4437 m->timenow - rr->TimeRcvd, rr->resrec.rroriginalttl, rr->CRActiveQuestion, CRDisplayString(m, rr));
4650 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
4678 if (SameNameRecordAnswersQuestion(&rr->resrec, q))
4682 if (rr->resrec.rroriginalttl <= SecsSinceRcvd)
4684 LogMsg("AnswerNewQuestion: How is rr->resrec.rroriginalttl %lu <= SecsSinceRcvd %lu for %s %d %d",
4685 rr->resrec.rroriginalttl, SecsSinceRcvd, CRDisplayString(m, rr), m->timenow, rr->TimeRcvd);
4691 if ((rr->resrec.RecordType & kDNSRecordTypePacketUniqueMask) || (q->ExpectUnique))
4694 if (rr->resrec.rdlength > SmallRecordLimit) q->LargeAnswers++;
4695 if (rr->resrec.RecordType & kDNSRecordTypePacketUniqueMask) q->UniqueAnswers++;
4700 else if (RRTypeIsAddressType(rr->resrec.rrtype) && RRTypeIsAddressType(q->qtype))
4794 if (ResourceRecordAnswersQuestion(&rr->resrec, q))
4896 r->resrec.rdata = (RData*)&r->smallrdatastorage; // By default, assume we're usually going to be using local storage
4899 r->resrec.rdata = (RData*)mDNSPlatformMemAllocate(sizeofRDataHeader + RDLength);
4900 if (r->resrec.rdata) r->resrec.rdata->MaxRDLength = r->resrec.rdlength = RDLength;
4946 rr->resrec.rroriginalttl = 0;
4980 if (rr->resrec.RecordType != kDNSRecordTypeDeregistering && rr->WakeUp.HMAC.l[0])
4993 SetSPSProxyListChanged(rr->resrec.InterfaceID);
5010 if (rr->AnsweredLocalQ && rr->resrec.RecordType == kDNSRecordTypeDeregistering)
5013 rr->resrec.RecordType = kDNSRecordTypeShared;
5017 rr->resrec.RecordType = kDNSRecordTypeDeregistering;
5585 if (rr->resrec.RecordType == kDNSRecordTypeVerified && !rr->DependentOn) rr->resrec.RecordType = kDNSRecordTypeUnique;
5586 rr->ProbeCount = DefaultProbeCountForRecordType(rr->resrec.RecordType);
5594 if (mDNS_KeepaliveRecord(&rr->resrec))
5663 mDNSu32 metric = SPSMetric(cr->resrec.rdata->u.name.c);
5705 (!rr->resrec.InterfaceID || rr->resrec.InterfaceID == intf->InterfaceID))
5726 if (!rr->WakeUp.HMAC.l[0] && mDNS_KeepaliveRecord(&rr->resrec))
5829 if ( rr->resrec.rdata != &rr->rdatastorage)
5831 mDNSPlatformMemFree(rr->resrec.rdata);
5834 SetNewRData(&rr->resrec, newrd, newrdlength); // Update our rdata
5872 if (!(rr->AuthFlags & AuthFlagsWakeOnly) && rr->resrec.RecordType > kDNSRecordTypeDeregistering)
5874 if (rr->resrec.InterfaceID == intf->InterfaceID || (!rr->resrec.InterfaceID && (rr->ForceMCast || IsLocalDomain(rr->resrec.name))))
5912 if (mDNS_KeepaliveRecord(&rr->resrec) && (UpdateKeepaliveRData(m, rr, intf, mDNSfalse, mDNSNULL) != mStatus_NoError))
5922 if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask)
5923 rr->resrec.rrclass |= kDNSClass_UniqueRRSet; // Temporarily set the 'unique' bit so PutResourceRecord will set it
5924 newptr = PutResourceRecordTTLWithLimit(&m->omsg, p, &m->omsg.h.mDNS_numUpdates, &rr->resrec, rr->resrec.rroriginalttl, limit);
5925 rr->resrec.rrclass &= ~kDNSClass_UniqueRRSet; // Make sure to clear 'unique' bit back to normal state
5948 opt.resrec.rrclass = NormalMaxDNSMessageData;
5949 opt.resrec.rdlength = sizeof(rdataOPT) * 2; // Two options in this OPT record
5950 opt.resrec.rdestimate = sizeof(rdataOPT) * 2;
5951 opt.resrec.rdata->u.opt[0].opt = kDNSOpt_Lease;
5952 opt.resrec.rdata->u.opt[0].optlen = DNSOpt_LeaseData_Space - 4;
5953 opt.resrec.rdata->u.opt[0].u.updatelease = DEFAULT_UPDATE_LEASE;
5955 SetupOwnerOpt(m, intf, &opt.resrec.rdata->u.opt[1]); // use our own interface information
5958 opt.resrec.rdata->u.opt[1].u.owner = *owner;
5959 opt.resrec.rdata->u.opt[1].opt = kDNSOpt_Owner;
5960 opt.resrec.rdata->u.opt[1].optlen = DNSOpt_Owner_Space(&owner->HMAC, &owner->IMAC) - 4;
5963 p = PutResourceRecordTTLWithLimit(&m->omsg, p, &m->omsg.h.numAdditionals, &opt.resrec, opt.resrec.rroriginalttl, m->omsg.data + AbsoluteMaxDNSMessageData);
6011 mDNS_SetupResourceRecord(newRR, mDNSNULL, InterfaceID, rr->resrec.rrtype,
6012 rr->resrec.rroriginalttl, rr->resrec.RecordType,
6016 newRR->resrec.rdlength = DomainNameLength(rr->resrec.name);
6017 newRR->resrec.namehash = DomainNameHashValue(newRR->resrec.name);
6018 newRR->resrec.rrclass = rr->resrec.rrclass;
6020 if (rr->resrec.rrtype == kDNSType_A)
6022 newRR->resrec.rdata->u.ipv4 = rr->resrec.rdata->u.ipv4;
6024 else if (rr->resrec.rrtype == kDNSType_AAAA)
6026 newRR->resrec.rdata->u.ipv6 = rr->resrec.rdata->u.ipv6;
6028 SetNewRData(&newRR->resrec, mDNSNULL, 0);
6064 if (ar->resrec.RecordType == kDNSRecordTypeShared && ar->RequireGoodbye)
6071 if (!ar->resrec.InterfaceID)
6080 mDNSu32 scopeid = mDNSPlatformInterfaceIndexfromInterfaceID(m, ar->resrec.InterfaceID, mDNStrue);
6094 if (ar->resrec.rrtype == kDNSType_A || ar->resrec.rrtype == kDNSType_AAAA)
6096 mDNSCoreStoreProxyRR(m, ar->resrec.InterfaceID, ar);
6138 (!rr->resrec.InterfaceID || rr->resrec.InterfaceID == intf->InterfaceID))
6209 if (mDNS_KeepaliveRecord(&rr->resrec) || (rr->resrec.rrtype == kDNSType_SRV && !AuthRecord_uDNS(rr) && !mDNSSameIPPort(rr->resrec.rdata->u.srv.port, DiscardPort)))
6230 rr->resrec.RecordType == kDNSRecordTypeShared && rr->RequireGoodbye) ||
6231 (serviceType == AC_ONLY_SERVICE && !mDNS_KeepaliveRecord(&rr->resrec)))
6281 if (rr->resrec.RecordType == kDNSRecordTypeShared && rr->RequireGoodbye)
6336 if ((mDNS_KeepaliveRecord(&rr->resrec)) && (rr->resrec.RecordType != kDNSRecordTypeDeregistering))
6467 LogSPS("BeginSleepProcessing: %-6s Found Sleep Proxy Server %d TTL %d %s", intf->ifname, i, sps[i]->resrec.rroriginalttl, CRDisplayString(m, sps[i]));
6468 mDNS_SetupQuestion(&intf->NetWakeResolve[i], intf->InterfaceID, &sps[i]->resrec.rdata->u.name, kDNSType_SRV, NetWakeResolve, intf);
6640 if (!cr->resrec.InterfaceID)
6644 mDNSu32 uTTL = RRUnadjustedTTL(cr->resrec.rroriginalttl);
6913 mDNSu8 *p = PutResourceRecordTTL(response, responseptr, &response->h.numAnswers, &rr->resrec,
6914 maxttl < rr->resrec.rroriginalttl ? maxttl : rr->resrec.rroriginalttl);
6925 mDNSu8 *p = PutResourceRecordTTL(response, responseptr, &response->h.numAdditionals, &rr->resrec,
6926 maxttl < rr->resrec.rroriginalttl ? maxttl : rr->resrec.rroriginalttl);
6946 ourend = putRData(mDNSNULL, ourdata, ourdata + sizeof(ourdata), &our->resrec);
6947 pktend = putRData(mDNSNULL, pktdata, pktdata + sizeof(pktdata), &pkt->resrec);
6974 if (IdenticalResourceRecord(&r1->resrec, &pktrr->resrec))
6983 if (IdenticalResourceRecord(&r1->resrec, &pktrr->resrec))
7002 if (IdenticalResourceRecord(&rr->resrec, &pktrr->resrec))
7023 if (!(our->resrec.RecordType & kDNSRecordTypeUniqueMask)) return(mDNSfalse);
7058 if (m->rec.r.resrec.RecordType != kDNSRecordTypePacketNegative && ResourceRecordAnswersQuestion(&m->rec.r.resrec, q))
7063 int result = (int)our->resrec.rrclass - (int)m->rec.r.resrec.rrclass;
7064 if (!result) result = (int)our->resrec.rrtype - (int)m->rec.r.resrec.rrtype;
7069 LogMsg("ResolveSimultaneousProbe: %p Pkt Record: %08lX %s", q->InterfaceID, m->rec.r.resrec.rdatahash, CRDisplayString(m, &m->rec.r));
7070 LogMsg("ResolveSimultaneousProbe: %p Our Record %d %s %08lX %s", our->resrec.InterfaceID, our->ProbeCount, msg, our->resrec.rdatahash, ARDisplayString(m, our));
7087 LogMsg("ResolveSimultaneousProbe: %p Pkt Record: %08lX %s", q->InterfaceID, m->rec.r.resrec.rdatahash, CRDisplayString(m, &m->rec.r));
7088 LogMsg("ResolveSimultaneousProbe: %p Our Record %d ign: %08lX %s", our->resrec.InterfaceID, our->ProbeCount, our->resrec.rdatahash, ARDisplayString(m, our));
7092 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
7095 LogInfo("ResolveSimultaneousProbe: %##s (%s): No Update Record found", our->resrec.name->c, DNSTypeName(our->resrec.rrtype));
7097 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
7111 mDNSu16 id2 = (rr->resrec.rDNSServer ? rr->resrec.rDNSServer->resGroupID : 0);
7114 else match = (pktrr->InterfaceID == rr->resrec.InterfaceID);
7116 if (match && IdenticalSameNameRecord(pktrr, &rr->resrec)) break;
7125 SetSPSProxyListChanged(m->rec.r.resrec.InterfaceID);
7139 if (InterfaceID == rr->resrec.InterfaceID && mDNSSameEthAddress(&owner->HMAC, &rr->WakeUp.HMAC))
7141 if (mDNS_KeepaliveRecord(&m->rec.r.resrec))
7165 if (m->rec.r.resrec.InterfaceID == rr->resrec.InterfaceID && mDNSSameEthAddress(&owner->HMAC, &rr->WakeUp.HMAC))
7166 if (IdenticalResourceRecord(&rr->resrec, &m->rec.r.resrec))
7188 if (m->rec.r.resrec.InterfaceID == rr->resrec.InterfaceID && mDNSSameEthAddress(&owner->HMAC, &rr->WakeUp.HMAC))
7203 m->ProxyRecords, rr->AnnounceCount, rr->resrec.RecordType,
7205 if (rr->resrec.RecordType == kDNSRecordTypeDeregistering) rr->resrec.RecordType = kDNSRecordTypeShared;
7209 SetSPSProxyListChanged(m->rec.r.resrec.InterfaceID);
7249 if (ptr && m->rec.r.resrec.RecordType != kDNSRecordTypePacketNegative && m->rec.r.resrec.rrtype == kDNSType_OPT)
7252 const rdataOPT *const e = (const rdataOPT *)&m->rec.r.resrec.rdata->u.data[m->rec.r.resrec.rdlength];
7255 for (opt = &m->rec.r.resrec.rdata->u.opt[0]; opt < e; opt++)
7262 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
7318 if (AnyTypeRecordAnswersQuestion(&rr->resrec, &pktq) && (QueryWasMulticast || QueryWasLocalUnicast || rr->AllowRemoteQuery))
7321 if (RRTypeAnswersQuestionType(&rr->resrec, pktq.qtype))
7323 if (rr->resrec.RecordType == kDNSRecordTypeUnique)
7332 if (pktq.AnonInfo && rr->resrec.AnonInfo)
7333 SetAnonData(&pktq, &rr->resrec, mDNStrue);
7357 else if ((rr->resrec.RecordType & kDNSRecordTypeActiveUniqueMask) && ResourceRecordIsValidAnswer(rr))
7401 if (SameNameRecordAnswersQuestion(&cr->resrec, &pktq) && cr->resrec.rdlength <= SmallRecordLimit)
7469 if (m->rec.r.resrec.RecordType != kDNSRecordTypePacketNegative)
7508 ourcacherr = FindIdenticalRecordInCache(m, &m->rec.r.resrec);
7527 if (cr->resrec.InterfaceID == InterfaceID && IdenticalResourceRecord(&m->rec.r.resrec, &cr->resrec))
7540 if (ResourceRecordAnswersQuestion(&m->rec.r.resrec, q))
7546 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
7633 else if (rr->resrec.RecordType == kDNSRecordTypeShared) delayresponse = mDNSPlatformOneSecond; // Divided by 50 = 20ms
7684 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
7874 if (!q->DuplicateOf && ResourceRecordAnswersUnicastResponse(&rr->resrec, q))
7931 mDNSu16 RDLength = GetRDLengthMem(&m->rec.r.resrec);
7933 if (!m->rec.r.resrec.InterfaceID) debugf("CreateNewCacheEntry %s", CRDisplayString(m, &m->rec.r));
7938 if (!cg) cg = GetCacheGroup(m, slot, &m->rec.r.resrec); // If we don't have a CacheGroup for this name, make one now
7943 RData *saveptr = rr->resrec.rdata; // Save the rr->resrec.rdata pointer
7945 rr->resrec.rdata = saveptr; // Restore rr->resrec.rdata after the structure assignment
7946 rr->resrec.name = cg->name; // And set rr->resrec.name to point into our CacheGroup header
7952 if (m->rec.r.resrec.AnonInfo)
7954 rr->resrec.AnonInfo = m->rec.r.resrec.AnonInfo;
7955 m->rec.r.resrec.AnonInfo = mDNSNULL;
7960 if (rr->resrec.rdata == (RData*)&rr->smallrdatastorage && RDLength > InlineCacheRDSize)
7961 LogMsg("rr->resrec.rdata == &rr->rdatastorage but length > InlineCacheRDSize %##s", m->rec.r.resrec.name->c);
7962 else if (rr->resrec.rdata != (RData*)&rr->smallrdatastorage && RDLength <= InlineCacheRDSize)
7963 LogMsg("rr->resrec.rdata != &rr->rdatastorage but length <= InlineCacheRDSize %##s", m->rec.r.resrec.name->c);
7965 mDNSPlatformMemCopy(rr->resrec.rdata, m->rec.r.resrec.rdata, sizeofRDataHeader + RDLength);
7974 if (!rr->resrec.InterfaceID)
7976 m->rrcache_totalused_unicast += rr->resrec.rdlength;
7977 if (DNSSECRecordType(rr->resrec.rrtype))
7978 BumpDNSSECStats(m, kStatsActionIncrement, kStatsTypeMemoryUsage, rr->resrec.rdlength);
7995 rr->resrec.name = name;
8011 rr->resrec.rroriginalttl = ttl;
8074 ResourceRecord *rr = &newcr->resrec;
8080 domainname *target = GetRRDomainNameTarget(&cr->resrec);
8087 if (target && cr->resrec.rdatahash == rr->namehash && SameDomainName(target, rr->name))
8241 if (SameNameRecordAnswersQuestion(&rr->resrec, qptr))
8246 if (rr->resrec.RecordType == kDNSRecordTypePacketNegative) neg = rr;
8306 if (ptr && m->rec.r.resrec.RecordType != kDNSRecordTypePacketNegative && m->rec.r.resrec.rrtype == kDNSType_SOA)
8308 const mDNSu32 s = HashSlot(m->rec.r.resrec.name);
8309 CacheGroup *cgSOA = CacheGroupForRecord(m, s, &m->rec.r.resrec);
8310 const rdataSOA *const soa = (const rdataSOA *)m->rec.r.resrec.rdata->u.data;
8315 if (ttl_s > m->rec.r.resrec.rroriginalttl && m->rec.r.resrec.name->c[0])
8316 ttl_s = m->rec.r.resrec.rroriginalttl;
8333 int scount = CountLabels(m->rec.r.resrec.name);
8335 if (SameDomainName(SkipLeadingLabels(&q.qname, qcount - scount), m->rec.r.resrec.name))
8339 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
8350 if (negttl < neg->resrec.rroriginalttl * 2)
8351 negttl = neg->resrec.rroriginalttl * 2;
8361 LogInfo("mDNSCoreReceiveNoUnicastAnswers: Renewing negative TTL from %d to %d %s", neg->resrec.rroriginalttl, negttl, CRDisplayString(m, neg));
8428 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
8453 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
8486 if (IdenticalResourceRecord(&rrPtr->resrec, &rr->resrec))
8509 mDNSu16 id1 = (rr->resrec.rDNSServer ? rr->resrec.rDNSServer->resGroupID : 0);
8510 mDNSu16 id2 = (m->rec.r.resrec.rDNSServer ? m->rec.r.resrec.rDNSServer->resGroupID : 0);
8514 match = (rr->resrec.InterfaceID == InterfaceID);
8516 if (match && IdenticalSameNameRecord(&m->rec.r.resrec, &rr->resrec))
8518 if (m->rec.r.resrec.rdlength > InlineCacheRDSize)
8520 m->rec.r.resrec.rdlength, InterfaceID, CRDisplayString(m, &m->rec.r));
8522 if (m->rec.r.resrec.RecordType & kDNSRecordTypePacketUniqueMask)
8534 if (!(rr->resrec.RecordType & kDNSRecordTypePacketUniqueMask))
8539 if (ResourceRecordAnswersQuestion(&rr->resrec, q))
8542 rr->resrec.RecordType = m->rec.r.resrec.RecordType;
8546 if (!SameRDataBody(&m->rec.r.resrec, &rr->resrec.rdata->u, SameDomainNameCS))
8552 rr->resrec.rroriginalttl = 0;
8562 else if (!IdenticalAnonInfo(m->rec.r.resrec.AnonInfo, rr->resrec.AnonInfo))
8579 rr->resrec.rroriginalttl = 0;
8587 else if (m->rec.r.resrec.rroriginalttl > 0)
8593 if (rr->resrec.rroriginalttl == 0) debugf("uDNS rescuing %s", CRDisplayString(m, rr));
8594 RefreshCacheRecord(m, rr, m->rec.r.resrec.rroriginalttl);
8604 if (response->h.numAnswers && unicastQuestion && unicastQuestion->qtype == rr->resrec.rrtype
8618 if (rr->resrec.RecordType & kDNSRecordTypePacketUniqueMask)
8623 ActiveQuestion(q) && ResourceRecordAnswersQuestion(&rr->resrec, q))
8647 rr->resrec.rroriginalttl = 1;
8680 if (!ptr || m->rec.r.resrec.RecordType == kDNSRecordTypePacketNegative || m->rec.r.resrec.rrtype != kDNSType_NSEC3)
8683 m->rec.r.resrec.RecordType = 0;
8686 slot = HashSlot(m->rec.r.resrec.name);
8687 cg = CacheGroupForRecord(m, slot, &m->rec.r.resrec);
8697 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
8703 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
8704 if (m->rec.r.resrec.AnonInfo)
8706 FreeAnonInfo(m->rec.r.resrec.AnonInfo);
8707 m->rec.r.resrec.AnonInfo = mDNSNULL;
8827 if (SameNameRecordAnswersQuestion(&rr->resrec, qptr))
8830 rr->resrec.InterfaceID, CRDisplayString(m, rr));
8905 if (m->rec.r.resrec.RecordType == kDNSRecordTypePacketNegative)
8913 if (mDNSOpaque16IsZero(response->h.id) && m->rec.r.resrec.rrtype == kDNSType_NSEC3)
8919 if (m->rec.r.resrec.rrtype == kDNSType_TSIG)
8924 if (m->rec.r.resrec.rrtype == kDNSType_OPT)
8927 const rdataOPT *const e = (const rdataOPT *)&m->rec.r.resrec.rdata->u.data[m->rec.r.resrec.rdlength];
8930 for (opt = &m->rec.r.resrec.rdata->u.opt[0]; opt < e; opt++)
8940 if ((m->rec.r.resrec.rrtype == kDNSType_CNAME) && SameDomainName(m->rec.r.resrec.name, &m->rec.r.resrec.rdata->u.name))
8942 LogInfo("mDNSCoreReceiveResponse: CNAME loop domain name %##s", m->rec.r.resrec.name->c);
8951 m->rec.r.resrec.rroriginalttl = GetEffectiveTTL(LLQType, m->rec.r.resrec.rroriginalttl);
8965 if (llqMatch != mDNSNULL) m->rec.r.resrec.rDNSServer = uDNSServer = llqMatch->qDNSServer;
8999 m->rec.r.resrec.rDNSServer = uDNSServer = q->qDNSServer;
9010 debugf("mDNSCoreReceiveResponse: Can't find question for record name %##s", m->rec.r.resrec.name->c);
9016 else if (llintf && llintf->IgnoreIPv4LL && m->rec.r.resrec.rrtype == kDNSType_A)
9054 if (mDNSOpaque16IsZero(response->h.id) && m->rec.r.resrec.rrtype != kDNSType_NSEC)
9066 if (!AcceptableResponse && !(ResponseSrcLocal && rr->resrec.RecordType == kDNSRecordTypeUnique)) continue;
9071 if (IdenticalSameNameRecord(&m->rec.r.resrec, &rr->resrec))
9074 if (m->rec.r.resrec.rroriginalttl >= rr->resrec.rroriginalttl/2 || m->SleepState)
9086 else if (m->rec.r.resrec.rroriginalttl > 0 && PacketRRConflict(m, rr, &m->rec.r))
9088 LogInfo("mDNSCoreReceiveResponse: Pkt Record: %08lX %s", m->rec.r.resrec.rdatahash, CRDisplayString(m, &m->rec.r));
9089 LogInfo("mDNSCoreReceiveResponse: Our Record: %08lX %s", rr->resrec.rdatahash, ARDisplayString(m, rr));
9096 LogInfo("mDNSCoreReceiveResponse: Dep Record: %08lX %s", rr->resrec.rdatahash, ARDisplayString(m, rr));
9108 if (rr->resrec.RecordType == kDNSRecordTypeVerified)
9111 rr->resrec.RecordType = kDNSRecordTypeUnique;
9122 else if (rr->resrec.RecordType == kDNSRecordTypeUnique)
9138 else if (rr->resrec.RecordType == kDNSRecordTypeKnownUnique)
9145 LogMsg("mDNSCoreReceiveResponse: Unexpected record type %X %s", rr->resrec.RecordType, ARDisplayString(m, rr));
9152 else if (m->rec.r.resrec.rrtype == rr->resrec.rrtype)
9153 if ((m->rec.r.resrec.RecordType & kDNSRecordTypePacketUniqueMask) && m->timenow - rr->LastMCTime > mDNSPlatformOneSecond/2)
9163 if (AcceptableResponse) m->rec.r.resrec.rDNSServer = uDNSServer;
9172 const mDNSu32 slot = HashSlot(m->rec.r.resrec.name);
9173 CacheGroup *cg = CacheGroupForRecord(m, slot, &m->rec.r.resrec);
9191 if (!rr && m->rec.r.resrec.rroriginalttl > 0)
9193 const mDNSBool AddToCFList = (m->rec.r.resrec.RecordType & kDNSRecordTypePacketUniqueMask) && (LLQType != uDNS_LLQ_Events);
9199 delay = CheckForSoonToExpireRecords(m, m->rec.r.resrec.name, m->rec.r.resrec.namehash, slot, mDNSNULL);
9212 if (rr->resrec.rrtype == kDNSType_RRSIG && !nseclist)
9248 if (rr && rr->resrec.AnonInfo && m->rec.r.resrec.AnonInfo)
9265 const mDNSu32 slot = HashSlot(r1->resrec.name);
9266 const CacheGroup *cg = CacheGroupForRecord(m, slot, &r1->resrec);
9287 if (!r1->resrec.InterfaceID)
9289 id1 = (r1->resrec.rDNSServer ? r1->resrec.rDNSServer->resGroupID : 0);
9290 id2 = (r2->resrec.rDNSServer ? r2->resrec.rDNSServer->resGroupID : 0);
9299 if ((r1->resrec.rrtype == r2->resrec.rrtype) && (r1->resrec.rrtype == kDNSType_RRSIG))
9301 rdataRRSig *rrsig1 = (rdataRRSig *)(((RDataBody2 *)(r1->resrec.rdata->u.data))->data);
9302 rdataRRSig *rrsig2 = (rdataRRSig *)(((RDataBody2 *)(r2->resrec.rdata->u.data))->data);
9312 if ((r1->resrec.InterfaceID == r2->resrec.InterfaceID) &&
9313 (r1->resrec.InterfaceID || (id1 == id2)) &&
9314 r1->resrec.rrtype == r2->resrec.rrtype &&
9315 r1->resrec.rrclass == r2->resrec.rrclass)
9338 if (r2->resrec.rroriginalttl != r1->resrec.rroriginalttl && r1->resrec.rroriginalttl > 1)
9340 if (!(r2->resrec.rroriginalttl == 240 && r1->resrec.rroriginalttl == 60 && r2->resrec.rrtype == kDNSType_TXT) &&
9341 !(r2->resrec.rroriginalttl == 120 && r1->resrec.rroriginalttl == 4500 && r2->resrec.rrtype == kDNSType_SRV) &&
9344 r2->resrec.rroriginalttl, r1->resrec.rroriginalttl, CRDisplayString(m, r2));
9345 r2->resrec.rroriginalttl = r1->resrec.rroriginalttl;
9372 if (r2->TimeRcvd == m->timenow && r2->resrec.rroriginalttl == 1 && r2->UnansweredQueries == MaxUnansweredQueries)
9375 r2->resrec.rroriginalttl = 0;
9381 r2->resrec.rroriginalttl = 1;
9416 r1->DelayDelivery = CheckForSoonToExpireRecords(m, r1->resrec.name, r1->resrec.namehash, slot, mDNSNULL);
9481 if (rr->resrec.InterfaceID == InterfaceID && rr->resrec.RecordType != kDNSRecordTypeDeregistering && mDNSSameEthAddress(&rr->WakeUp.HMAC, e))
9506 LogMsg("%-7s Conflicting mDNS -- waking %.6a %s", InterfaceNameForID(m, ar->resrec.InterfaceID), &ar->WakeUp.HMAC, ARDisplayString(m, ar));
9509 SendWakeup(m, ar->resrec.InterfaceID, &ar->WakeUp.IMAC, &ar->WakeUp.password); // Send one wakeup magic packet
9510 ScheduleWakeup(m, ar->resrec.InterfaceID, &ar->WakeUp.HMAC); // Schedule all other records with the same owner to be woken
9731 if (!mDNS_KeepaliveRecord(&rr->resrec))
9757 if (ar->resrec.rrtype != kDNSType_NULL)
9760 if (mDNS_KeepaliveRecord(&ar->resrec))
9762 int len = ar->resrec.rdlength;
9763 mDNSu8 *ptr = &ar->resrec.rdata->u.txt.c[1];
10000 if (ptr && m->rec.r.resrec.RecordType != kDNSRecordTypePacketNegative && m->rec.r.resrec.rrtype == kDNSType_OPT)
10003 const rdataOPT *const e = (const rdataOPT *)&m->rec.r.resrec.rdata->u.data[m->rec.r.resrec.rdlength];
10004 for (o = &m->rec.r.resrec.rdata->u.opt[0]; o < e; o++)
10010 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
10056 if (ptr && m->rec.r.resrec.RecordType != kDNSRecordTypePacketNegative)
10058 mDNSu16 RDLengthMem = GetRDLengthMem(&m->rec.r.resrec);
10067 mDNSu8 RecordType = m->rec.r.resrec.RecordType & kDNSRecordTypePacketUniqueMask ? kDNSRecordTypeUnique : kDNSRecordTypeShared;
10068 m->rec.r.resrec.rrclass &= ~kDNSClass_UniqueRRSet;
10070 if (!mDNS_KeepaliveRecord(&m->rec.r.resrec))
10075 mDNS_SetupResourceRecord(ar, mDNSNULL, InterfaceID, m->rec.r.resrec.rrtype, m->rec.r.resrec.rroriginalttl, RecordType, AuthRecordAny, SPSRecordCallback, ar);
10076 AssignDomainName(&ar->namestorage, m->rec.r.resrec.name);
10077 ar->resrec.rdlength = GetRDLength(&m->rec.r.resrec, mDNSfalse);
10078 ar->resrec.rdata->MaxRDLength = RDLengthMem;
10079 mDNSPlatformMemCopy(ar->resrec.rdata->u.data, m->rec.r.resrec.rdata->u.data, RDLengthMem);
10082 if (m->rec.r.resrec.rrtype == kDNSType_PTR)
10084 mDNSs32 t = ReverseMapDomainType(m->rec.r.resrec.name);
10085 if (t == mDNSAddrType_IPv4) GetIPv4FromName(&ar->AddressProxy, m->rec.r.resrec.name);
10086 else if (t == mDNSAddrType_IPv6) GetIPv6FromName(&ar->AddressProxy, m->rec.r.resrec.name);
10102 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
10114 opt.resrec.rrclass = NormalMaxDNSMessageData;
10115 opt.resrec.rdlength = sizeof(rdataOPT); // One option in this OPT record
10116 opt.resrec.rdestimate = sizeof(rdataOPT);
10117 opt.resrec.rdata->u.opt[0].opt = kDNSOpt_Lease;
10118 opt.resrec.rdata->u.opt[0].u.updatelease = updatelease;
10119 p = PutResourceRecordTTLWithLimit(&m->omsg, p, &m->omsg.h.numAdditionals, &opt.resrec, opt.resrec.rroriginalttl, m->omsg.data + AbsoluteMaxDNSMessageData);
10138 if (ptr && m->rec.r.resrec.RecordType != kDNSRecordTypePacketNegative && m->rec.r.resrec.rrtype == kDNSType_OPT)
10141 const rdataOPT *const e = (const rdataOPT *)&m->rec.r.resrec.rdata->u.data[m->rec.r.resrec.rdlength];
10142 for (o = &m->rec.r.resrec.rdata->u.opt[0]; o < e; o++)
10149 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
10158 if (rr->resrec.InterfaceID == InterfaceID || (!rr->resrec.InterfaceID && (rr->ForceMCast || IsLocalDomain(rr->resrec.name))))
10196 if (cr == &m->rec.r && m->rec.r.resrec.RecordType)
10200 cr->resrec.RecordType = kDNSRecordTypePacketNegative;
10201 cr->resrec.InterfaceID = InterfaceID;
10202 cr->resrec.rDNSServer = dnsserver;
10203 cr->resrec.name = name; // Will be updated to point to cg->name when we call CreateNewCacheEntry
10204 cr->resrec.rrtype = rrtype;
10205 cr->resrec.rrclass = rrclass;
10206 cr->resrec.rroriginalttl = ttl_seconds;
10207 cr->resrec.rdlength = 0;
10208 cr->resrec.rdestimate = 0;
10209 cr->resrec.namehash = namehash;
10210 cr->resrec.rdatahash = 0;
10211 cr->resrec.rdata = (RData*)&cr->smallrdatastorage;
10212 cr->resrec.rdata->MaxRDLength = 0;
11046 if (ResourceRecordAnswersQuestion(&rr->resrec, q))
11095 if (rr->resrec.RecordType == kDNSRecordTypePacketNegative)
11102 if (SameNameRecordAnswersQuestion(&rr->resrec, q))
11108 if (rr->resrec.rdlength > SmallRecordLimit) q->LargeAnswers--;
11109 if (rr->resrec.RecordType & kDNSRecordTypePacketUniqueMask) q->UniqueAnswers--;
11120 if (qptr != q && ActiveQuestion(qptr) && ResourceRecordAnswersQuestion(&rr->resrec, qptr))
11862 if (ActiveQuestion(q) && ResourceRecordAnswersQuestion(&rr->resrec, q))
12019 if (rr->resrec.RecordType != kDNSRecordTypePacketNegative && SameNameRecordAnswersQuestion(&rr->resrec, question))
12023 question->QuestionCallback(m, question, &rr->resrec, QC_rmv);
12035 if (status == mStatus_NoError) ReconfirmAntecedents(m, cr->resrec.name, cr->resrec.namehash, 0);
12048 if (status == mStatus_NoError) ReconfirmAntecedents(m, cr->resrec.name, cr->resrec.namehash, 0);
12456 if (!ValidateRData(rr->resrec.rrtype, newrdlength, newrdata))
12458 LogMsg("Attempt to update record with invalid rdata: %s", GetRRDisplayString_rdb(&rr->resrec, &newrdata->u, m->MsgBuffer));
12465 if (newttl == 0) newttl = rr->resrec.rroriginalttl;
12481 if (rr->ARType != AuthRecordLocalOnly && rr->ARType != AuthRecordP2P && !IsLocalDomain(rr->resrec.name))
12491 if (RRLocalOnly(rr) || (rr->resrec.rroriginalttl == newttl &&
12492 rr->resrec.rdlength == newrdlength && mDNSPlatformMemSame(rr->resrec.rdata->u.data, newrdata->u.data, newrdlength)))
12509 rr->resrec.name->c, delay, delay > 1 ? "s" : "");
12511 rr->resrec.rroriginalttl = newttl;
12578 set->RR_A.resrec.rrtype = kDNSType_A;
12579 set->RR_A.resrec.rdata->u.ipv4 = set->ip.ip.v4;
12587 set->RR_A.resrec.rrtype = kDNSType_AAAA;
12588 set->RR_A.resrec.rdata->u.ipv6 = set->ip.ip.v6;
12616 mDNSu8 *p = set->RR_HINFO.resrec.rdata->u.data;
12627 set->RR_HINFO.resrec.RecordType = kDNSRecordTypeUnregistered;
12644 if (set->RR_A .resrec.RecordType) mDNS_Deregister_internal(m, &set->RR_A, mDNS_Dereg_normal);
12645 if (set->RR_PTR .resrec.RecordType) mDNS_Deregister_internal(m, &set->RR_PTR, mDNS_Dereg_normal);
12646 if (set->RR_HINFO.resrec.RecordType) mDNS_Deregister_internal(m, &set->RR_HINFO, mDNS_Dereg_normal);
12715 debugf("mDNS_HostNameCallback: %##s (%s) %s (%ld)", rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype), msg, result);
12751 LogMsg("mDNS_HostNameCallback: Unknown error %d for registration of record %s", result, rr->resrec.name->c);
12774 debugf("RestartRecordGetZoneData: StartGetZoneData for %##s", rr->resrec.name->c);
12778 rr->nta = StartGetZoneData(m, rr->resrec.name, ZoneServiceUpdate, RecordRegistrationGotZoneData, rr);
12988 if (!rr->resrec.InterfaceID || rr->resrec.InterfaceID == set->InterfaceID)
12991 ReInitAnonInfo(&rr->resrec.AnonInfo, rr->resrec.name);
13093 if (rr->resrec.InterfaceID == set->InterfaceID)
13136 if (rr->resrec.InterfaceID == set->InterfaceID)
13153 if (sr->RR_PTR.resrec.AnonInfo)
13155 LogMsg("SetAnonInfoSRS: Freeing AnonInfo for PTR record %##s, should have been freed already", sr->RR_PTR.resrec.name->c);
13156 FreeAnonInfo(sr->RR_PTR.resrec.AnonInfo);
13158 sr->RR_PTR.resrec.AnonInfo = AllocateAnonInfo(sr->RR_PTR.resrec.name, sr->AnonData, len, mDNSNULL);
13161 if (sr->SubTypes[i].resrec.AnonInfo)
13163 LogMsg("SetAnonInfoSRS: Freeing AnonInfo for subtype record %##s, should have been freed already", sr->SubTypes[i].resrec.name->c);
13164 FreeAnonInfo(sr->SubTypes[i].resrec.AnonInfo);
13166 sr->SubTypes[i].resrec.AnonInfo = AllocateAnonInfo(sr->SubTypes[i].resrec.name, sr->AnonData, len, mDNSNULL);
13176 if (sr->RR_PTR.resrec.AnonInfo)
13178 FreeAnonInfo(sr->RR_PTR.resrec.AnonInfo);
13179 sr->RR_PTR.resrec.AnonInfo = mDNSNULL;
13183 if (sr->SubTypes[i].resrec.AnonInfo)
13185 FreeAnonInfo(sr->SubTypes[i].resrec.AnonInfo);
13186 sr->SubTypes[i].resrec.AnonInfo = mDNSNULL;
13202 debugf("ServiceCallback: %##s (%s) %s (%d)", rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype), msg, result);
13225 if (sr->RR_SRV.resrec.RecordType != kDNSRecordTypeUnregistered) return;
13226 if (sr->RR_TXT.resrec.RecordType != kDNSRecordTypeUnregistered) return;
13227 if (sr->RR_PTR.resrec.RecordType != kDNSRecordTypeUnregistered) return;
13228 if (sr->RR_ADV.resrec.RecordType != kDNSRecordTypeUnregistered) return;
13229 for (i=0; i<sr->NumSubTypes; i++) if (sr->SubTypes[i].resrec.RecordType != kDNSRecordTypeUnregistered) return;
13233 if (e->r.resrec.RecordType != kDNSRecordTypeUnregistered) return;
13244 LogInfo("ServiceCallback: All records %s for %##s", (result == mStatus_MemFree ? "Unregistered" : "Registered"), sr->RR_PTR.resrec.name->c);
13336 if (sr->RR_TXT.resrec.rdata->MaxRDLength < txtlen)
13337 sr->RR_TXT.resrec.rdata->MaxRDLength = txtlen;
13346 AssignDomainName(&sr->RR_TXT.namestorage, sr->RR_SRV.resrec.name);
13349 AssignDomainName(&sr->RR_ADV.resrec.rdata->u.name, sr->RR_PTR.resrec.name);
13354 AssignDomainName(&sr->RR_PTR.resrec.rdata->u.name, sr->RR_SRV.resrec.name);
13364 AssignDomainName(&st, sr->SubTypes[i].resrec.name);
13369 AssignDomainName(&sr->SubTypes[i].resrec.rdata->u.name, &sr->RR_SRV.namestorage);
13377 sr->RR_SRV.resrec.rdata->u.srv.priority = 0;
13378 sr->RR_SRV.resrec.rdata->u.srv.weight = 0;
13379 sr->RR_SRV.resrec.rdata->u.srv.port = port;
13382 if (host && host->c[0]) AssignDomainName(&sr->RR_SRV.resrec.rdata->u.srv.target, host);
13383 else { sr->RR_SRV.AutoTarget = Target_AutoHost; sr->RR_SRV.resrec.rdata->u.srv.target.c[0] = '\0'; }
13388 if (txtinfo == mDNSNULL) sr->RR_TXT.resrec.rdlength = 0;
13389 else if (txtinfo != sr->RR_TXT.resrec.rdata->u.txt.c)
13391 sr->RR_TXT.resrec.rdlength = txtlen;
13392 if (sr->RR_TXT.resrec.rdlength > sr->RR_TXT.resrec.rdata->MaxRDLength) return(mStatus_BadParamErr);
13393 mDNSPlatformMemCopy(sr->RR_TXT.resrec.rdata->u.txt.c, txtinfo, txtlen);
13432 mDNSInterfaceID InterfaceID = sr->RR_PTR.resrec.InterfaceID;
13437 mDNS_SetupResourceRecord(&extra->r, rdata, sr->RR_PTR.resrec.InterfaceID,
13438 extra->r.resrec.rrtype, ttl, kDNSRecordTypeUnique, artype, ServiceCallback, sr);
13439 AssignDomainName(&extra->r.namestorage, sr->RR_SRV.resrec.name);
13448 extra->r.resrec.name->c, DNSTypeName(extra->r.resrec.rrtype), extra->r.resrec.rdlength);
13468 debugf("mDNS_RemoveRecordFromService failed to remove record from %##s", extra->r.resrec.name->c);
13473 debugf("mDNS_RemoveRecordFromService removing record from %##s", extra->r.resrec.name->c);
13489 const domainname *host = sr->RR_SRV.AutoTarget ? mDNSNULL : &sr->RR_SRV.resrec.rdata->u.srv.target;
13493 DeconstructServiceName(sr->RR_SRV.resrec.name, &name1, &type, &domain);
13506 host, sr->RR_SRV.resrec.rdata->u.srv.port, sr->RR_TXT.resrec.rdata->u.txt.c, sr->RR_TXT.resrec.rdlength,
13508 sr->RR_PTR.resrec.InterfaceID, sr->ServiceCallback, sr->ServiceContext, sr->flags);
13517 err = mDNS_AddRecordToService(m, sr, e, e->r.resrec.rdata, e->r.resrec.rroriginalttl, 0);
13529 if (mDNSIPPortIsZero(sr->RR_SRV.resrec.rdata->u.srv.port)) return(mDNS_DeregisterNoSuchService(m, &sr->RR_SRV));
13531 if (sr->RR_PTR.resrec.RecordType == kDNSRecordTypeUnregistered)
13533 debugf("Service set for %##s already deregistered", sr->RR_SRV.resrec.name->c);
13536 else if (sr->RR_PTR.resrec.RecordType == kDNSRecordTypeDeregistering)
13538 LogInfo("Service set for %##s already in the process of deregistering", sr->RR_SRV.resrec.name->c);
13602 rr->resrec.rdata->u.srv.priority = 0;
13603 rr->resrec.rdata->u.srv.weight = 0;
13604 rr->resrec.rdata->u.srv.port = zeroIPPort;
13605 if (host && host->c[0]) AssignDomainName(&rr->resrec.rdata->u.srv.target, host);
13623 if (!MakeDomainNameFromDNSNameString(&rr->resrec.rdata->u.name, domname)) return(mStatus_BadParamErr);
13675 rr->resrec.RecordType = kDNSRecordTypeUnique;
13716 if (rr->resrec.InterfaceID == InterfaceID && rr->resrec.RecordType != kDNSRecordTypeDeregistering &&
13760 if (rr->resrec.InterfaceID == InterfaceID && rr->resrec.RecordType != kDNSRecordTypeDeregistering &&
13781 ScheduleWakeup(m, rr->resrec.InterfaceID, &rr->WakeUp.HMAC);
13821 if (rr->resrec.InterfaceID == InterfaceID && rr->resrec.RecordType != kDNSRecordTypeDeregistering &&
13863 if (rr->resrec.InterfaceID == InterfaceID && rr->resrec.RecordType != kDNSRecordTypeDeregistering &&
13883 ScheduleWakeup(m, rr->resrec.InterfaceID, &rr->WakeUp.HMAC);
14047 if (rr->resrec.InterfaceID == InterfaceID &&
14048 rr->resrec.RecordType != kDNSRecordTypeDeregistering &&
14053 if (r2->resrec.InterfaceID == InterfaceID && mDNSSameEthAddress(&r2->WakeUp.HMAC, &rr->WakeUp.HMAC) &&
14054 r2->resrec.RecordType != kDNSRecordTypeDeregistering &&
14055 r2->resrec.rrtype == kDNSType_SRV && mDNSSameIPPort(r2->resrec.rdata->u.srv.port, port) &&
14056 SameDomainLabel(ThirdLabel(r2->resrec.name)->c, tp))
14063 InterfaceNameForID(m, rr->resrec.InterfaceID), dst, &rr->WakeUp.HMAC, &rr->WakeUp.IMAC, ARDisplayString(m, r2));
14064 ScheduleWakeup(m, rr->resrec.InterfaceID, &rr->WakeUp.HMAC);
14068 InterfaceNameForID(m, rr->resrec.InterfaceID), dst, &rr->WakeUp.HMAC, tp, mDNSVal16(port));
14149 LogSPS("Sleep Proxy Server %#s %s", srs->RR_SRV.resrec.name->c, m->SPSState ? "started" : "stopped");
14245 m->rec.r.resrec.RecordType = 0;
14246 m->rec.r.resrec.AnonInfo = mDNSNULL;
14443 DeconstructServiceName(m->SPSRecords.RR_SRV.resrec.name, &name, &type, &domain);
14465 debugf("NameStatusCallback: result %d for registration of name %##s", result, rr->resrec.name->c);
14466 mDNSPlatformDynDNSHostNameStatusChanged(rr->resrec.name, result);
14471 mDNSBool purge = cr->resrec.RecordType == kDNSRecordTypePacketNegative ||
14472 cr->resrec.rrtype == kDNSType_A ||
14473 cr->resrec.rrtype == kDNSType_AAAA ||
14474 cr->resrec.rrtype == kDNSType_SRV;
14485 LogInfo("PurgeorReconfirmCacheRecord: Purging Resourcerecord %s, RecordType %x", CRDisplayString(m, cr), cr->resrec.RecordType);
14490 LogInfo("PurgeorReconfirmCacheRecord: Reconfirming Resourcerecord %s, RecordType %x", CRDisplayString(m, cr), cr->resrec.RecordType);
14510 if (SameNameRecordAnswersQuestion(&rp->resrec, q))
14539 if (SameNameRecordAnswersQuestion(&rp->resrec, q))
14541 if (rp->resrec.RecordType != kDNSRecordTypePacketNegative || !rp->nsec)
14567 if (!rp->resrec.InterfaceID && rp->resrec.RecordType != kDNSRecordTypePacketNegative &&
14568 SameNameRecordAnswersQuestion(&rp->resrec, &question))
14809 if (cr->resrec.InterfaceID)
14829 ptr = GetServerForName(m, cr->resrec.name,
14834 if (ptr && (ptr != cr->resrec.rDNSServer))
14844 &ptr->addr, (cr->resrec.rDNSServer != mDNSNULL ? &cr->resrec.rDNSServer->addr : mDNSNULL));
14850 &ptr->addr, (cr->resrec.rDNSServer != mDNSNULL ? &cr->resrec.rDNSServer->addr : mDNSNULL));
14866 if (cr->resrec.InterfaceID) continue;
14867 if (cr->resrec.rDNSServer == ptr)
14888 cr->resrec.rDNSServer = mDNSNULL;
14895 cr->resrec.rDNSServer = qptr->qDNSServer;
14901 cr->resrec.name, &cr->resrec.rDNSServer->addr, &ptr->addr);
14902 cr->resrec.rDNSServer = mDNSNULL;
14928 if (!cr->resrec.InterfaceID)
14998 (rr->resrec.RecordType != kDNSRecordTypeDeregistering) ? "Initiating " : "Accelerating",
14999 rr, rr->resrec.RecordType, ARDisplayString(m, rr));
15000 if (rr->resrec.RecordType != kDNSRecordTypeDeregistering)
15102 LogMsg("mDNS_StartExit: Should not still have Duplicate Records remaining: %02X %s", rr->resrec.RecordType, ARDisplayString(m, rr));
15143 LogMsg("mDNS_FinalExit failed to send goodbye for: %p %02X %s", rr, rr->resrec.RecordType, ARDisplayString(m, rr));