Home | History | Annotate | Download | only in mDNSCore

Lines Matching refs:resrec

118 									(rr)->resrec.RecordType & kDNSRecordTypeUniqueMask && \
119 ((rr)->resrec.rrtype == kDNSType_A || (rr)->resrec.rrtype == kDNSType_AAAA || \
120 (rr)->resrec.rrtype == kDNSType_CNAME))
283 const mDNSu32 slot = AuthHashSlot(rr->resrec.name);
284 ag = AuthGroupForRecord(r, slot, &rr->resrec);
285 if (!ag) ag = GetAuthGroup(r, slot, &rr->resrec); // If we don't have a AuthGroup for this name, make one now
300 const mDNSu32 slot = AuthHashSlot(rr->resrec.name);
302 a = AuthGroupForRecord(r, slot, &rr->resrec);
390 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
453 followcname = FollowCNAME(q, &rr->resrec, AddRecord);
456 if (!(rr->resrec.RecordType & kDNSRecordTypeActiveMask))
459 AddRecord ? "Add" : "Rmv", rr->resrec.RecordType, ARDisplayString(m, rr));
476 q->QuestionCallback(m, q, &rr->resrec, AddRecord);
482 AnswerQuestionByFollowingCNAME(m, q, &rr->resrec);
486 q->QuestionCallback(m, q, &rr->resrec, AddRecord);
502 answered = ResourceRecordAnswersQuestion(&rr->resrec, q);
537 answered = ResourceRecordAnswersQuestion(&rr->resrec, q);
562 #define ResourceRecordIsValidAnswer(RR) ( ((RR)-> resrec.RecordType & kDNSRecordTypeActiveMask) && \
563 ((RR)->Additional1 == mDNSNULL || ((RR)->Additional1->resrec.RecordType & kDNSRecordTypeActiveMask)) && \
564 ((RR)->Additional2 == mDNSNULL || ((RR)->Additional2->resrec.RecordType & kDNSRecordTypeActiveMask)) && \
565 ((RR)->DependentOn == mDNSNULL || ((RR)->DependentOn->resrec.RecordType & kDNSRecordTypeActiveMask)) )
569 ((RR)->resrec.InterfaceID == mDNSInterface_Any || (RR)->resrec.InterfaceID == (INTID)))
599 #define TicksTTL(RR) ((mDNSs32)(RR)->resrec.rroriginalttl * mDNSPlatformOneSecond)
613 #define SameResourceRecordSignature(A,B) (A)->resrec.rrtype == (B)->resrec.rrtype && SameResourceRecordNameClassInterface((A),(B))
619 if (r1->resrec.InterfaceID &&
620 r2->resrec.InterfaceID &&
621 r1->resrec.InterfaceID != r2->resrec.InterfaceID) return(mDNSfalse);
623 r1->resrec.rrclass == r2->resrec.rrclass &&
624 r1->resrec.namehash == r2->resrec.namehash &&
625 SameDomainName(r1->resrec.name, r2->resrec.name));
640 if (pktrr->resrec.InterfaceID &&
641 authrr->resrec.InterfaceID &&
642 pktrr->resrec.InterfaceID != authrr->resrec.InterfaceID) return(mDNSfalse);
643 if (!(authrr->resrec.RecordType & kDNSRecordTypeUniqueMask) || authrr->WakeUp.HMAC.l[0])
644 if (pktrr->resrec.rrtype != authrr->resrec.rrtype) return(mDNSfalse);
646 pktrr->resrec.rrclass == authrr->resrec.rrclass &&
647 pktrr->resrec.namehash == authrr->resrec.namehash &&
648 SameDomainName(pktrr->resrec.name, authrr->resrec.name));
661 if (!IdenticalResourceRecord(&ka->resrec, &rr->resrec)) return(mDNSfalse);
672 return(mDNSBool)(ka->resrec.rroriginalttl >= rr->resrec.rroriginalttl / 2);
677 if (rr->resrec.RecordType == kDNSRecordTypeUnique)
693 else if (rr->AnnounceCount && (ResourceRecordIsValidAnswer(rr) || rr->resrec.RecordType == kDNSRecordTypeDeregistering))
703 rr->ThisAPInterval = rr->AddressProxy.type ? mDNSPlatformOneSecond : DefaultAPIntervalForRecordType(rr->resrec.RecordType);
777 if (rr->WakeUp.HMAC.l[0] && rr->resrec.rrtype == kDNSType_AAAA)
796 DomainAuthInfo *AuthInfo = GetAuthInfoForName_internal(m, rr->resrec.name);
819 domainname *const target = GetRRDomainNameTarget(&rr->resrec);
822 if (!target) LogInfo("SetTargetToHostName: Don't know how to set the target of rrtype %s", DNSTypeName(rr->resrec.rrtype));
828 else { target->c[0] = 0; SetNewRData(&rr->resrec, mDNSNULL, 0); return; }
832 debugf("SetTargetToHostName: Target of %##s is already %##s", rr->resrec.name->c, target->c);
837 SetNewRData(&rr->resrec, mDNSNULL, 0); // Update rdlength, rdestimate, rdatahash
842 rr->ProbeCount = DefaultProbeCountForRecordType(rr->resrec.RecordType);
847 if (rr->RequireGoodbye && rr->resrec.RecordType == kDNSRecordTypeShared)
849 rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype));
876 if (rr->resrec.rrtype != kDNSType_SRV)
879 if (rr->resrec.rrtype == kDNSType_PTR)
881 else if (rr->resrec.rrtype == kDNSType_TXT)
885 if (srvRR->resrec.rrtype != kDNSType_SRV)
892 ARDisplayString(m, srvRR), srvRR->state, rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype));
908 if (rr->resrec.RecordType == kDNSRecordTypeDeregistering)
944 #define RecordLDT(A,B) ((A)->resrec.RecordType == (B)->resrec.RecordType || \
945 ((A)->resrec.RecordType | (B)->resrec.RecordType) == (kDNSRecordTypeUnique | kDNSRecordTypeVerified) || \
946 ((A)->resrec.RecordType == kDNSRecordTypeDeregistering || (B)->resrec.RecordType == kDNSRecordTypeDeregistering))
949 ((A)->resrec.InterfaceID == (B)->resrec.InterfaceID && RecordLDT((A),(B)) && IdenticalResourceRecord(&(A)->resrec, &(B)->resrec))
956 const mDNSu32 slot = AuthHashSlot(rr->resrec.name);
958 a = AuthGroupForRecord(r, slot, &rr->resrec);
967 if ((*rp)->resrec.RecordType == kDNSRecordTypeDeregistering)
983 const mDNSu32 slot = AuthHashSlot(rr->resrec.name);
985 a = AuthGroupForRecord(r, slot, &rr->resrec);
992 if (s1 != s2 && SameResourceRecordSignature((*rp), rr) && !IdenticalSameNameRecord(&(*rp)->resrec, &rr->resrec))
1006 const mDNSu32 slot = AuthHashSlot(rr->resrec.name);
1008 a = AuthGroupForRecord(r, slot, &rr->resrec);
1026 domainname *target = GetRRDomainNameTarget(&rr->resrec);
1031 if ((mDNSs32)rr->resrec.rroriginalttl <= 0)
1032 { LogMsg("mDNS_Register_internal: TTL %X should be 1 - 0x7FFFFFFF %s", rr->resrec.rroriginalttl, ARDisplayString(m, rr)); return(mStatus_BadParamErr); }
1034 if (!rr->resrec.RecordType)
1042 mDNSInterfaceID previousID = rr->resrec.InterfaceID;
1043 if (rr->resrec.InterfaceID == mDNSInterface_Any || rr->resrec.InterfaceID == mDNSInterface_P2P)
1045 rr->resrec.InterfaceID = mDNSInterface_LocalOnly;
1048 if (rr->resrec.InterfaceID != mDNSInterface_LocalOnly)
1050 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, rr->resrec.InterfaceID);
1051 if (intf && !intf->Advertise){ rr->resrec.InterfaceID = mDNSInterface_LocalOnly; rr->ARType = AuthRecordLocalOnly; }
1053 if (rr->resrec.InterfaceID != previousID)
1062 rr, rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype));
1072 rr, rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype));
1081 rr, rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype));
1087 if (rr->resrec.RecordType == kDNSRecordTypeUnique)
1088 rr->resrec.RecordType = kDNSRecordTypeVerified;
1092 rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype));
1095 if (!(rr->DependentOn->resrec.RecordType & (kDNSRecordTypeUnique | kDNSRecordTypeVerified | kDNSRecordTypeKnownUnique)))
1098 rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype), rr->DependentOn->resrec.RecordType);
1106 if (rr->resrec.InterfaceID && rr->ARType != AuthRecordLocalOnly && rr->ARType != AuthRecordP2P)
1108 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, rr->resrec.InterfaceID);
1111 debugf("mDNS_Register_internal: Bogus InterfaceID %p in resource record", rr->resrec.InterfaceID);
1136 rr->ProbeCount = DefaultProbeCountForRecordType(rr->resrec.RecordType);
1171 rr->zone = rr->resrec.name;
1184 //if (rr->resrec.rrtype == kDNSType_SRV) rr->NATinfo.IntPort = rr->resrec.rdata->u.srv.port;
1186 // rr->resrec.interface = already set in mDNS_SetupResourceRecord
1187 // rr->resrec.name->c = MUST be set by client
1188 // rr->resrec.rrtype = already set in mDNS_SetupResourceRecord
1189 // rr->resrec.rrclass = already set in mDNS_SetupResourceRecord
1190 // rr->resrec.rroriginalttl = already set in mDNS_SetupResourceRecord
1191 // rr->resrec.rdata = MUST be set by client, unless record type is CNAME or PTR and rr->HostTarget is set
1196 if (rr->resrec.rrtype == kDNSType_TXT && rr->resrec.rdlength == 0) { rr->resrec.rdlength = 1; rr->resrec.rdata->u.txt.c[0] = 0; }
1207 domainname *tar = GetRRDomainNameTarget(&rr->resrec);
1215 rr->resrec.rdlength = GetRDLength(&rr->resrec, mDNSfalse);
1216 rr->resrec.rdestimate = GetRDLength(&rr->resrec, mDNStrue);
1219 if (!ValidateDomainName(rr->resrec.name))
1222 // Don't do this until *after* we've set rr->resrec.rdlength
1223 if (!ValidateRData(rr->resrec.rrtype, rr->resrec.rdlength, rr->resrec.rdata))
1226 rr->resrec.namehash = DomainNameHashValue(rr->resrec.name);
1227 rr->resrec.rdatahash = target ? DomainNameHashValue(target) : RDataHashValue(&rr->resrec);
1236 if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask)
1240 LogInfo("mDNS_Register_internal: Name conflict %s (%p), InterfaceID %p", ARDisplayString(m, rr), rr, rr->resrec.InterfaceID);
1256 if (rr->resrec.RecordType == kDNSRecordTypeUnique) rr->resrec.RecordType = kDNSRecordTypeVerified;
1276 if (r->resrec.RecordType == kDNSRecordTypeDeregistering) r->AnnounceCount = 0;
1289 if (rr->resrec.RecordType == kDNSRecordTypeUnique && r->resrec.RecordType == kDNSRecordTypeVerified)
1304 if (rr->resrec.RecordType == kDNSRecordTypeUnique) rr->resrec.RecordType = kDNSRecordTypeVerified;
1318 if (rr->resrec.RecordType != kDNSRecordTypeUnique && rr->resrec.RecordType != kDNSRecordTypeDeregistering)
1343 m->NumFailedProbes, rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype));
1349 RData *OldRData = rr->resrec.rdata;
1350 mDNSu16 OldRDLen = rr->resrec.rdlength;
1351 SetNewRData(&rr->resrec, rr->NewRData, rr->newrdlength); // Update our rdata
1363 mDNSu8 RecordType = rr->resrec.RecordType;
1372 const mDNSu32 slot = AuthHashSlot(rr->resrec.name);
1374 a = AuthGroupForRecord(&m->rrauth, slot, &rr->resrec);
1404 dup, rr, rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype));
1416 dup->resrec.RecordType = rr->resrec.RecordType;
1445 rr, rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype));
1476 rr->resrec.RecordType = kDNSRecordTypeDeregistering;
1525 rr->resrec.RecordType = kDNSRecordTypeDeregistering;
1526 rr->resrec.rroriginalttl = 0;
1555 rr->resrec.RecordType = kDNSRecordTypeUnregistered;
1559 rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype));
1617 debugf("AddRecordToResponseList: %##s (%s) already in list", rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype));
1634 if (rr->resrec.rrtype == kDNSType_SRV)
1637 if (RRTypeIsAddressType(rr2->resrec.rrtype) && // For all address records (A/AAAA) ...
1639 rr->resrec.rdatahash == rr2->resrec.namehash && // ... whose name is the name of the SRV target
1640 SameDomainName(&rr->resrec.rdata->u.srv.target, rr2->resrec.name))
1643 else if (RRTypeIsAddressType(rr->resrec.rrtype)) // For A or AAAA, put counterpart as additional
1646 if (RRTypeIsAddressType(rr2->resrec.rrtype) && // For all address records (A/AAAA) ...
1648 rr->resrec.namehash == rr2->resrec.namehash && // ... and have the same name
1649 SameDomainName(rr->resrec.name, rr2->resrec.name))
1652 else if (rr->resrec.rrtype == kDNSType_PTR) // For service PTR, see if we want to add DeviceInfo record
1655 SameDomainLabel(rr->resrec.rdata->u.name.c, m->DeviceInfo.resrec.name->c))
1712 if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask)
1713 rr->resrec.rrclass |= kDNSClass_UniqueRRSet; // Temporarily set the cache flush bit so PutResourceRecord will set it
1714 newptr = PutResourceRecord(&m->omsg, responseptr, &m->omsg.h.numAnswers, &rr->resrec);
1715 rr->resrec.rrclass &= ~kDNSClass_UniqueRRSet; // Make sure to clear cache flush bit back to normal state
1729 if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask)
1730 rr->resrec.rrclass |= kDNSClass_UniqueRRSet; // Temporarily set the cache flush bit so PutResourceRecord will set it
1731 newptr = PutResourceRecord(&m->omsg, responseptr, &m->omsg.h.numAdditionals, &rr->resrec);
1732 rr->resrec.rrclass &= ~kDNSClass_UniqueRRSet; // Make sure to clear cache flush bit back to normal state
1736 else if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask) rr->ImmedAnswer = mDNSInterfaceMark;
1755 rr->resrec.RecordType = kDNSRecordTypeShared;
1776 if (!AuthRecord_uDNS(rr) && rr->resrec.RecordType == kDNSRecordTypeDeregistering)
1857 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, rr->resrec.InterfaceID);
1858 if (!intf) { LogMsg("SendARP: No interface with InterfaceID %p found %s", rr->resrec.InterfaceID, ARDisplayString(m,rr)); return; }
1889 mDNSPlatformSendRawPacket(m->omsg.data, ptr, rr->resrec.InterfaceID);
1928 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, rr->resrec.InterfaceID);
1929 if (!intf) { LogMsg("SendNDP: No interface with InterfaceID %p found %s", rr->resrec.InterfaceID, ARDisplayString(m,rr)); return; }
2002 mDNSPlatformSendRawPacket(m->omsg.data, ptr, rr->resrec.InterfaceID);
2078 if (rr->resrec.RecordType == kDNSRecordTypeDeregistering)
2087 SendWakeup(m, rr->resrec.InterfaceID, &rr->WakeUp.IMAC, &rr->WakeUp.password);
2089 if (r2->AnnounceCount && r2->resrec.InterfaceID == rr->resrec.InterfaceID && mDNSSameEthAddress(&r2->WakeUp.IMAC, &rr->WakeUp.IMAC))
2139 if ((rr->resrec.InterfaceID && rr->ImmedAnswer) ||
2152 if (rr->ImmedAnswer && rr->resrec.rrtype == kDNSType_SRV)
2154 if (RRTypeIsAddressType(r2->resrec.rrtype) && // For all address records (A/AAAA) ...
2157 rr->resrec.rdatahash == r2->resrec.namehash && // ... whose name is the name of the SRV target
2158 SameDomainName(&rr->resrec.rdata->u.srv.target, r2->resrec.name) &&
2159 (rr->ImmedAnswer == mDNSInterfaceMark || rr->ImmedAnswer == r2->resrec.InterfaceID))
2160 r2->ImmedAdditional = r2->resrec.InterfaceID; // ... then mark this address record for sending too
2164 if (rr->ImmedAnswer && rr->resrec.RecordType == kDNSRecordTypeShared && rr->resrec.rrtype == kDNSType_PTR)
2165 if (ResourceRecordIsValidAnswer(&m->DeviceInfo) && SameDomainLabel(rr->resrec.rdata->u.name.c, m->DeviceInfo.resrec.name->c))
2179 if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask)
2203 rr->SendRNow = !intf ? mDNSNULL : (rr->resrec.InterfaceID) ? rr->resrec.InterfaceID : intf->InterfaceID;
2211 if (rr->resrec.RecordType != kDNSRecordTypeDeregistering)
2214 debugf("Announcing %##s (%s) %d", rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype), rr->AnnounceCount);
2252 ((rr->resrec.InterfaceID == mDNSInterface_Any) && !mDNSPlatformValidRecordForInterface(rr, intf)))
2259 RData *OldRData = rr->resrec.rdata;
2260 mDNSu16 oldrdlength = rr->resrec.rdlength;
2262 (rr->resrec.RecordType != kDNSRecordTypeDeregistering &&
2268 if (ResourceRecordIsValidAnswer(rr) && rr->resrec.RecordType == kDNSRecordTypeShared && rr->RequireGoodbye)
2270 newptr = PutRR_OS_TTL(responseptr, &m->omsg.h.numAnswers, &rr->resrec, 0);
2274 SetNewRData(&rr->resrec, rr->NewRData, rr->newrdlength);
2277 if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask)
2278 rr->resrec.rrclass |= kDNSClass_UniqueRRSet; // Temporarily set the cache flush bit so PutResourceRecord will set it
2279 newptr = PutRR_OS_TTL(responseptr, &m->omsg.h.numAnswers, &rr->resrec, active ? rr->resrec.rroriginalttl : 0);
2280 rr->resrec.rrclass &= ~kDNSClass_UniqueRRSet; // Make sure to clear cache flush bit back to normal state
2285 if (rr->resrec.RecordType == kDNSRecordTypeDeregistering) numDereg++;
2290 SetNewRData(&rr->resrec, OldRData, oldrdlength);
2294 if (!pktcount && active && (rr->resrec.RecordType & kDNSRecordTypeActiveUniqueMask) && !rr->SendNSECNow)
2300 if (rr->ImmedAnswer == mDNSInterfaceMark && rr->resrec.InterfaceID == mDNSInterface_Any)
2320 if (!SendAdditional && (rr->resrec.RecordType & kDNSRecordTypeUniqueMask))
2334 if (!pktcount && (rr->resrec.RecordType & kDNSRecordTypeActiveUniqueMask) && !rr->SendNSECNow)
2337 if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask)
2338 rr->resrec.rrclass |= kDNSClass_UniqueRRSet; // Temporarily set the cache flush bit so PutResourceRecord will set it
2339 newptr = PutRR_OS(newptr, &m->omsg.h.numAdditionals, &rr->resrec);
2340 rr->resrec.rrclass &= ~kDNSClass_UniqueRRSet; // Make sure to clear cache flush bit back to normal state
2364 mDNS_SetupResourceRecord(&nsec, mDNSNULL, mDNSInterface_Any, kDNSType_NSEC, rr->resrec.rroriginalttl, kDNSRecordTypeUnique, AuthRecordAny, mDNSNULL, mDNSNULL);
2365 nsec.resrec.rrclass |= kDNSClass_UniqueRRSet;
2366 AssignDomainName(&nsec.namestorage, rr->resrec.name);
2371 if (r2->resrec.rrtype >= kDNSQType_ANY) { LogMsg("Can't create NSEC for record %s", ARDisplayString(m, r2)); break; }
2372 else nsec.rdatastorage.u.nsec.bitmap[r2->resrec.rrtype >> 3] |= 128 >> (r2->resrec.rrtype & 7);
2377 newptr = PutRR_OS(responseptr, &m->omsg.h.numAdditionals, &nsec.resrec);
2402 opt.resrec.rrclass = NormalMaxDNSMessageData;
2403 opt.resrec.rdlength = sizeof(rdataOPT); // One option in this OPT record
2404 opt.resrec.rdestimate = sizeof(rdataOPT);
2405 SetupOwnerOpt(m, intf, &opt.resrec.rdata->u.opt[0]);
2406 newptr = PutResourceRecord(&m->omsg, responseptr, &m->omsg.h.numAdditionals, &opt.resrec);
2455 LogMsg("SendResponses: No active interface %p to send: %p %02X %s", rr->SendRNow, rr->resrecresrec.RecordType, ARDisplayString(m, rr));
2459 if (rr->ImmedAnswer || rr->resrec.RecordType == kDNSRecordTypeDeregistering)
2463 if (rr->resrec.RecordType == kDNSRecordTypeDeregistering && rr->AnnounceCount == 0)
2495 ((RR)->resrec.rroriginalttl > 10 ) ? (mDNSPlatformOneSecond) : \
2496 ((RR)->resrec.rroriginalttl > 0 ) ? (mDNSPlatformOneSecond/10) : 0)
2510 // rr->resrec.rroriginalttl
2527 ScheduleNextCacheCheckTime(m, HashSlot(rr->resrec.name), NextCacheCheckEvent(rr));
2551 rr->resrec.rroriginalttl = (interval * 4 + mDNSPlatformOneSecond - 1) / mDNSPlatformOneSecond;
2585 if (rr->resrec.InterfaceID == q->SendQNow && // received on this interface
2586 !(rr->resrec.RecordType & kDNSRecordTypeUniqueMask) && // which is a shared (i.e. not unique) record type
2588 rr->resrec.rdlength <= SmallRecordLimit && // which is small enough to sensibly fit in the packet
2589 SameNameRecordAnswersQuestion(&rr->resrec, q) && // which answers our question
2602 forecast += 12 + rr->resrec.rdestimate;
2623 if (rr->resrec.InterfaceID == q->SendQNow && // received on this interface
2625 SameNameRecordAnswersQuestion(&rr->resrec, q)) // which answers our question
2656 domainname *crtarget = GetRRDomainNameTarget(&cr->resrec);
2657 if (crtarget && cr->resrec.rdatahash == namehash && SameDomainName(crtarget, name))
2661 if (depth < 5) ReconfirmAntecedents(m, cr->resrec.name, cr->resrec.namehash, depth+1);
2674 while (cr && !RRTypeIsAddressType(cr->resrec.rrtype)) cr=cr->next;
2684 if (cr->resrec.rrtype == kDNSType_PTR && cr->resrec.rdlength >= 6) // If record is PTR type, with long enough name,
2686 if (SameNameRecordAnswersQuestion(&cr->resrec, q)) // and answers our browse query,
2687 if (!IdenticalSameNameRecord(&cr->resrec, &m->SPSRecords.RR_PTR.resrec)) // and is not our own advertised service...
2689 mDNSu32 metric = SPSMetric(cr->resrec.rdata->u.name.c);
2822 if (rr->resrec.rdlength <= SmallRecordLimit && // which is small enough to sensibly fit in the packet
2823 SameNameRecordAnswersQuestion(&rr->resrec, q) && // which answers our question
2828 forecast += 12 + rr->resrec.rdestimate;
2872 ExpireDupSuppressInfoOnInterface(q->DupSuppress, m->timenow - TicksTTL(cr)/20, cr->resrec.InterfaceID);
2877 else if (q->SendQNow == mDNSNULL) q->SendQNow = cr->resrec.InterfaceID;
2878 else if (q->SendQNow != cr->resrec.InterfaceID) q->SendQNow = mDNSInterfaceMark;
3003 if (!AuthRecord_uDNS(ar) && ar->resrec.RecordType == kDNSRecordTypeUnique) // For all records that are still probing...
3015 LogSPS("SendQueries ARP Probe %d %s %s", ar->ProbeCount, InterfaceNameForID(m, ar->resrec.InterfaceID), ARDisplayString(m,ar));
3020 LogSPS("SendQueries NDP Probe %d %s %s", ar->ProbeCount, InterfaceNameForID(m, ar->resrec.InterfaceID), ARDisplayString(m,ar));
3028 ar->SendRNow = (!intf || ar->WakeUp.HMAC.l[0]) ? mDNSNULL : ar->resrec.InterfaceID ? ar->resrec.InterfaceID : intf->InterfaceID;
3042 if (r2->resrec.RecordType == kDNSRecordTypeUnique && RecordIsLocalDuplicate(r2, ar))
3060 ar->resrec.RecordType = kDNSRecordTypeVerified;
3072 if (ar->resrec.RecordType == kDNSRecordTypeUnique && ar->ProbeCount == 0 && !ar->Acknowledged)
3121 mDNSu32 forecast = answerforecast + 12 + ar->resrec.rdestimate;
3122 mDNSu8 *newptr = putQuestion(&m->omsg, queryptr, limit - forecast, ar->resrec.name, kDNSQType_ANY, (mDNSu16)(ar->resrec.rrclass | ucbit));
3127 ar->SendRNow = (ar->resrec.InterfaceID) ? mDNSNULL : GetNextActiveInterfaceID(intf);
3130 ar->resrec.name->c, DNSTypeName(ar->resrec.rrtype), ar->ProbeCount);
3141 &ka->resrec, ka->resrec.rroriginalttl - SecsSinceRcvd, m->omsg.data + NormalMaxDNSMessageData - OwnerRecordSpace);
3145 ka->resrec.name->c, DNSTypeName(ka->resrec.rrtype), queryptr - m->omsg.data, newptr - m->omsg.data);
3164 mDNSu8 *newptr = PutResourceRecord(&m->omsg, queryptr, &m->omsg.h.numAuthorities, &ar->resrec);
3176 opt.resrec.rrclass = NormalMaxDNSMessageData;
3177 opt.resrec.rdlength = sizeof(rdataOPT); // One option in this OPT record
3178 opt.resrec.rdestimate = sizeof(rdataOPT);
3179 SetupOwnerOpt(m, intf, &opt.resrec.rdata->u.opt[0]);
3182 &opt.resrec, opt.resrec.rroriginalttl, m->omsg.data + AbsoluteMaxDNSMessageData);
3225 LogMsg("SendQueries: No active interface %p to send probe: %p %s", ar->SendRNow, ar->resrec.InterfaceID, ARDisplayString(m, ar));
3306 mDNSBool followcname = FollowCNAME(q, &rr->resrec, AddRecord);
3309 q->CurrentAnswers, AddRecord ? "Add" : "Rmv", rr->resrec.rroriginalttl, CRDisplayString(m, rr));
3328 if (!q->TimeoutQuestion || rr->resrec.RecordType != kDNSRecordTypePacketNegative || (m->timenow - q->StopTime < 0))
3354 (AddRecord == QC_add && (q->ExpectUnique || (rr->resrec.RecordType & kDNSRecordTypePacketUniqueMask))))
3368 if (rr->resrec.RecordType == kDNSRecordTypePacketNegative || (q->qtype != kDNSType_NSEC && RRAssertsNonexistence(&rr->resrec, q->qtype)))
3375 if (q->qtype != kDNSType_NSEC && RRAssertsNonexistence(&rr->resrec, q->qtype))
3378 MakeNegativeCacheRecord(m, &neg, &q->qname, q->qnamehash, q->qtype, q->qclass, 1, rr->resrec.InterfaceID, q->qDNSServer);
3379 q->QuestionCallback(m, q, &neg.resrec, AddRecord);
3382 q->QuestionCallback(m, q, &rr->resrec, AddRecord);
3389 AnswerQuestionByFollowingCNAME(m, q, &rr->resrec);
3439 if (SameNameRecordAnswersQuestion(&rr->resrec, q))
3449 if (!q->qDNSServer && !q->DuplicateOf && rr->resrec.RecordType == kDNSRecordTypePacketNegative)
3458 if (rr->resrec.rdlength > SmallRecordLimit) q->LargeAnswers++;
3459 if (rr->resrec.RecordType & kDNSRecordTypePacketUniqueMask) q->UniqueAnswers++;
3478 if (ResourceRecordAnswersQuestion(&rr->resrec, q))
3517 if (ResourceRecordAnswersQuestion(&rr->resrec, q))
3538 verbosedebugf("CacheRecordAdd %p %##s (%s) %lu %#a:%d question %p", rr, rr->resrec.name->c,
3539 DNSTypeName(rr->resrec.rrtype), rr->resrec.rroriginalttl, rr->resrec.rDNSServer ?
3540 &rr->resrec.rDNSServer->addr : mDNSNULL, mDNSVal16(rr->resrec.rDNSServer ?
3541 rr->resrec.rDNSServer->port : zeroIPPort), q);
3544 if (rr->resrec.rdlength > SmallRecordLimit) q->LargeAnswers++;
3545 if (rr->resrec.RecordType & kDNSRecordTypePacketUniqueMask) q->UniqueAnswers++;
3552 rr->resrec.rroriginalttl = 0;
3566 if (ResourceRecordAnswersQuestion(&rr->resrec, q))
3589 LogMsg("No cache space: Delivering non-cached result for %##s", m->rec.r.resrec.name->c);
3598 if (ResourceRecordAnswersQuestion(&rr->resrec, q))
3631 if (!QuerySuppressed(q) && ResourceRecordAnswersQuestion(&rr->resrec, q))
3655 if (rr->resrec.rdlength > SmallRecordLimit) q->LargeAnswers--;
3656 if (rr->resrec.RecordType & kDNSRecordTypePacketUniqueMask) q->UniqueAnswers--;
3658 if (rr->resrec.rdata->MaxRDLength) // Never generate "remove" events for negative results
3703 if (r->resrec.rdata && r->resrec.rdata != (RData*)&r->smallrdatastorage) mDNSPlatformMemFree(r->resrec.rdata);
3704 r->resrec.rdata = mDNSNULL;
3726 m->timenow - rr->TimeRcvd, rr->resrec.rroriginalttl, rr->CRActiveQuestion, CRDisplayString(m, rr));
3834 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
3905 if (SameNameRecordAnswersQuestion(&rr->resrec, q))
3909 if (rr->resrec.rroriginalttl <= SecsSinceRcvd)
3911 LogMsg("AnswerNewQuestion: How is rr->resrec.rroriginalttl %lu <= SecsSinceRcvd %lu for %s %d %d",
3912 rr->resrec.rroriginalttl, SecsSinceRcvd, CRDisplayString(m, rr), m->timenow, rr->TimeRcvd);
3918 if ((rr->resrec.RecordType & kDNSRecordTypePacketUniqueMask) || (q->ExpectUnique))
3921 if (rr->resrec.rdlength > SmallRecordLimit) q->LargeAnswers++;
3922 if (rr->resrec.RecordType & kDNSRecordTypePacketUniqueMask) q->UniqueAnswers++;
3927 else if (RRTypeIsAddressType(rr->resrec.rrtype) && RRTypeIsAddressType(q->qtype))
4021 if (ResourceRecordAnswersQuestion(&rr->resrec, q))
4123 r->resrec.rdata = (RData*)&r->smallrdatastorage; // By default, assume we're usually going to be using local storage
4126 r->resrec.rdata = (RData*)mDNSPlatformMemAllocate(sizeofRDataHeader + RDLength);
4127 if (r->resrec.rdata) r->resrec.rdata->MaxRDLength = r->resrec.rdlength = RDLength;
4173 rr->resrec.rroriginalttl = 0;
4207 if (rr->resrec.RecordType != kDNSRecordTypeDeregistering && rr->WakeUp.HMAC.l[0])
4220 SetSPSProxyListChanged(rr->resrec.InterfaceID);
4237 if (rr->AnsweredLocalQ && rr->resrec.RecordType == kDNSRecordTypeDeregistering)
4240 rr->resrec.RecordType = kDNSRecordTypeShared;
4244 rr->resrec.RecordType = kDNSRecordTypeDeregistering;
4844 if (rr->resrec.RecordType > kDNSRecordTypeDeregistering)
4845 if (rr->resrec.InterfaceID == intf->InterfaceID || (!rr->resrec.InterfaceID && (rr->ForceMCast || IsLocalDomain(rr->resrec.name))))
4864 if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask)
4865 rr->resrec.rrclass |= kDNSClass_UniqueRRSet; // Temporarily set the 'unique' bit so PutResourceRecord will set it
4866 newptr = PutResourceRecordTTLWithLimit(&m->omsg, p, &m->omsg.h.mDNS_numUpdates, &rr->resrec, rr->resrec.rroriginalttl, limit);
4867 rr->resrec.rrclass &= ~kDNSClass_UniqueRRSet; // Make sure to clear 'unique' bit back to normal state
4888 opt.resrec.rrclass = NormalMaxDNSMessageData;
4889 opt.resrec.rdlength = sizeof(rdataOPT) * 2; // Two options in this OPT record
4890 opt.resrec.rdestimate = sizeof(rdataOPT) * 2;
4891 opt.resrec.rdata->u.opt[0].opt = kDNSOpt_Lease;
4892 opt.resrec.rdata->u.opt[0].optlen = DNSOpt_LeaseData_Space - 4;
4893 opt.resrec.rdata->u.opt[0].u.updatelease = DEFAULT_UPDATE_LEASE;
4895 SetupOwnerOpt(m, intf, &opt.resrec.rdata->u.opt[1]); // use our own interface information
4898 opt.resrec.rdata->u.opt[1].u.owner = *owner;
4899 opt.resrec.rdata->u.opt[1].opt = kDNSOpt_Owner;
4900 opt.resrec.rdata->u.opt[1].optlen = DNSOpt_Owner_Space(&owner->HMAC, &owner->IMAC) - 4;
4903 p = PutResourceRecordTTLWithLimit(&m->omsg, p, &m->omsg.h.numAdditionals, &opt.resrec, opt.resrec.rroriginalttl, m->omsg.data + AbsoluteMaxDNSMessageData);
4972 if (!rr->resrec.InterfaceID || rr->resrec.InterfaceID == intf->InterfaceID)
5041 if (rr->resrec.rrtype == kDNSType_SRV && !AuthRecord_uDNS(rr) && !mDNSSameIPPort(rr->resrec.rdata->u.srv.port, DiscardPort))
5057 if (rr->resrec.RecordType == kDNSRecordTypeShared && rr->RequireGoodbye)
5113 LogSPS("BeginSleepProcessing: %-6s Found Sleep Proxy Server %d TTL %d %s", intf->ifname, i, sps[i]->resrec.rroriginalttl, CRDisplayString(m, sps[i]));
5114 mDNS_SetupQuestion(&intf->NetWakeResolve[i], intf->InterfaceID, &sps[i]->resrec.rdata->u.name, kDNSType_SRV, NetWakeResolve, intf);
5234 if (rr->resrec.RecordType == kDNSRecordTypeVerified && !rr->DependentOn) rr->resrec.RecordType = kDNSRecordTypeUnique;
5235 rr->ProbeCount = DefaultProbeCountForRecordType(rr->resrec.RecordType);
5462 mDNSu8 *p = PutResourceRecordTTL(response, responseptr, &response->h.numAnswers, &rr->resrec,
5463 maxttl < rr->resrec.rroriginalttl ? maxttl : rr->resrec.rroriginalttl);
5474 mDNSu8 *p = PutResourceRecordTTL(response, responseptr, &response->h.numAdditionals, &rr->resrec,
5475 maxttl < rr->resrec.rroriginalttl ? maxttl : rr->resrec.rroriginalttl);
5495 ourend = putRData(mDNSNULL, ourdata, ourdata + sizeof(ourdata), &our->resrec);
5496 pktend = putRData(mDNSNULL, pktdata, pktdata + sizeof(pktdata), &pkt->resrec);
5523 if (IdenticalResourceRecord(&r1->resrec, &pktrr->resrec))
5532 if (IdenticalResourceRecord(&r1->resrec, &pktrr->resrec))
5551 if (IdenticalResourceRecord(&rr->resrec, &pktrr->resrec))
5572 if (!(our->resrec.RecordType & kDNSRecordTypeUniqueMask)) return(mDNSfalse);
5607 if (m->rec.r.resrec.RecordType != kDNSRecordTypePacketNegative && ResourceRecordAnswersQuestion(&m->rec.r.resrec, q))
5612 int result = (int)our->resrec.rrclass - (int)m->rec.r.resrec.rrclass;
5613 if (!result) result = (int)our->resrec.rrtype - (int)m->rec.r.resrec.rrtype;
5618 LogMsg("ResolveSimultaneousProbe: %p Pkt Record: %08lX %s", q->InterfaceID, m->rec.r.resrec.rdatahash, CRDisplayString(m, &m->rec.r));
5619 LogMsg("ResolveSimultaneousProbe: %p Our Record %d %s %08lX %s", our->resrec.InterfaceID, our->ProbeCount, msg, our->resrec.rdatahash, ARDisplayString(m, our));
5636 LogMsg("ResolveSimultaneousProbe: %p Pkt Record: %08lX %s", q->InterfaceID, m->rec.r.resrec.rdatahash, CRDisplayString(m, &m->rec.r));
5637 LogMsg("ResolveSimultaneousProbe: %p Our Record %d ign: %08lX %s", our->resrec.InterfaceID, our->ProbeCount, our->resrec.rdatahash, ARDisplayString(m, our));
5641 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
5644 LogInfo("ResolveSimultaneousProbe: %##s (%s): No Update Record found", our->resrec.name->c, DNSTypeName(our->resrec.rrtype));
5646 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
5657 match = !pktrr->InterfaceID ? pktrr->rDNSServer == rr->resrec.rDNSServer : pktrr->InterfaceID == rr->resrec.InterfaceID;
5658 if (match && IdenticalSameNameRecord(pktrr, &rr->resrec)) break;
5673 if (m->rec.r.resrec.InterfaceID == rr->resrec.InterfaceID && mDNSSameEthAddress(&owner->HMAC, &rr->WakeUp.HMAC))
5674 if (IdenticalResourceRecord(&rr->resrec, &m->rec.r.resrec))
5681 SetSPSProxyListChanged(m->rec.r.resrec.InterfaceID);
5699 if (m->rec.r.resrec.InterfaceID == rr->resrec.InterfaceID && mDNSSameEthAddress(&owner->HMAC, &rr->WakeUp.HMAC))
5714 m->ProxyRecords, rr->AnnounceCount, rr->resrec.RecordType,
5716 if (rr->resrec.RecordType == kDNSRecordTypeDeregistering) rr->resrec.RecordType = kDNSRecordTypeShared;
5720 SetSPSProxyListChanged(m->rec.r.resrec.InterfaceID);
5755 if (ptr && m->rec.r.resrec.RecordType != kDNSRecordTypePacketNegative && m->rec.r.resrec.rrtype == kDNSType_OPT)
5758 const rdataOPT *const e = (const rdataOPT *)&m->rec.r.resrec.rdata->u.data[m->rec.r.resrec.rdlength];
5761 for (opt = &m->rec.r.resrec.rdata->u.opt[0]; opt < e; opt++)
5768 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
5809 if (AnyTypeRecordAnswersQuestion(&rr->resrec, &pktq) && (QueryWasMulticast || QueryWasLocalUnicast || rr->AllowRemoteQuery))
5811 if (RRTypeAnswersQuestionType(&rr->resrec, pktq.qtype))
5813 if (rr->resrec.RecordType == kDNSRecordTypeUnique)
5840 else if ((rr->resrec.RecordType & kDNSRecordTypeActiveUniqueMask) && ResourceRecordIsValidAnswer(rr))
5881 if (SameNameRecordAnswersQuestion(&cr->resrec, &pktq) && cr->resrec.rdlength <= SmallRecordLimit)
5938 if (m->rec.r.resrec.RecordType != kDNSRecordTypePacketNegative)
5970 ourcacherr = FindIdenticalRecordInCache(m, &m->rec.r.resrec);
5988 if (cr->resrec.InterfaceID == InterfaceID && IdenticalResourceRecord(&m->rec.r.resrec, &cr->resrec))
6000 if (ResourceRecordAnswersQuestion(&m->rec.r.resrec, q))
6006 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
6071 else if (rr->resrec.RecordType == kDNSRecordTypeShared) delayresponse = mDNSPlatformOneSecond; // Divided by 50 = 20ms
6122 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
6303 if (!q->DuplicateOf && ResourceRecordAnswersUnicastResponse(&rr->resrec, q))
6359 mDNSu16 RDLength = GetRDLengthMem(&m->rec.r.resrec);
6361 if (!m->rec.r.resrec.InterfaceID) debugf("CreateNewCacheEntry %s", CRDisplayString(m, &m->rec.r));
6366 if (!cg) cg = GetCacheGroup(m, slot, &m->rec.r.resrec); // If we don't have a CacheGroup for this name, make one now
6371 RData *saveptr = rr->resrec.rdata; // Save the rr->resrec.rdata pointer
6373 rr->resrec.rdata = saveptr; // Restore rr->resrec.rdata after the structure assignment
6374 rr->resrec.name = cg->name; // And set rr->resrec.name to point into our CacheGroup header
6378 if (rr->resrec.rdata == (RData*)&rr->smallrdatastorage && RDLength > InlineCacheRDSize)
6379 LogMsg("rr->resrec.rdata == &rr->rdatastorage but length > InlineCacheRDSize %##s", m->rec.r.resrec.name->c);
6380 else if (rr->resrec.rdata != (RData*)&rr->smallrdatastorage && RDLength <= InlineCacheRDSize)
6381 LogMsg("rr->resrec.rdata != &rr->rdatastorage but length <= InlineCacheRDSize %##s", m->rec.r.resrec.name->c);
6383 mDNSPlatformMemCopy(rr->resrec.rdata, m->rec.r.resrec.rdata, sizeofRDataHeader + RDLength);
6397 rr->resrec.rroriginalttl = ttl;
6553 if (SameNameRecordAnswersQuestion(&rr->resrec, qptr))
6556 rr->resrec.InterfaceID, CRDisplayString(m, rr));
6598 if (m->rec.r.resrec.RecordType == kDNSRecordTypePacketNegative) { m->rec.r.resrec.RecordType = 0; continue; }
6601 if (m->rec.r.resrec.rrtype == kDNSType_TSIG) { m->rec.r.resrec.RecordType = 0; continue; }
6602 if (m->rec.r.resrec.rrtype == kDNSType_OPT)
6605 const rdataOPT *const e = (const rdataOPT *)&m->rec.r.resrec.rdata->u.data[m->rec.r.resrec.rdlength];
6608 for (opt = &m->rec.r.resrec.rdata->u.opt[0]; opt < e; opt++)
6614 m->rec.r.resrec.RecordType = 0;
6619 if ((m->rec.r.resrec.rrtype == kDNSType_CNAME) && SameDomainName(m->rec.r.resrec.name, &m->rec.r.resrec.rdata->u.name))
6621 LogInfo("mDNSCoreReceiveResponse: CNAME loop domain name %##s", m->rec.r.resrec.name->c);
6622 m->rec.r.resrec.RecordType = 0;
6630 m->rec.r.resrec.rroriginalttl = GetEffectiveTTL(LLQType, m->rec.r.resrec.rroriginalttl);
6644 if (llqMatch != mDNSNULL) m->rec.r.resrec.rDNSServer = uDNSServer = llqMatch->qDNSServer;
6670 m->rec.r.resrec.rDNSServer = uDNSServer = q->qDNSServer;
6679 debugf("mDNSCoreReceiveResponse: Can't find question for record name %##s", m->rec.r.resrec.name->c);
6687 if (mDNSOpaque16IsZero(response->h.id) && m->rec.r.resrec.rrtype != kDNSType_NSEC)
6699 if (!AcceptableResponse && !(ResponseSrcLocal && rr->resrec.RecordType == kDNSRecordTypeUnique)) continue;
6704 if (IdenticalSameNameRecord(&m->rec.r.resrec, &rr->resrec))
6707 if (m->rec.r.resrec.rroriginalttl >= rr->resrec.rroriginalttl/2 || m->SleepState)
6719 else if (m->rec.r.resrec.rroriginalttl > 0 && PacketRRConflict(m, rr, &m->rec.r))
6721 LogInfo("mDNSCoreReceiveResponse: Pkt Record: %08lX %s", m->rec.r.resrec.rdatahash, CRDisplayString(m, &m->rec.r));
6722 LogInfo("mDNSCoreReceiveResponse: Our Record: %08lX %s", rr-> resrec.rdatahash, ARDisplayString(m, rr));
6729 LogInfo("mDNSCoreReceiveResponse: Dep Record: %08lX %s", rr-> resrec.rdatahash, ARDisplayString(m, rr));
6741 if (rr->resrec.RecordType == kDNSRecordTypeVerified)
6744 rr->resrec.RecordType = kDNSRecordTypeUnique;
6755 else if (rr->resrec.RecordType == kDNSRecordTypeUnique)
6765 else if (rr->resrec.RecordType == kDNSRecordTypeKnownUnique)
6771 LogMsg("mDNSCoreReceiveResponse: Unexpected record type %X %s", rr->resrec.RecordType, ARDisplayString(m, rr));
6778 else if (m->rec.r.resrec.rrtype == rr->resrec.rrtype)
6779 if ((m->rec.r.resrec.RecordType & kDNSRecordTypePacketUniqueMask) && m->timenow - rr->LastMCTime > mDNSPlatformOneSecond/2)
6790 domainname *target = GetRRDomainNameTarget(&cr->resrec);
6797 if (target && cr->resrec.rdatahash == m->rec.r.resrec.namehash && SameDomainName(target, m->rec.r.resrec.name))
6799 debugf("mDNSCoreReceiveResponse: Found a matching entry for %##s in the CacheFlushRecords", m->rec.r.resrec.name->c);
6801 m->rec.r.resrec.rDNSServer = uDNSServer;
6813 const mDNSu32 slot = HashSlot(m->rec.r.resrec.name);
6814 CacheGroup *cg = CacheGroupForRecord(m, slot, &m->rec.r.resrec);
6820 mDNSBool match = !InterfaceID ? m->rec.r.resrec.rDNSServer == rr->resrec.rDNSServer : rr->resrec.InterfaceID == InterfaceID;
6822 if (match && IdenticalSameNameRecord(&m->rec.r.resrec, &rr->resrec))
6824 if (m->rec.r.resrec.rdlength > InlineCacheRDSize)
6826 m->rec.r.resrec.rdlength, InterfaceID, CRDisplayString(m, &m->rec.r));
6828 if (m->rec.r.resrec.RecordType & kDNSRecordTypePacketUniqueMask)
6835 if (!(rr->resrec.RecordType & kDNSRecordTypePacketUniqueMask))
6838 for (q = m->Questions; q; q=q->next) if (ResourceRecordAnswersQuestion(&rr->resrec, q)) q->UniqueAnswers++;
6839 rr->resrec.RecordType = m->rec.r.resrec.RecordType;
6843 if (!SameRDataBody(&m->rec.r.resrec, &rr->resrec.rdata->u, SameDomainNameCS))
6849 rr->resrec.rroriginalttl = 0;
6859 else if (m->rec.r.resrec.rroriginalttl > 0)
6862 //if (rr->resrec.rroriginalttl == 0) LogMsg("uDNS rescuing %s", CRDisplayString(m, rr));
6863 RefreshCacheRecord(m, rr, m->rec.r.resrec.rroriginalttl);
6873 if (rr->resrec.RecordType & kDNSRecordTypePacketUniqueMask)
6878 ActiveQuestion(q) && ResourceRecordAnswersQuestion(&rr->resrec, q))
6906 rr->resrec.rroriginalttl = 1;
6918 if (!rr && m->rec.r.resrec.rroriginalttl > 0)
6920 const mDNSBool AddToCFList = (m->rec.r.resrec.RecordType & kDNSRecordTypePacketUniqueMask) && (LLQType != uDNS_LLQ_Events);
6922 CheckForSoonToExpireRecords(m, m->rec.r.resrec.name, m->rec.r.resrec.namehash, slot);
6935 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
6939 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
6946 const mDNSu32 slot = HashSlot(r1->resrec.name);
6947 const CacheGroup *cg = CacheGroupForRecord(m, slot, &r1->resrec);
6966 if ((r1->resrec.InterfaceID == r2->resrec.InterfaceID) &&
6967 (r1->resrec.InterfaceID || (r1->resrec.rDNSServer == r2->resrec.rDNSServer)) &&
6968 r1->resrec.rrtype == r2->resrec.rrtype &&
6969 r1->resrec.rrclass == r2->resrec.rrclass)
6986 if (r2->resrec.rroriginalttl != r1->resrec.rroriginalttl && r1->resrec.rroriginalttl > 1)
6988 if (!(r2->resrec.rroriginalttl == 240 && r1->resrec.rroriginalttl == 60 && r2->resrec.rrtype == kDNSType_TXT) &&
6991 r2->resrec.rroriginalttl, r1->resrec.rroriginalttl, CRDisplayString(m, r2));
6992 r2->resrec.rroriginalttl = r1->resrec.rroriginalttl;
7019 if (r2->TimeRcvd == m->timenow && r2->resrec.rroriginalttl == 1 && r2->UnansweredQueries == MaxUnansweredQueries)
7022 r2->resrec.rroriginalttl = 0;
7028 r2->resrec.rroriginalttl = 1;
7040 r1->DelayDelivery = CheckForSoonToExpireRecords(m, r1->resrec.name, r1->resrec.namehash, slot);
7060 if (SameNameRecordAnswersQuestion(&rr->resrec, qptr))
7065 if (rr->resrec.RecordType == kDNSRecordTypePacketNegative) neg = rr;
7113 if (ptr && m->rec.r.resrec.RecordType != kDNSRecordTypePacketNegative && m->rec.r.resrec.rrtype == kDNSType_SOA)
7115 const rdataSOA *const soa = (const rdataSOA *)m->rec.r.resrec.rdata->u.data;
7120 if (ttl_s > m->rec.r.resrec.rroriginalttl && m->rec.r.resrec.name->c[0])
7121 ttl_s = m->rec.r.resrec.rroriginalttl;
7131 int scount = CountLabels(m->rec.r.resrec.name);
7133 if (SameDomainName(SkipLeadingLabels(&q.qname, qcount - scount), m->rec.r.resrec.name))
7137 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
7148 if (negttl < neg->resrec.rroriginalttl * 2)
7149 negttl = neg->resrec.rroriginalttl * 2;
7159 debugf("Renewing negative TTL from %d to %d %s", neg->resrec.rroriginalttl, negttl, CRDisplayString(m, neg));
7167 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
7194 if (rr->resrec.InterfaceID == InterfaceID && rr->resrec.RecordType != kDNSRecordTypeDeregistering && mDNSSameEthAddress(&rr->WakeUp.HMAC, e))
7216 LogMsg("%-7s Conflicting mDNS -- waking %.6a %s", InterfaceNameForID(m, ar->resrec.InterfaceID), &ar->WakeUp.HMAC, ARDisplayString(m, ar));
7219 SendWakeup(m, ar->resrec.InterfaceID, &ar->WakeUp.IMAC, &ar->WakeUp.password); // Send one wakeup magic packet
7220 ScheduleWakeup(m, ar->resrec.InterfaceID, &ar->WakeUp.HMAC); // Schedule all other records with the same owner to be woken
7262 if (ptr && m->rec.r.resrec.RecordType != kDNSRecordTypePacketNegative && m->rec.r.resrec.rrtype == kDNSType_OPT)
7265 const rdataOPT *const e = (const rdataOPT *)&m->rec.r.resrec.rdata->u.data[m->rec.r.resrec.rdlength];
7266 for (o = &m->rec.r.resrec.rdata->u.opt[0]; o < e; o++)
7272 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
7313 if (ptr && m->rec.r.resrec.RecordType != kDNSRecordTypePacketNegative)
7315 mDNSu16 RDLengthMem = GetRDLengthMem(&m->rec.r.resrec);
7320 mDNSu8 RecordType = m->rec.r.resrec.RecordType & kDNSRecordTypePacketUniqueMask ? kDNSRecordTypeUnique : kDNSRecordTypeShared;
7321 m->rec.r.resrec.rrclass &= ~kDNSClass_UniqueRRSet;
7324 mDNS_SetupResourceRecord(ar, mDNSNULL, InterfaceID, m->rec.r.resrec.rrtype, m->rec.r.resrec.rroriginalttl, RecordType, AuthRecordAny, SPSRecordCallback, ar);
7325 AssignDomainName(&ar->namestorage, m->rec.r.resrec.name);
7326 ar->resrec.rdlength = GetRDLength(&m->rec.r.resrec, mDNSfalse);
7327 ar->resrec.rdata->MaxRDLength = RDLengthMem;
7328 mDNSPlatformMemCopy(ar->resrec.rdata->u.data, m->rec.r.resrec.rdata->u.data, RDLengthMem);
7331 if (m->rec.r.resrec.rrtype == kDNSType_PTR)
7333 mDNSs32 t = ReverseMapDomainType(m->rec.r.resrec.name);
7334 if (t == mDNSAddrType_IPv4) GetIPv4FromName(&ar->AddressProxy, m->rec.r.resrec.name);
7335 else if (t == mDNSAddrType_IPv6) GetIPv6FromName(&ar->AddressProxy, m->rec.r.resrec.name);
7350 if (ar->resrec.rrtype == kDNSType_AAAA) ar->resrec.rroriginalttl = 0;
7356 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
7368 opt.resrec.rrclass = NormalMaxDNSMessageData;
7369 opt.resrec.rdlength = sizeof(rdataOPT); // One option in this OPT record
7370 opt.resrec.rdestimate = sizeof(rdataOPT);
7371 opt.resrec.rdata->u.opt[0].opt = kDNSOpt_Lease;
7372 opt.resrec.rdata->u.opt[0].u.updatelease = updatelease;
7373 p = PutResourceRecordTTLWithLimit(&m->omsg, p, &m->omsg.h.numAdditionals, &opt.resrec, opt.resrec.rroriginalttl, m->omsg.data + AbsoluteMaxDNSMessageData);
7389 if (ptr && m->rec.r.resrec.RecordType != kDNSRecordTypePacketNegative && m->rec.r.resrec.rrtype == kDNSType_OPT)
7392 const rdataOPT *const e = (const rdataOPT *)&m->rec.r.resrec.rdata->u.data[m->rec.r.resrec.rdlength];
7393 for (o = &m->rec.r.resrec.rdata->u.opt[0]; o < e; o++)
7400 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it
7409 if (rr->resrec.InterfaceID == InterfaceID || (!rr->resrec.InterfaceID && (rr->ForceMCast || IsLocalDomain(rr->resrec.name))))
7436 if (cr == &m->rec.r && m->rec.r.resrec.RecordType)
7445 cr->resrec.RecordType = kDNSRecordTypePacketNegative;
7446 cr->resrec.InterfaceID = InterfaceID;
7447 cr->resrec.rDNSServer = dnsserver;
7448 cr->resrec.name = name; // Will be updated to point to cg->name when we call CreateNewCacheEntry
7449 cr->resrec.rrtype = rrtype;
7450 cr->resrec.rrclass = rrclass;
7451 cr->resrec.rroriginalttl = ttl_seconds;
7452 cr->resrec.rdlength = 0;
7453 cr->resrec.rdestimate = 0;
7454 cr->resrec.namehash = namehash;
7455 cr->resrec.rdatahash = 0;
7456 cr->resrec.rdata = (RData*)&cr->smallrdatastorage;
7457 cr->resrec.rdata->MaxRDLength = 0;
8106 if (rr->resrec.RecordType == kDNSRecordTypePacketNegative)
8113 if (SameNameRecordAnswersQuestion(&rr->resrec, q))
8119 if (rr->resrec.rdlength > SmallRecordLimit) q->LargeAnswers--;
8120 if (rr->resrec.RecordType & kDNSRecordTypePacketUniqueMask) q->UniqueAnswers--;
8131 if (qptr != q && ActiveQuestion(qptr) && ResourceRecordAnswersQuestion(&rr->resrec, qptr))
8579 if (ActiveQuestion(q) && ResourceRecordAnswersQuestion(&rr->resrec, q))
8708 if (rr->resrec.RecordType != kDNSRecordTypePacketNegative && SameNameRecordAnswersQuestion(&rr->resrec, question))
8712 question->QuestionCallback(m, question, &rr->resrec, mDNSfalse);
8724 if (status == mStatus_NoError) ReconfirmAntecedents(m, cr->resrec.name, cr->resrec.namehash, 0);
8737 if (status == mStatus_NoError) ReconfirmAntecedents(m, cr->resrec.name, cr->resrec.namehash, 0);
9083 if (!ValidateRData(rr->resrec.rrtype, newrdlength, newrdata))
9085 LogMsg("Attempt to update record with invalid rdata: %s", GetRRDisplayString_rdb(&rr->resrec, &newrdata->u, m->MsgBuffer));
9092 if (newttl == 0) newttl = rr->resrec.rroriginalttl;
9108 if (rr->ARType != AuthRecordLocalOnly && rr->ARType != AuthRecordP2P && !IsLocalDomain(rr->resrec.name))
9118 if (RRLocalOnly(rr) || (rr->resrec.rroriginalttl == newttl &&
9119 rr->resrec.rdlength == newrdlength && mDNSPlatformMemSame(rr->resrec.rdata->u.data, newrdata->u.data, newrdlength)))
9136 rr->resrec.name->c, delay, delay > 1 ? "s" : "");
9138 rr->resrec.rroriginalttl = newttl;
9189 set->RR_A.resrec.rrtype = kDNSType_A;
9190 set->RR_A.resrec.rdata->u.ipv4 = set->ip.ip.v4;
9198 set->RR_A.resrec.rrtype = kDNSType_AAAA;
9199 set->RR_A.resrec.rdata->u.ipv6 = set->ip.ip.v6;
9222 mDNSu8 *p = set->RR_HINFO.resrec.rdata->u.data;
9233 set->RR_HINFO.resrec.RecordType = kDNSRecordTypeUnregistered;
9253 if (set->RR_A. resrec.RecordType) mDNS_Deregister_internal(m, &set->RR_A, mDNS_Dereg_normal);
9254 if (set->RR_PTR. resrec.RecordType) mDNS_Deregister_internal(m, &set->RR_PTR, mDNS_Dereg_normal);
9255 if (set->RR_HINFO.resrec.RecordType) mDNS_Deregister_internal(m, &set->RR_HINFO, mDNS_Dereg_normal);
9300 debugf("mDNS_HostNameCallback: %##s (%s) %s (%ld)", rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype), msg, result);
9336 LogMsg("mDNS_HostNameCallback: Unknown error %d for registration of record %s", result, rr->resrec.name->c);
9359 debugf("RestartRecordGetZoneData: StartGetZoneData for %##s", rr->resrec.name->c);
9363 rr->nta = StartGetZoneData(m, rr->resrec.name, ZoneServiceUpdate, RecordRegistrationGotZoneData, rr);
9545 if (!rr->resrec.InterfaceID || rr->resrec.InterfaceID == set->InterfaceID)
9547 if (rr->resrec.RecordType == kDNSRecordTypeVerified && !rr->DependentOn) rr->resrec.RecordType = kDNSRecordTypeUnique;
9548 rr->ProbeCount = DefaultProbeCountForRecordType(rr->resrec.RecordType);
9643 if (rr->resrec.InterfaceID == set->InterfaceID)
9682 if (rr->resrec.InterfaceID == set->InterfaceID)
9704 debugf("ServiceCallback: %##s (%s) %s (%d)", rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype), msg, result);
9727 if (sr->RR_SRV.resrec.RecordType != kDNSRecordTypeUnregistered) return;
9728 if (sr->RR_TXT.resrec.RecordType != kDNSRecordTypeUnregistered) return;
9729 if (sr->RR_PTR.resrec.RecordType != kDNSRecordTypeUnregistered) return;
9730 if (sr->RR_ADV.resrec.RecordType != kDNSRecordTypeUnregistered) return;
9731 for (i=0; i<sr->NumSubTypes; i++) if (sr->SubTypes[i].resrec.RecordType != kDNSRecordTypeUnregistered) return;
9735 if (e->r.resrec.RecordType != kDNSRecordTypeUnregistered) return;
9745 LogInfo("ServiceCallback: All records %s for %##s", (result == mStatus_MemFree ? "Unregistered": "Registered"), sr->RR_PTR.resrec.name->c);
9816 if (sr->RR_TXT.resrec.rdata->MaxRDLength < txtlen)
9817 sr->RR_TXT.resrec.rdata->MaxRDLength = txtlen;
9826 AssignDomainName(&sr->RR_TXT.namestorage, sr->RR_SRV.resrec.name);
9829 AssignDomainName(&sr->RR_ADV.resrec.rdata->u.name, sr->RR_PTR.resrec.name);
9834 AssignDomainName(&sr->RR_PTR.resrec.rdata->u.name, sr->RR_SRV.resrec.name);
9844 AssignDomainName(&st, sr->SubTypes[i].resrec.name);
9849 AssignDomainName(&sr->SubTypes[i].resrec.rdata->u.name, &sr->RR_SRV.namestorage);
9855 sr->RR_SRV.resrec.rdata->u.srv.priority = 0;
9856 sr->RR_SRV.resrec.rdata->u.srv.weight = 0;
9857 sr->RR_SRV.resrec.rdata->u.srv.port = port;
9860 if (host && host->c[0]) AssignDomainName(&sr->RR_SRV.resrec.rdata->u.srv.target, host);
9861 else { sr->RR_SRV.AutoTarget = Target_AutoHost; sr->RR_SRV.resrec.rdata->u.srv.target.c[0] = '\0'; }
9866 if (txtinfo == mDNSNULL) sr->RR_TXT.resrec.rdlength = 0;
9867 else if (txtinfo != sr->RR_TXT.resrec.rdata->u.txt.c)
9869 sr->RR_TXT.resrec.rdlength = txtlen;
9870 if (sr->RR_TXT.resrec.rdlength > sr->RR_TXT.resrec.rdata->MaxRDLength) return(mStatus_BadParamErr);
9871 mDNSPlatformMemCopy(sr->RR_TXT.resrec.rdata->u.txt.c, txtinfo, txtlen);
9910 mDNSInterfaceID InterfaceID = sr->RR_PTR.resrec.InterfaceID;
9922 mDNS_SetupResourceRecord(&extra->r, rdata, sr->RR_PTR.resrec.InterfaceID,
9923 extra->r.resrec.rrtype, ttl, kDNSRecordTypeUnique, artype, ServiceCallback, sr);
9924 AssignDomainName(&extra->r.namestorage, sr->RR_SRV.resrec.name);
9935 extra->r.resrec.name->c, DNSTypeName(extra->r.resrec.rrtype), extra->r.resrec.rdlength);
9955 debugf("mDNS_RemoveRecordFromService failed to remove record from %##s", extra->r.resrec.name->c);
9960 debugf("mDNS_RemoveRecordFromService removing record from %##s", extra->r.resrec.name->c);
9976 const domainname *host = sr->RR_SRV.AutoTarget ? mDNSNULL : &sr->RR_SRV.resrec.rdata->u.srv.target;
9980 DeconstructServiceName(sr->RR_SRV.resrec.name, &name1, &type, &domain);
9993 host, sr->RR_SRV.resrec.rdata->u.srv.port, sr->RR_TXT.resrec.rdata->u.txt.c, sr->RR_TXT.resrec.rdlength,
9995 sr->RR_PTR.resrec.InterfaceID, sr->ServiceCallback, sr->ServiceContext, 0);
10004 err = mDNS_AddRecordToService(m, sr, e, e->r.resrec.rdata, e->r.resrec.rroriginalttl, 0);
10016 if (mDNSIPPortIsZero(sr->RR_SRV.resrec.rdata->u.srv.port)) return(mDNS_DeregisterNoSuchService(m, &sr->RR_SRV));
10018 if (sr->RR_PTR.resrec.RecordType == kDNSRecordTypeUnregistered)
10020 debugf("Service set for %##s already deregistered", sr->RR_SRV.resrec.name->c);
10023 else if (sr->RR_PTR.resrec.RecordType == kDNSRecordTypeDeregistering)
10025 LogInfo("Service set for %##s already in the process of deregistering", sr->RR_SRV.resrec.name->c);
10096 rr->resrec.rdata->u.srv.priority = 0;
10097 rr->resrec.rdata->u.srv.weight = 0;
10098 rr->resrec.rdata->u.srv.port = zeroIPPort;
10099 if (host && host->c[0]) AssignDomainName(&rr->resrec.rdata->u.srv.target, host);
10117 if (!MakeDomainNameFromDNSNameString(&rr->resrec.rdata->u.name, domname)) return(mStatus_BadParamErr);
10169 rr->resrec.RecordType = kDNSRecordTypeUnique;
10209 if (rr->resrec.InterfaceID == InterfaceID && rr->resrec.RecordType != kDNSRecordTypeDeregistering &&
10241 if (rr->resrec.InterfaceID == InterfaceID && rr->resrec.RecordType != kDNSRecordTypeDeregistering &&
10253 ScheduleWakeup(m, rr->resrec.InterfaceID, &rr->WakeUp.HMAC);
10292 if (rr->resrec.InterfaceID == InterfaceID && rr->resrec.RecordType != kDNSRecordTypeDeregistering &&
10329 if (rr->resrec.InterfaceID == InterfaceID && rr->resrec.RecordType != kDNSRecordTypeDeregistering &&
10340 ScheduleWakeup(m, rr->resrec.InterfaceID, &rr->WakeUp.HMAC);
10442 if (rr->resrec.InterfaceID == InterfaceID &&
10443 rr->resrec.RecordType != kDNSRecordTypeDeregistering &&
10448 if (r2->resrec.InterfaceID == InterfaceID && mDNSSameEthAddress(&r2->WakeUp.HMAC, &rr->WakeUp.HMAC) &&
10449 r2->resrec.RecordType != kDNSRecordTypeDeregistering &&
10450 r2->resrec.rrtype == kDNSType_SRV && mDNSSameIPPort(r2->resrec.rdata->u.srv.port, port) &&
10451 SameDomainLabel(ThirdLabel(r2->resrec.name)->c, tp))
10457 InterfaceNameForID(m, rr->resrec.InterfaceID), dst, &rr->WakeUp.HMAC, &rr->WakeUp.IMAC, ARDisplayString(m, r2));
10458 ScheduleWakeup(m, rr->resrec.InterfaceID, &rr->WakeUp.HMAC);
10462 InterfaceNameForID(m, rr->resrec.InterfaceID), dst, &rr->WakeUp.HMAC, tp, mDNSVal16(port));
10540 LogSPS("Sleep Proxy Server %#s %s", srs->RR_SRV.resrec.name->c, m->SPSState ? "started" : "stopped");
10631 m->rec.r.resrec.RecordType = 0;
10797 DeconstructServiceName(m->SPSRecords.RR_SRV.resrec.name, &name, &type, &domain);
10816 debugf("NameStatusCallback: result %d for registration of name %##s", result, rr->resrec.name->c);
10817 mDNSPlatformDynDNSHostNameStatusChanged(rr->resrec.name, result);
10822 mDNSBool purge = cr->resrec.RecordType == kDNSRecordTypePacketNegative ||
10823 cr->resrec.rrtype == kDNSType_A ||
10824 cr->resrec.rrtype == kDNSType_AAAA ||
10825 cr->resrec.rrtype == kDNSType_SRV;
10836 LogInfo("PurgeorReconfirmCacheRecord: Purging Resourcerecord %s, RecordType %x", CRDisplayString(m, cr), cr->resrec.RecordType);
10841 LogInfo("PurgeorReconfirmCacheRecord: Reconfirming Resourcerecord %s, RecordType %x", CRDisplayString(m, cr), cr->resrec.RecordType);
10854 if (SameNameRecordAnswersQuestion(&rp->resrec, q))
10920 if (SameNameRecordAnswersQuestion(&rp->resrec, q))
10922 LogInfo("CacheRecordResetDNSServer: Found cache record %##s for new DNSServer address: %#a", rp->resrec.name->c,
10923 (rp->resrec.rDNSServer != mDNSNULL ? &rp->resrec.rDNSServer->addr : mDNSNULL));
10932 if (SameNameRecordAnswersQuestion(&rp->resrec, q))
10938 LogInfo("CacheRecordResetDNSServer: Flushing Resourcerecord %##s, before:%#a, after:%#a", rp->resrec.name->c,
10939 (rp->resrec.rDNSServer != mDNSNULL ? &rp->resrec.rDNSServer->addr : mDNSNULL),
10956 " after:%#a, CRActiveQuestion %p", rp->resrec.name->c, (rp->resrec.rDNSServer != mDNSNULL ?
10957 &rp->resrec.rDNSServer->addr : mDNSNULL), (new != mDNSNULL ? &new->addr : mDNSNULL),
10962 rp->resrec.rDNSServer = new;
11090 if (cr->resrec.InterfaceID) continue;
11097 ptr = GetServerForName(m, cr->resrec.name, cr->CRActiveQuestion ? cr->CRActiveQuestion->InterfaceID : mDNSNULL);
11100 if (ptr && (ptr != cr->resrec.rDNSServer))
11185 if (cr->resrec.InterfaceID) continue;
11186 if (cr->resrec.rDNSServer == ptr)
11214 cr->resrec.rDNSServer = mDNSNULL;
11218 cr->resrec.rDNSServer = qptr->qDNSServer;
11224 cr->resrec.name, &cr->resrec.rDNSServer->addr, &ptr->addr);
11225 cr->resrec.rDNSServer = mDNSNULL;
11250 FORALL_CACHERECORDS(slot, cg, cr) if (!cr->resrec.InterfaceID) { mDNS_PurgeCacheResourceRecord(m, cr); count++; }
11315 (rr->resrec.RecordType != kDNSRecordTypeDeregistering) ? "Initiating " : "Accelerating",
11316 rr, rr->resrec.RecordType, ARDisplayString(m, rr));
11317 if (rr->resrec.RecordType != kDNSRecordTypeDeregistering)
11421 LogMsg("mDNS_StartExit: Should not still have Duplicate Records remaining: %02X %s", rr->resrec.RecordType, ARDisplayString(m, rr));
11463 LogMsg("mDNS_FinalExit failed to send goodbye for: %p %02X %s", rr, rr->resrec.RecordType, ARDisplayString(m, rr));