Lines Matching refs:rr

195     AuthRecord                  *rr;  in mDNS_ValidateLists()  local
196 for (rr = m->ResourceRecords; rr; rr=rr->next) in mDNS_ValidateLists()
198 … if (rr->next == (AuthRecord *)~0 || rr->resrec.RecordType == 0 || rr->resrec.RecordType == 0xFF) in mDNS_ValidateLists()
199 LogMemCorruption("ResourceRecords list: %p is garbage (%X)", rr, rr->resrec.RecordType); in mDNS_ValidateLists()
200 if (rr->resrec.name != &rr->namestorage) in mDNS_ValidateLists()
202 rr, rr->resrec.name->c, rr->namestorage.c, rr->namestorage.c); in mDNS_ValidateLists()
204 if (!AuthRecord_uDNS(rr) && !RRLocalOnly(rr)) NumAllInterfaceRecords++; in mDNS_ValidateLists()
208 for (rr = m->DuplicateRecords; rr; rr=rr->next) in mDNS_ValidateLists()
210 … if (rr->next == (AuthRecord *)~0 || rr->resrec.RecordType == 0 || rr->resrec.RecordType == 0xFF) in mDNS_ValidateLists()
211 … LogMemCorruption("DuplicateRecords list: %p is garbage (%X)", rr, rr->resrec.RecordType); in mDNS_ValidateLists()
213 if (!AuthRecord_uDNS(rr) && !RRLocalOnly(rr)) NumAllInterfaceRecords++; in mDNS_ValidateLists()
217 rr = m->NewLocalRecords; in mDNS_ValidateLists()
218 if (rr) in mDNS_ValidateLists()
219 … if (rr->next == (AuthRecord *)~0 || rr->resrec.RecordType == 0 || rr->resrec.RecordType == 0xFF) in mDNS_ValidateLists()
220 LogMemCorruption("NewLocalRecords: %p is garbage (%X)", rr, rr->resrec.RecordType); in mDNS_ValidateLists()
222 rr = m->CurrentRecord; in mDNS_ValidateLists()
223 if (rr) in mDNS_ValidateLists()
224 … if (rr->next == (AuthRecord *)~0 || rr->resrec.RecordType == 0 || rr->resrec.RecordType == 0xFF) in mDNS_ValidateLists()
225 LogMemCorruption("CurrentRecord: %p is garbage (%X)", rr, rr->resrec.RecordType); in mDNS_ValidateLists()
268 #define UniqueLocalOnlyRecord(rr) ((rr)->ARType == AuthRecordLocalOnly && \ argument
269 (rr)->resrec.RecordType & kDNSRecordTypeUniqueMask && \
270 … ((rr)->resrec.rrtype == kDNSType_A || (rr)->resrec.rrtype == kDNSType_AAAA || \
271 (rr)->resrec.rrtype == kDNSType_CNAME || \
272 (rr)->resrec.rrtype == kDNSType_PTR))
387 mDNSexport AuthGroup *AuthGroupForRecord(AuthHash *r, const ResourceRecord *const rr) in AuthGroupForRecord() argument
389 return(AuthGroupForName(r, rr->namehash, rr->name)); in AuthGroupForRecord()
392 mDNSlocal AuthGroup *GetAuthGroup(AuthHash *r, const ResourceRecord *const rr) in GetAuthGroup() argument
394 mDNSu16 namelen = DomainNameLength(rr->name); in GetAuthGroup()
396 const mDNSu32 slot = rr->namehash % AUTH_HASH_SLOTS; in GetAuthGroup()
397 …if (!ag) { LogMsg("GetAuthGroup: Failed to allocate memory for %##s", rr->name->c); return(mDNSNUL… in GetAuthGroup()
399 ag->namehash = rr->namehash; in GetAuthGroup()
409 LogMsg("GetAuthGroup: Failed to allocate name storage for %##s", rr->name->c); in GetAuthGroup()
413 AssignDomainName(ag->name, rr->name); in GetAuthGroup()
415 …if (AuthGroupForRecord(r, rr)) LogMsg("GetAuthGroup: Already have AuthGroup for %##s", rr->name->c… in GetAuthGroup()
417 …if (AuthGroupForRecord(r, rr) != ag) LogMsg("GetAuthGroup: Not finding AuthGroup for %##s", rr->na… in GetAuthGroup()
423 mDNSexport AuthGroup *InsertAuthRecord(mDNS *const m, AuthHash *r, AuthRecord *rr) in InsertAuthRecord() argument
428 ag = AuthGroupForRecord(r, &rr->resrec); in InsertAuthRecord()
429 …if (!ag) ag = GetAuthGroup(r, &rr->resrec); // If we don't have a AuthGroup for this name, make … in InsertAuthRecord()
432 *(ag->rrauth_tail) = rr; // Append this record to tail of cache slot list in InsertAuthRecord()
433 ag->rrauth_tail = &(rr->next); // Advance tail pointer in InsertAuthRecord()
438 mDNSexport AuthGroup *RemoveAuthRecord(mDNS *const m, AuthHash *r, AuthRecord *rr) in RemoveAuthRecord() argument
443 a = AuthGroupForRecord(r, &rr->resrec); in RemoveAuthRecord()
444 …if (!a) { LogMsg("RemoveAuthRecord: ERROR!! AuthGroup not found for %s", ARDisplayString(m, rr)); … in RemoveAuthRecord()
448 if (*rp != rr) in RemoveAuthRecord()
454 LogInfo("RemoveAuthRecord: removing auth record %s from table", ARDisplayString(m, rr)); in RemoveAuthRecord()
473 mDNSlocal CacheGroup *CacheGroupForRecord(const mDNS *const m, const ResourceRecord *const rr) in CacheGroupForRecord() argument
475 return(CacheGroupForName(m, rr->namehash, rr->name)); in CacheGroupForRecord()
568 mDNSexport void AnswerQuestionByFollowingCNAME(mDNS *const m, DNSQuestion *q, ResourceRecord *rr) in AnswerQuestionByFollowingCNAME() argument
570 const mDNSBool selfref = SameDomainName(&q->qname, &rr->rdata->u.name); in AnswerQuestionByFollowingCNAME()
576 q->CNAMEReferrals, selfref ? " (Self-Referential)" : "", RRDisplayString(m, rr)); in AnswerQuestionByFollowingCNAME()
607 q->CNAMEReferrals, RRDisplayString(m, rr)); in AnswerQuestionByFollowingCNAME()
639 AssignDomainName(&q->qname, &rr->rdata->u.name); // Update qname in AnswerQuestionByFollowingCNAME()
648 …NSVal16(q->TargetQID), q, DM_NAME_PARAM(&q->qname), DNSTypeName(q->qtype), RRDisplayString(m, rr)); in AnswerQuestionByFollowingCNAME()
752 mDNSlocal void AnswerLocalQuestionWithLocalAuthRecord(mDNS *const m, AuthRecord *rr, QC_result AddR… in AnswerLocalQuestionWithLocalAuthRecord() argument
759 …ithLocalAuthRecord: ERROR!! CurrentQuestion NULL while answering with %s", ARDisplayString(m, rr)); in AnswerLocalQuestionWithLocalAuthRecord()
763 followcname = FollowCNAME(q, &rr->resrec, AddRecord); in AnswerLocalQuestionWithLocalAuthRecord()
766 if (!(rr->resrec.RecordType & kDNSRecordTypeActiveMask)) in AnswerLocalQuestionWithLocalAuthRecord()
769 AddRecord ? "Add" : "Rmv", rr->resrec.RecordType, ARDisplayString(m, rr)); in AnswerLocalQuestionWithLocalAuthRecord()
774 if (AddRecord) rr->AnsweredLocalQ = mDNStrue; in AnswerLocalQuestionWithLocalAuthRecord()
779 if (UniqueLocalOnlyRecord(rr)) in AnswerLocalQuestionWithLocalAuthRecord()
786 q->QuestionCallback(m, q, &rr->resrec, AddRecord); in AnswerLocalQuestionWithLocalAuthRecord()
792 AnswerQuestionByFollowingCNAME(m, q, &rr->resrec); in AnswerLocalQuestionWithLocalAuthRecord()
797 q->QuestionCallback(m, q, &rr->resrec, AddRecord); in AnswerLocalQuestionWithLocalAuthRecord()
874 mDNSlocal mDNSBool ResourceRecordIsValidAnswer(const AuthRecord *const rr) in ResourceRecordIsValidAnswer() argument
876 if ((rr->resrec.RecordType & kDNSRecordTypeActiveMask) && in ResourceRecordIsValidAnswer()
877 …((rr->Additional1 == mDNSNULL) || (rr->Additional1->resrec.RecordType & kDNSRecordTypeActiveMask))… in ResourceRecordIsValidAnswer()
878 …((rr->Additional2 == mDNSNULL) || (rr->Additional2->resrec.RecordType & kDNSRecordTypeActiveMask))… in ResourceRecordIsValidAnswer()
879 …((rr->DependentOn == mDNSNULL) || (rr->DependentOn->resrec.RecordType & kDNSRecordTypeActiveMask))) in ResourceRecordIsValidAnswer()
889 mDNSlocal mDNSBool IsInterfaceValidForAuthRecord(const AuthRecord *const rr, const mDNSInterfaceID … in IsInterfaceValidForAuthRecord() argument
891 if (rr->resrec.InterfaceID == mDNSInterface_Any) in IsInterfaceValidForAuthRecord()
893 return mDNSPlatformValidRecordForInterface(rr, InterfaceID); in IsInterfaceValidForAuthRecord()
897 return ((rr->resrec.InterfaceID == InterfaceID) ? mDNStrue : mDNSfalse); in IsInterfaceValidForAuthRecord()
901 mDNSlocal mDNSBool ResourceRecordIsValidInterfaceAnswer(const AuthRecord *const rr, const mDNSInter… in ResourceRecordIsValidInterfaceAnswer() argument
903 …return ((IsInterfaceValidForAuthRecord(rr, interfaceID) && ResourceRecordIsValidAnswer(rr)) ? mDNS… in ResourceRecordIsValidInterfaceAnswer()
1015 …NSlocal mDNSBool ShouldSuppressKnownAnswer(const CacheRecord *const ka, const AuthRecord *const rr) in ShouldSuppressKnownAnswer() argument
1018 if (!IdenticalResourceRecord(&ka->resrec, &rr->resrec)) return(mDNSfalse); in ShouldSuppressKnownAnswer()
1029 return (mDNSBool)(ka->resrec.rroriginalttl >= rr->resrec.rroriginalttl / 2); in ShouldSuppressKnownAnswer()
1032 mDNSlocal void SetNextAnnounceProbeTime(mDNS *const m, const AuthRecord *const rr) in SetNextAnnounceProbeTime() argument
1034 if (rr->resrec.RecordType == kDNSRecordTypeUnique) in SetNextAnnounceProbeTime()
1036 if ((rr->LastAPTime + rr->ThisAPInterval) - m->timenow > mDNSPlatformOneSecond * 10) in SetNextAnnounceProbeTime()
1038 …: ProbeCount %d Next in %d %s", rr->ProbeCount, (rr->LastAPTime + rr->ThisAPInterval) - m->timenow… in SetNextAnnounceProbeTime()
1041 if (m->NextScheduledProbe - (rr->LastAPTime + rr->ThisAPInterval) >= 0) in SetNextAnnounceProbeTime()
1042 m->NextScheduledProbe = (rr->LastAPTime + rr->ThisAPInterval); in SetNextAnnounceProbeTime()
1050 …else if (rr->AnnounceCount && (ResourceRecordIsValidAnswer(rr) || rr->resrec.RecordType == kDNSRec… in SetNextAnnounceProbeTime()
1052 if (m->NextScheduledResponse - (rr->LastAPTime + rr->ThisAPInterval) >= 0) in SetNextAnnounceProbeTime()
1053 m->NextScheduledResponse = (rr->LastAPTime + rr->ThisAPInterval); in SetNextAnnounceProbeTime()
1057 mDNSlocal void InitializeLastAPTime(mDNS *const m, AuthRecord *const rr) in InitializeLastAPTime() argument
1060rr->ThisAPInterval = rr->AddressProxy.type ? mDNSPlatformOneSecond : DefaultAPIntervalForRecordTyp… in InitializeLastAPTime()
1073 if (rr->ProbeCount) in InitializeLastAPTime()
1075 rr->ProbingConflictCount = 0; in InitializeLastAPTime()
1115 rr->LastAPTime = m->SuppressProbes - rr->ThisAPInterval; in InitializeLastAPTime()
1119 …else if ((rr->resrec.RecordType != kDNSRecordTypeKnownUnique) && (rr->resrec.RecordType != kDNSRec… in InitializeLastAPTime()
1120rr->LastAPTime = m->SuppressProbes - rr->ThisAPInterval + DefaultProbeIntervalForTypeUnique * Defa… in InitializeLastAPTime()
1122 rr->LastAPTime = m->timenow - rr->ThisAPInterval; in InitializeLastAPTime()
1130 if (rr->AddressProxy.type) in InitializeLastAPTime()
1131 rr->LastAPTime = m->timenow; in InitializeLastAPTime()
1135 rr->LastMCTime = m->timenow; in InitializeLastAPTime()
1136 rr->LastMCInterface = mDNSInterfaceMark; in InitializeLastAPTime()
1138 SetNextAnnounceProbeTime(m, rr); in InitializeLastAPTime()
1141 mDNSlocal const domainname *SetUnicastTargetToHostName(mDNS *const m, AuthRecord *rr) in SetUnicastTargetToHostName() argument
1144 if (rr->AutoTarget) in SetUnicastTargetToHostName()
1146 rr->AutoTarget = Target_AutoHostAndNATMAP; in SetUnicastTargetToHostName()
1149 target = GetServiceTarget(m, rr); in SetUnicastTargetToHostName()
1153 LogInfo("SetUnicastTargetToHostName No target for %s", ARDisplayString(m, rr)); in SetUnicastTargetToHostName()
1154 rr->state = regState_NoTarget; in SetUnicastTargetToHostName()
1159 …"SetUnicastTargetToHostName target %##s for resource record %s", target->c, ARDisplayString(m,rr)); in SetUnicastTargetToHostName()
1173 mDNSlocal void SetTargetToHostName(mDNS *const m, AuthRecord *const rr) in SetTargetToHostName() argument
1175 domainname *const target = GetRRDomainNameTarget(&rr->resrec); in SetTargetToHostName()
1179 if (AuthRecordIncludesOrIsAWDL(rr)) in SetTargetToHostName()
1188 …tTargetToHostName: Don't know how to set the target of rrtype %s", DNSTypeName(rr->resrec.rrtype)); in SetTargetToHostName()
1190 …if (!(rr->ForceMCast || rr->ARType == AuthRecordLocalOnly || rr->ARType == AuthRecordP2P || IsLoca… in SetTargetToHostName()
1192 const domainname *const n = SetUnicastTargetToHostName(m, rr); in SetTargetToHostName()
1194 else { if (target) target->c[0] = 0; SetNewRData(&rr->resrec, mDNSNULL, 0); return; } in SetTargetToHostName()
1198 … debugf("SetTargetToHostName: Target of %##s is already %##s", rr->resrec.name->c, target->c); in SetTargetToHostName()
1203 SetNewRData(&rr->resrec, mDNSNULL, 0); // Update rdlength, rdestimate, rdatahash in SetTargetToHostName()
1208 rr->ProbeCount = DefaultProbeCountForRecordType(rr->resrec.RecordType); in SetTargetToHostName()
1213 if (rr->RequireGoodbye && rr->resrec.RecordType == kDNSRecordTypeShared) in SetTargetToHostName()
1215 rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype)); in SetTargetToHostName()
1217 rr->AnnounceCount = InitialAnnounceCount; in SetTargetToHostName()
1218 rr->RequireGoodbye = mDNSfalse; in SetTargetToHostName()
1219 rr->ProbeRestartCount = 0; in SetTargetToHostName()
1220 InitializeLastAPTime(m, rr); in SetTargetToHostName()
1224 mDNSlocal void AcknowledgeRecord(mDNS *const m, AuthRecord *const rr) in AcknowledgeRecord() argument
1226 if (rr->RecordCallback) in AcknowledgeRecord()
1230 rr->Acknowledged = mDNStrue; in AcknowledgeRecord()
1232 rr->RecordCallback(m, rr, mStatus_NoError); in AcknowledgeRecord()
1237 mDNSexport void ActivateUnicastRegistration(mDNS *const m, AuthRecord *const rr) in ActivateUnicastRegistration() argument
1243 if (rr->resrec.rrtype != kDNSType_SRV) in ActivateUnicastRegistration()
1246 if (rr->resrec.rrtype == kDNSType_PTR) in ActivateUnicastRegistration()
1247 srvRR = rr->Additional1; in ActivateUnicastRegistration()
1248 else if (rr->resrec.rrtype == kDNSType_TXT) in ActivateUnicastRegistration()
1249 srvRR = rr->DependentOn; in ActivateUnicastRegistration()
1259 … ARDisplayString(m, srvRR), srvRR->state, rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype)); in ActivateUnicastRegistration()
1260 rr->state = srvRR->state; in ActivateUnicastRegistration()
1265 if (rr->state == regState_NoTarget) in ActivateUnicastRegistration()
1267 …tivateUnicastRegistration record %s in regState_NoTarget, not activating", ARDisplayString(m, rr)); in ActivateUnicastRegistration()
1275 if (rr->resrec.RecordType == kDNSRecordTypeDeregistering) in ActivateUnicastRegistration()
1277 … Resource record %s, current state %d, moving to DeregPending", ARDisplayString(m, rr), rr->state); in ActivateUnicastRegistration()
1278 rr->state = regState_DeregPending; in ActivateUnicastRegistration()
1282 …tion: Resource record %s, current state %d, moving to Pending", ARDisplayString(m, rr), rr->state); in ActivateUnicastRegistration()
1283 rr->state = regState_Pending; in ActivateUnicastRegistration()
1285 rr->ProbingConflictCount = 0; in ActivateUnicastRegistration()
1286 rr->LastConflictPktNum = 0; in ActivateUnicastRegistration()
1287 rr->ProbeRestartCount = 0; in ActivateUnicastRegistration()
1288 rr->ProbeCount = 0; in ActivateUnicastRegistration()
1289 rr->AnnounceCount = 0; in ActivateUnicastRegistration()
1290 rr->ThisAPInterval = INIT_RECORD_REG_INTERVAL; in ActivateUnicastRegistration()
1291 rr->LastAPTime = m->timenow - rr->ThisAPInterval; in ActivateUnicastRegistration()
1292 rr->expire = 0; // Forget about all the leases, start fresh in ActivateUnicastRegistration()
1293 rr->uselease = mDNStrue; in ActivateUnicastRegistration()
1294 rr->updateid = zeroID; in ActivateUnicastRegistration()
1295 rr->SRVChanged = mDNSfalse; in ActivateUnicastRegistration()
1296 rr->updateError = mStatus_NoError; in ActivateUnicastRegistration()
1299 if (rr->NATinfo.clientContext) in ActivateUnicastRegistration()
1301 mDNS_StopNATOperation_internal(m, &rr->NATinfo); in ActivateUnicastRegistration()
1302 rr->NATinfo.clientContext = mDNSNULL; in ActivateUnicastRegistration()
1304 if (rr->nta) { CancelGetZoneData(m, rr->nta); rr->nta = mDNSNULL; } in ActivateUnicastRegistration()
1305 if (rr->tcp) { DisposeTCPConn(rr->tcp); rr->tcp = mDNSNULL; } in ActivateUnicastRegistration()
1306 if (m->NextuDNSEvent - (rr->LastAPTime + rr->ThisAPInterval) >= 0) in ActivateUnicastRegistration()
1307 m->NextuDNSEvent = (rr->LastAPTime + rr->ThisAPInterval); in ActivateUnicastRegistration()
1321 mDNSlocal AuthRecord *CheckAuthIdenticalRecord(AuthHash *r, AuthRecord *rr) in CheckAuthIdenticalRecord() argument
1326 a = AuthGroupForRecord(r, &rr->resrec); in CheckAuthIdenticalRecord()
1331 if (!RecordIsLocalDuplicate(rp, rr)) in CheckAuthIdenticalRecord()
1346 mDNSlocal mDNSBool CheckAuthRecordConflict(AuthHash *r, AuthRecord *rr) in CheckAuthRecordConflict() argument
1351 a = AuthGroupForRecord(r, &rr->resrec); in CheckAuthRecordConflict()
1356 const AuthRecord *s1 = rr->RRSet ? rr->RRSet : rr; in CheckAuthRecordConflict()
1358 …if (s1 != s2 && SameResourceRecordSignature(rp, rr) && !IdenticalSameNameRecord(&rp->resrec, &rr->… in CheckAuthRecordConflict()
1367 mDNSlocal AuthRecord *CheckAuthSameRecord(AuthHash *r, AuthRecord *rr) in CheckAuthSameRecord() argument
1372 a = AuthGroupForRecord(r, &rr->resrec); in CheckAuthSameRecord()
1377 if (rp != rr) in CheckAuthSameRecord()
1387 mDNSlocal void DecrementAutoTargetServices(mDNS *const m, AuthRecord *const rr) in DecrementAutoTargetServices() argument
1389 if (RRLocalOnly(rr)) in DecrementAutoTargetServices()
1392 …ogInfo("DecrementAutoTargetServices: called for RRLocalOnly() record: %s", ARDisplayString(m, rr)); in DecrementAutoTargetServices()
1396 …if (!AuthRecord_uDNS(rr) && (rr->resrec.rrtype == kDNSType_SRV) && (rr->AutoTarget == Target_AutoH… in DecrementAutoTargetServices()
1402 if (AuthRecordIncludesOrIsAWDL(rr)) in DecrementAutoTargetServices()
1404 if (AuthRecordIncludesAWDL(rr)) in DecrementAutoTargetServices()
1409 m->AutoTargetAWDLIncludedCount, ARDisplayString(m, rr)); in DecrementAutoTargetServices()
1421 m->AutoTargetAWDLOnlyCount, ARDisplayString(m, rr)); in DecrementAutoTargetServices()
1453 m->AutoTargetServices, ARDisplayString(m, rr)); in DecrementAutoTargetServices()
1465 if (!AuthRecord_uDNS(rr)) in DecrementAutoTargetServices()
1472 m->NumAllInterfaceRecords, m->NumAllInterfaceQuestions, ARDisplayString(m, rr)); in DecrementAutoTargetServices()
1486 mDNSlocal void IncrementAutoTargetServices(mDNS *const m, AuthRecord *const rr) in IncrementAutoTargetServices() argument
1490 if (RRLocalOnly(rr)) in IncrementAutoTargetServices()
1493 …ogInfo("IncrementAutoTargetServices: called for RRLocalOnly() record: %s", ARDisplayString(m, rr)); in IncrementAutoTargetServices()
1498 if (!AuthRecord_uDNS(rr)) in IncrementAutoTargetServices()
1503 m->NumAllInterfaceRecords, m->NumAllInterfaceQuestions, ARDisplayString(m, rr)); in IncrementAutoTargetServices()
1519 …if (!AuthRecord_uDNS(rr) && (rr->resrec.rrtype == kDNSType_SRV) && (rr->AutoTarget == Target_AutoH… in IncrementAutoTargetServices()
1522 if (AuthRecordIncludesAWDL(rr)) in IncrementAutoTargetServices()
1527 m->AutoTargetAWDLIncludedCount, ARDisplayString(m, rr)); in IncrementAutoTargetServices()
1529 else if (mDNSPlatformInterfaceIsAWDL(rr->resrec.InterfaceID)) in IncrementAutoTargetServices()
1534 m->AutoTargetAWDLOnlyCount, ARDisplayString(m, rr)); in IncrementAutoTargetServices()
1542 m->AutoTargetServices, ARDisplayString(m, rr)); in IncrementAutoTargetServices()
1552 mDNSlocal void getKeepaliveRaddr(mDNS *const m, AuthRecord *rr, mDNSAddr *raddr) in getKeepaliveRaddr() argument
1563 if (mDNS_KeepaliveRecord(&rr->resrec)) in getKeepaliveRaddr()
1565 … mDNS_ExtractKeepaliveInfo(rr, &timeout, &laddr, raddr, &eth, &seq, &ack, &lport, &rport, &win); in getKeepaliveRaddr()
1568 …dr: not a valid record %s for keepalive %#a:%d %#a:%d", ARDisplayString(m, rr), &laddr, lport.NotA… in getKeepaliveRaddr()
1575 mDNSexport mStatus mDNS_Register_internal(mDNS *const m, AuthRecord *const rr) in mDNS_Register_internal() argument
1577 domainname *target = GetRRDomainNameTarget(&rr->resrec); in mDNS_Register_internal()
1582 if ((mDNSs32)rr->resrec.rroriginalttl <= 0) in mDNS_Register_internal()
1583 …ister_internal: TTL %X should be 1 - 0x7FFFFFFF %s", rr->resrec.rroriginalttl, ARDisplayString(m, in mDNS_Register_internal()
1585 if (!rr->resrec.RecordType) in mDNS_Register_internal()
1586 …{ LogMsg("mDNS_Register_internal: RecordType must be non-zero %s", ARDisplayString(m, rr)); return… in mDNS_Register_internal()
1589 …{ LogMsg("mDNS_Register_internal: Shutting down, can't register %s", ARDisplayString(m, rr)); retu… in mDNS_Register_internal()
1591 if (m->DivertMulticastAdvertisements && !AuthRecord_uDNS(rr)) in mDNS_Register_internal()
1593 mDNSInterfaceID previousID = rr->resrec.InterfaceID; in mDNS_Register_internal()
1594 … if (rr->resrec.InterfaceID == mDNSInterface_Any || rr->resrec.InterfaceID == mDNSInterface_P2P) in mDNS_Register_internal()
1596 rr->resrec.InterfaceID = mDNSInterface_LocalOnly; in mDNS_Register_internal()
1597 rr->ARType = AuthRecordLocalOnly; in mDNS_Register_internal()
1599 if (rr->resrec.InterfaceID != mDNSInterface_LocalOnly) in mDNS_Register_internal()
1601 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, rr->resrec.InterfaceID); in mDNS_Register_internal()
1602 …if (intf && !intf->Advertise) { rr->resrec.InterfaceID = mDNSInterface_LocalOnly; rr->ARType = Aut… in mDNS_Register_internal()
1604 if (rr->resrec.InterfaceID != previousID) in mDNS_Register_internal()
1605 … LogInfo("mDNS_Register_internal: Diverting record to local-only %s", ARDisplayString(m, rr)); in mDNS_Register_internal()
1608 if (RRLocalOnly(rr)) in mDNS_Register_internal()
1610 if (CheckAuthSameRecord(&m->rrauth, rr)) in mDNS_Register_internal()
1613 rr, rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype)); in mDNS_Register_internal()
1619 while (*p && *p != rr) p=&(*p)->next; in mDNS_Register_internal()
1623 rr, rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype)); in mDNS_Register_internal()
1628 while (*d && *d != rr) d=&(*d)->next; in mDNS_Register_internal()
1632 rr, rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype)); in mDNS_Register_internal()
1636 if (rr->DependentOn) in mDNS_Register_internal()
1638 if (rr->resrec.RecordType == kDNSRecordTypeUnique) in mDNS_Register_internal()
1639 rr->resrec.RecordType = kDNSRecordTypeVerified; in mDNS_Register_internal()
1640 else if (rr->resrec.RecordType != kDNSRecordTypeKnownUnique) in mDNS_Register_internal()
1643 rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype)); in mDNS_Register_internal()
1646 …if (!(rr->DependentOn->resrec.RecordType & (kDNSRecordTypeUnique | kDNSRecordTypeVerified | kDNSRe… in mDNS_Register_internal()
1649rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype), rr->DependentOn->resrec.RecordType); in mDNS_Register_internal()
1654 rr->next = mDNSNULL; in mDNS_Register_internal()
1670 if (rr->AutoTarget && target) target->c[0] = 0; in mDNS_Register_internal()
1673 rr->Acknowledged = mDNSfalse; in mDNS_Register_internal()
1674 rr->ProbeCount = DefaultProbeCountForRecordType(rr->resrec.RecordType); in mDNS_Register_internal()
1675 rr->ProbeRestartCount = 0; in mDNS_Register_internal()
1676 rr->AnnounceCount = InitialAnnounceCount; in mDNS_Register_internal()
1677 rr->RequireGoodbye = mDNSfalse; in mDNS_Register_internal()
1678 rr->AnsweredLocalQ = mDNSfalse; in mDNS_Register_internal()
1679 rr->IncludeInProbe = mDNSfalse; in mDNS_Register_internal()
1680 rr->ImmedUnicast = mDNSfalse; in mDNS_Register_internal()
1681 rr->SendNSECNow = mDNSNULL; in mDNS_Register_internal()
1682 rr->ImmedAnswer = mDNSNULL; in mDNS_Register_internal()
1683 rr->ImmedAdditional = mDNSNULL; in mDNS_Register_internal()
1684 rr->SendRNow = mDNSNULL; in mDNS_Register_internal()
1685 rr->v4Requester = zerov4Addr; in mDNS_Register_internal()
1686 rr->v6Requester = zerov6Addr; in mDNS_Register_internal()
1687 rr->NextResponse = mDNSNULL; in mDNS_Register_internal()
1688 rr->NR_AnswerTo = mDNSNULL; in mDNS_Register_internal()
1689 rr->NR_AdditionalTo = mDNSNULL; in mDNS_Register_internal()
1690 if (!rr->AutoTarget) InitializeLastAPTime(m, rr); in mDNS_Register_internal()
1694 rr->NewRData = mDNSNULL; in mDNS_Register_internal()
1695 rr->newrdlength = 0; in mDNS_Register_internal()
1696 rr->UpdateCallback = mDNSNULL; in mDNS_Register_internal()
1697 rr->UpdateCredits = kMaxUpdateCredits; in mDNS_Register_internal()
1698 rr->NextUpdateCredit = 0; in mDNS_Register_internal()
1699 rr->UpdateBlocked = 0; in mDNS_Register_internal()
1702 if (rr->WakeUp.HMAC.l[0] && !rr->AddressProxy.type) rr->AnnounceCount = 2; in mDNS_Register_internal()
1705 rr->state = regState_Zero; in mDNS_Register_internal()
1706 rr->uselease = 0; in mDNS_Register_internal()
1707 rr->expire = 0; in mDNS_Register_internal()
1708 rr->Private = 0; in mDNS_Register_internal()
1709 rr->updateid = zeroID; in mDNS_Register_internal()
1710 rr->updateIntID = zeroOpaque64; in mDNS_Register_internal()
1711 rr->zone = rr->resrec.name; in mDNS_Register_internal()
1712 rr->nta = mDNSNULL; in mDNS_Register_internal()
1713 rr->tcp = mDNSNULL; in mDNS_Register_internal()
1714 rr->OrigRData = 0; in mDNS_Register_internal()
1715 rr->OrigRDLen = 0; in mDNS_Register_internal()
1716 rr->InFlightRData = 0; in mDNS_Register_internal()
1717 rr->InFlightRDLen = 0; in mDNS_Register_internal()
1718 rr->QueuedRData = 0; in mDNS_Register_internal()
1719 rr->QueuedRDLen = 0; in mDNS_Register_internal()
1736 …if (rr->resrec.rrtype == kDNSType_TXT && rr->resrec.rdlength == 0) { rr->resrec.rdlength = 1; rr->… in mDNS_Register_internal()
1738 if (rr->AutoTarget) in mDNS_Register_internal()
1740 …SetTargetToHostName(m, rr); // Also sets rdlength and rdestimate for us, and calls InitializeLastA… in mDNS_Register_internal()
1744 if (rr->state == regState_NoTarget) in mDNS_Register_internal()
1747 domainname *tar = GetRRDomainNameTarget(&rr->resrec); in mDNS_Register_internal()
1749 LogInfo("mDNS_Register_internal: record %s in NoTarget state", ARDisplayString(m, rr)); in mDNS_Register_internal()
1755 rr->resrec.rdlength = GetRDLength(&rr->resrec, mDNSfalse); in mDNS_Register_internal()
1756 rr->resrec.rdestimate = GetRDLength(&rr->resrec, mDNStrue); in mDNS_Register_internal()
1759 if (!ValidateDomainName(rr->resrec.name)) in mDNS_Register_internal()
1760 …{ LogMsg("Attempt to register record with invalid name: %s", ARDisplayString(m, rr)); return(mStat… in mDNS_Register_internal()
1763 if (!ValidateRData(rr->resrec.rrtype, rr->resrec.rdlength, rr->resrec.rdata)) in mDNS_Register_internal()
1764 …{ LogMsg("Attempt to register record with invalid rdata: %s", ARDisplayString(m, rr)); return(mSta… in mDNS_Register_internal()
1766 rr->resrec.namehash = DomainNameHashValue(rr->resrec.name); in mDNS_Register_internal()
1767 rr->resrec.rdatahash = target ? DomainNameHashValue(target) : RDataHashValue(&rr->resrec); in mDNS_Register_internal()
1769 if (RRLocalOnly(rr)) in mDNS_Register_internal()
1777 if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask) in mDNS_Register_internal()
1779 if (CheckAuthRecordConflict(&m->rrauth, rr)) in mDNS_Register_internal()
1781 …r_internal: Name conflict %s (%p), InterfaceID %p", ARDisplayString(m, rr), rr, rr->resrec.Interfa… in mDNS_Register_internal()
1789 if (AuthRecord_uDNS(rr)) in mDNS_Register_internal()
1791 if (!m->NewLocalRecords) m->NewLocalRecords = rr; in mDNS_Register_internal()
1795 *p = rr; in mDNS_Register_internal()
1796 … if (rr->resrec.RecordType == kDNSRecordTypeUnique) rr->resrec.RecordType = kDNSRecordTypeVerified; in mDNS_Register_internal()
1797 rr->ProbeCount = 0; in mDNS_Register_internal()
1798 rr->ProbeRestartCount = 0; in mDNS_Register_internal()
1799 rr->AnnounceCount = 0; in mDNS_Register_internal()
1800 if (rr->state != regState_NoTarget) ActivateUnicastRegistration(m, rr); in mDNS_Register_internal()
1806 if (RRLocalOnly(rr)) in mDNS_Register_internal()
1808 rr->ProbeCount = 0; in mDNS_Register_internal()
1809 rr->ProbeRestartCount = 0; in mDNS_Register_internal()
1810 rr->AnnounceCount = 0; in mDNS_Register_internal()
1811 r = CheckAuthIdenticalRecord(&m->rrauth, rr); in mDNS_Register_internal()
1816 if (RecordIsLocalDuplicate(r, rr)) in mDNS_Register_internal()
1825 LogInfo("mDNS_Register_internal: Adding to duplicate list %s", ARDisplayString(m,rr)); in mDNS_Register_internal()
1826 *d = rr; in mDNS_Register_internal()
1831 …if (rr->resrec.RecordType == kDNSRecordTypeUnique && r->resrec.RecordType == kDNSRecordTypeVerifie… in mDNS_Register_internal()
1832 rr->ProbeCount = 0; in mDNS_Register_internal()
1836 LogInfo("mDNS_Register_internal: Adding to active record list %s", ARDisplayString(m,rr)); in mDNS_Register_internal()
1837 if (RRLocalOnly(rr)) in mDNS_Register_internal()
1840 ag = InsertAuthRecord(m, &m->rrauth, rr); in mDNS_Register_internal()
1844 ag->NewLocalOnlyRecords = rr; in mDNS_Register_internal()
1847 … if (rr->resrec.RecordType == kDNSRecordTypeUnique) rr->resrec.RecordType = kDNSRecordTypeVerified; in mDNS_Register_internal()
1848 AcknowledgeRecord(m, rr); in mDNS_Register_internal()
1853 if (!m->NewLocalRecords) m->NewLocalRecords = rr; in mDNS_Register_internal()
1854 *p = rr; in mDNS_Register_internal()
1858 …if (!AuthRecord_uDNS(rr)) // This check is superfluous, given that for unicast records we (curre… in mDNS_Register_internal()
1861 IncrementAutoTargetServices(m, rr); in mDNS_Register_internal()
1864 …if (rr->resrec.RecordType != kDNSRecordTypeUnique && rr->resrec.RecordType != kDNSRecordTypeDeregi… in mDNS_Register_internal()
1865 AcknowledgeRecord(m, rr); in mDNS_Register_internal()
1873 if (!rr->WakeUp.HMAC.l[0] && mDNS_KeepaliveRecord(&rr->resrec)) in mDNS_Register_internal()
1878 rr->resrec.RecordType = kDNSRecordTypeKnownUnique; in mDNS_Register_internal()
1879 rr->AnnounceCount = 0; in mDNS_Register_internal()
1880 getKeepaliveRaddr(m, rr, &raddr); in mDNS_Register_internal()
1889 mDNSlocal void RecordProbeFailure(mDNS *const m, const AuthRecord *const rr) in RecordProbeFailure() argument
1904 m->NumFailedProbes, rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype)); in RecordProbeFailure()
1908 mDNSlocal void CompleteRDataUpdate(mDNS *const m, AuthRecord *const rr) in CompleteRDataUpdate() argument
1910 RData *OldRData = rr->resrec.rdata; in CompleteRDataUpdate()
1911 mDNSu16 OldRDLen = rr->resrec.rdlength; in CompleteRDataUpdate()
1912 SetNewRData(&rr->resrec, rr->NewRData, rr->newrdlength); // Update our rdata in CompleteRDataUpdate()
1913 rr->NewRData = mDNSNULL; // Clear the NewRData pointer ... in CompleteRDataUpdate()
1914 if (rr->UpdateCallback) in CompleteRDataUpdate()
1915 rr->UpdateCallback(m, rr, OldRData, OldRDLen); // ... and let the client know in CompleteRDataUpdate()
1921 mDNSexport mStatus mDNS_Deregister_internal(mDNS *const m, AuthRecord *const rr, mDNS_Dereg_type dr… in mDNS_Deregister_internal() argument
1924 mDNSu8 RecordType = rr->resrec.RecordType; in mDNS_Deregister_internal()
1928 if (RRLocalOnly(rr)) in mDNS_Deregister_internal()
1933 a = AuthGroupForRecord(&m->rrauth, &rr->resrec); in mDNS_Deregister_internal()
1936 while (*rp && *rp != rr) rp=&(*rp)->next; in mDNS_Deregister_internal()
1941 while (*p && *p != rr) p=&(*p)->next; in mDNS_Deregister_internal()
1951 …for (r2 = m->DuplicateRecords; r2; r2=r2->next) if (RecordIsLocalDuplicate(r2, rr)) r2->ProbeCount… in mDNS_Deregister_internal()
1958 while (*d && !RecordIsLocalDuplicate(*d, rr)) d=&(*d)->next; in mDNS_Deregister_internal()
1963 dup, rr, rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype)); in mDNS_Deregister_internal()
1965 if (RRLocalOnly(rr)) in mDNS_Deregister_internal()
1972 dup->next = rr->next; // And then... in mDNS_Deregister_internal()
1973rr->next = dup; // ... splice it in right after the record we're about to delete in mDNS_Deregister_internal()
1975 dup->resrec.RecordType = rr->resrec.RecordType; in mDNS_Deregister_internal()
1976 dup->ProbeCount = rr->ProbeCount; in mDNS_Deregister_internal()
1977 dup->ProbeRestartCount = rr->ProbeRestartCount; in mDNS_Deregister_internal()
1978 dup->AnnounceCount = rr->AnnounceCount; in mDNS_Deregister_internal()
1979 dup->RequireGoodbye = rr->RequireGoodbye; in mDNS_Deregister_internal()
1980 dup->AnsweredLocalQ = rr->AnsweredLocalQ; in mDNS_Deregister_internal()
1981 dup->ImmedAnswer = rr->ImmedAnswer; in mDNS_Deregister_internal()
1982 dup->ImmedUnicast = rr->ImmedUnicast; in mDNS_Deregister_internal()
1983 dup->ImmedAdditional = rr->ImmedAdditional; in mDNS_Deregister_internal()
1984 dup->v4Requester = rr->v4Requester; in mDNS_Deregister_internal()
1985 dup->v6Requester = rr->v6Requester; in mDNS_Deregister_internal()
1986 dup->ThisAPInterval = rr->ThisAPInterval; in mDNS_Deregister_internal()
1987 dup->LastAPTime = rr->LastAPTime; in mDNS_Deregister_internal()
1988 dup->LastMCTime = rr->LastMCTime; in mDNS_Deregister_internal()
1989 dup->LastMCInterface = rr->LastMCInterface; in mDNS_Deregister_internal()
1990 dup->Private = rr->Private; in mDNS_Deregister_internal()
1991 dup->state = rr->state; in mDNS_Deregister_internal()
1992 rr->RequireGoodbye = mDNSfalse; in mDNS_Deregister_internal()
1993 rr->AnsweredLocalQ = mDNSfalse; in mDNS_Deregister_internal()
2001 while (*p && *p != rr) p=&(*p)->next; in mDNS_Deregister_internal()
2011 rr->WakeUp.HMAC = zeroEthAddr; in mDNS_Deregister_internal()
2012 rr->RequireGoodbye = mDNSfalse; in mDNS_Deregister_internal()
2013 rr->resrec.RecordType = kDNSRecordTypeDeregistering; in mDNS_Deregister_internal()
2017 rr, rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype)); in mDNS_Deregister_internal()
2024 … LogMsg("mDNS_Deregister_internal: Record %p not found in list %s", rr, ARDisplayString(m,rr)); in mDNS_Deregister_internal()
2043 if (AuthRecord_uDNS(rr)) in mDNS_Deregister_internal()
2045 if (rr->RequireGoodbye) in mDNS_Deregister_internal()
2047 if (rr->tcp) { DisposeTCPConn(rr->tcp); rr->tcp = mDNSNULL; } in mDNS_Deregister_internal()
2048 rr->resrec.RecordType = kDNSRecordTypeDeregistering; in mDNS_Deregister_internal()
2050 uDNS_DeregisterRecord(m, rr); in mDNS_Deregister_internal()
2060 rr->updateid = zeroID; in mDNS_Deregister_internal()
2069 if (rr->NATinfo.clientContext) in mDNS_Deregister_internal()
2071 mDNS_StopNATOperation_internal(m, &rr->NATinfo); in mDNS_Deregister_internal()
2072 rr->NATinfo.clientContext = mDNSNULL; in mDNS_Deregister_internal()
2074 if (rr->nta) { CancelGetZoneData(m, rr->nta); rr->nta = mDNSNULL; } in mDNS_Deregister_internal()
2075 if (rr->tcp) { DisposeTCPConn(rr->tcp); rr->tcp = mDNSNULL; } in mDNS_Deregister_internal()
2080 …("mDNS_Deregister_internal: %s already marked kDNSRecordTypeUnregistered", ARDisplayString(m, rr)); in mDNS_Deregister_internal()
2083 …"mDNS_Deregister_internal: %s already marked kDNSRecordTypeDeregistering", ARDisplayString(m, rr)); in mDNS_Deregister_internal()
2087 if (rr->WakeUp.HMAC.l[0] || in mDNS_Deregister_internal()
2088 (((RecordType == kDNSRecordTypeShared) || (rr->ARType == AuthRecordLocalOnly)) && in mDNS_Deregister_internal()
2089 (rr->RequireGoodbye || rr->AnsweredLocalQ))) in mDNS_Deregister_internal()
2091 … verbosedebugf("mDNS_Deregister_internal: Starting deregistration for %s", ARDisplayString(m, rr)); in mDNS_Deregister_internal()
2092 rr->resrec.RecordType = kDNSRecordTypeDeregistering; in mDNS_Deregister_internal()
2093 rr->resrec.rroriginalttl = 0; in mDNS_Deregister_internal()
2094rr->AnnounceCount = rr->WakeUp.HMAC.l[0] ? WakeupCount : (drt == mDNS_Dereg_rapid) ? 1 : Go… in mDNS_Deregister_internal()
2095 rr->ThisAPInterval = mDNSPlatformOneSecond * 2; in mDNS_Deregister_internal()
2096 rr->LastAPTime = m->timenow - rr->ThisAPInterval; in mDNS_Deregister_internal()
2103 if (!dupList && RRLocalOnly(rr)) in mDNS_Deregister_internal()
2105 AuthGroup *ag = RemoveAuthRecord(m, &m->rrauth, rr); in mDNS_Deregister_internal()
2106 if (ag->NewLocalOnlyRecords == rr) ag->NewLocalOnlyRecords = rr->next; in mDNS_Deregister_internal()
2110 *p = rr->next; // Cut this record from the list in mDNS_Deregister_internal()
2111 if (m->NewLocalRecords == rr) m->NewLocalRecords = rr->next; in mDNS_Deregister_internal()
2112 DecrementAutoTargetServices(m, rr); in mDNS_Deregister_internal()
2115 if (m->CurrentRecord == rr) m->CurrentRecord = rr->next; in mDNS_Deregister_internal()
2116 rr->next = mDNSNULL; in mDNS_Deregister_internal()
2118 verbosedebugf("mDNS_Deregister_internal: Deleting record for %s", ARDisplayString(m, rr)); in mDNS_Deregister_internal()
2119 rr->resrec.RecordType = kDNSRecordTypeUnregistered; in mDNS_Deregister_internal()
2123 rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype)); in mDNS_Deregister_internal()
2126 …if (rr->NewRData) CompleteRDataUpdate(m, rr); // Update our rdata, clear the NewRData pointer, a… in mDNS_Deregister_internal()
2136 … LogInfo("mDNS_Deregister_internal: callback with mStatus_MemFree for %s", ARDisplayString(m, rr)); in mDNS_Deregister_internal()
2137 if (rr->RecordCallback) in mDNS_Deregister_internal()
2138 rr->RecordCallback(m, rr, mStatus_MemFree); // MUST NOT touch rr after this in mDNS_Deregister_internal()
2143 RecordProbeFailure(m, rr); in mDNS_Deregister_internal()
2145 if (rr->RecordCallback) in mDNS_Deregister_internal()
2146 rr->RecordCallback(m, rr, mStatus_NameConflict); // MUST NOT touch rr after this in mDNS_Deregister_internal()
2182 mDNSlocal void AddRecordToResponseList(AuthRecord ***nrpp, AuthRecord *rr, AuthRecord *add) in AddRecordToResponseList() argument
2184 if (rr->NextResponse == mDNSNULL && *nrpp != &rr->NextResponse) in AddRecordToResponseList()
2186 **nrpp = rr; in AddRecordToResponseList()
2191 rr->NR_AdditionalTo = add; in AddRecordToResponseList()
2192 *nrpp = &rr->NextResponse; in AddRecordToResponseList()
2194 …debugf("AddRecordToResponseList: %##s (%s) already in list", rr->resrec.name->c, DNSTypeName(rr->r… in AddRecordToResponseList()
2197 mDNSlocal void AddRRSetAdditionalsToResponseList(mDNS *const m, AuthRecord ***nrpp, AuthRecord *rr,… in AddRRSetAdditionalsToResponseList() argument
2212 AddRecordToResponseList(nrpp, rr2, rr); in AddRRSetAdditionalsToResponseList()
2220 AuthRecord *rr, *rr2; in AddAdditionalsToResponseList() local
2221 for (rr=ResponseRecords; rr; rr=rr->NextResponse) // For each record we plan to put in AddAdditionalsToResponseList()
2225 if (rr->Additional1 && ResourceRecordIsValidInterfaceAnswer(rr->Additional1, InterfaceID)) in AddAdditionalsToResponseList()
2227 AddRecordToResponseList(nrpp, rr->Additional1, rr); in AddAdditionalsToResponseList()
2228 AddRRSetAdditionalsToResponseList(m, nrpp, rr, rr->Additional1, InterfaceID); in AddAdditionalsToResponseList()
2231 if (rr->Additional2 && ResourceRecordIsValidInterfaceAnswer(rr->Additional2, InterfaceID)) in AddAdditionalsToResponseList()
2233 AddRecordToResponseList(nrpp, rr->Additional2, rr); in AddAdditionalsToResponseList()
2234 AddRRSetAdditionalsToResponseList(m, nrpp, rr, rr->Additional2, InterfaceID); in AddAdditionalsToResponseList()
2238 if (rr->resrec.rrtype == kDNSType_SRV) in AddAdditionalsToResponseList()
2243rr->resrec.rdatahash == rr2->resrec.namehash && // ... whose name is the name of the SRV t… in AddAdditionalsToResponseList()
2244 SameDomainName(&rr->resrec.rdata->u.srv.target, rr2->resrec.name)) in AddAdditionalsToResponseList()
2245 AddRecordToResponseList(nrpp, rr2, rr); in AddAdditionalsToResponseList()
2247 …else if (RRTypeIsAddressType(rr->resrec.rrtype)) // For A or AAAA, put counterpart as additional in AddAdditionalsToResponseList()
2252rr->resrec.namehash == rr2->resrec.namehash && // ... and have the same name in AddAdditionalsToResponseList()
2253 SameDomainName(rr->resrec.name, rr2->resrec.name)) in AddAdditionalsToResponseList()
2254 AddRecordToResponseList(nrpp, rr2, rr); in AddAdditionalsToResponseList()
2256 …else if (rr->resrec.rrtype == kDNSType_PTR) // For service PTR, see if we want to add Devi… in AddAdditionalsToResponseList()
2259 SameDomainLabel(rr->resrec.rdata->u.name.c, m->DeviceInfo.resrec.name->c)) in AddAdditionalsToResponseList()
2260 AddRecordToResponseList(nrpp, &m->DeviceInfo, rr); in AddAdditionalsToResponseList()
2267 AuthRecord *rr; in SendDelayedUnicastResponse() local
2273 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendDelayedUnicastResponse()
2276 if (rr->ImmedAnswer == mDNSInterfaceMark || in SendDelayedUnicastResponse()
2277 mDNSSameIPv4Address(rr->v4Requester, onesIPv4Addr) || in SendDelayedUnicastResponse()
2278 mDNSSameIPv6Address(rr->v6Requester, onesIPv6Addr) ) in SendDelayedUnicastResponse()
2279 rr->ImmedUnicast = mDNSfalse; in SendDelayedUnicastResponse()
2281 if (rr->ImmedUnicast && rr->ImmedAnswer == InterfaceID) in SendDelayedUnicastResponse()
2283 … if ((dest->type == mDNSAddrType_IPv4 && mDNSSameIPv4Address(rr->v4Requester, dest->ip.v4)) || in SendDelayedUnicastResponse()
2284 … (dest->type == mDNSAddrType_IPv6 && mDNSSameIPv6Address(rr->v6Requester, dest->ip.v6))) in SendDelayedUnicastResponse()
2286 rr->ImmedAnswer = mDNSNULL; // Clear the state fields in SendDelayedUnicastResponse()
2287 rr->ImmedUnicast = mDNSfalse; in SendDelayedUnicastResponse()
2288 rr->v4Requester = zerov4Addr; in SendDelayedUnicastResponse()
2289 rr->v6Requester = zerov6Addr; in SendDelayedUnicastResponse()
2292 if (intf && !mDNSPlatformValidRecordForInterface(rr, intf->InterfaceID)) in SendDelayedUnicastResponse()
2297 if (rr->NextResponse == mDNSNULL && nrp != &rr->NextResponse) // rr->NR_AnswerTo in SendDelayedUnicastResponse()
2299 rr->NR_AnswerTo = NR_AnswerMulticast; in SendDelayedUnicastResponse()
2300 *nrp = rr; in SendDelayedUnicastResponse()
2301 nrp = &rr->NextResponse; in SendDelayedUnicastResponse()
2318 rr = ResponseRecords; in SendDelayedUnicastResponse()
2319 if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask) in SendDelayedUnicastResponse()
2320rr->resrec.rrclass |= kDNSClass_UniqueRRSet; // Temporarily set the cache flush bit so PutR… in SendDelayedUnicastResponse()
2322 newptr = PutResourceRecord(&m->omsg, responseptr, &m->omsg.h.numAnswers, &rr->resrec); in SendDelayedUnicastResponse()
2324rr->resrec.rrclass &= ~kDNSClass_UniqueRRSet; // Make sure to clear cache flush bit back… in SendDelayedUnicastResponse()
2330 ResponseRecords = rr->NextResponse; in SendDelayedUnicastResponse()
2331 rr->NextResponse = mDNSNULL; in SendDelayedUnicastResponse()
2332 rr->NR_AnswerTo = mDNSNULL; in SendDelayedUnicastResponse()
2333 rr->NR_AdditionalTo = mDNSNULL; in SendDelayedUnicastResponse()
2334 rr->RequireGoodbye = mDNStrue; in SendDelayedUnicastResponse()
2340 rr = ResponseRecords; in SendDelayedUnicastResponse()
2341 if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask) in SendDelayedUnicastResponse()
2342rr->resrec.rrclass |= kDNSClass_UniqueRRSet; // Temporarily set the cache flush bit so PutR… in SendDelayedUnicastResponse()
2343 … newptr = PutResourceRecord(&m->omsg, responseptr, &m->omsg.h.numAdditionals, &rr->resrec); in SendDelayedUnicastResponse()
2344rr->resrec.rrclass &= ~kDNSClass_UniqueRRSet; // Make sure to clear cache flush bit back… in SendDelayedUnicastResponse()
2347 if (newptr && m->omsg.h.numAnswers) rr->RequireGoodbye = mDNStrue; in SendDelayedUnicastResponse()
2348 … else if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask) rr->ImmedAnswer = mDNSInterfaceMark; in SendDelayedUnicastResponse()
2349 ResponseRecords = rr->NextResponse; in SendDelayedUnicastResponse()
2350 rr->NextResponse = mDNSNULL; in SendDelayedUnicastResponse()
2351 rr->NR_AnswerTo = mDNSNULL; in SendDelayedUnicastResponse()
2352 rr->NR_AdditionalTo = mDNSNULL; in SendDelayedUnicastResponse()
2362 mDNSexport void CompleteDeregistration(mDNS *const m, AuthRecord *rr) in CompleteDeregistration() argument
2364 LogInfo("CompleteDeregistration: called for Resource record %s", ARDisplayString(m, rr)); in CompleteDeregistration()
2367 rr->resrec.RecordType = kDNSRecordTypeShared; in CompleteDeregistration()
2368 rr->RequireGoodbye = mDNSfalse; in CompleteDeregistration()
2369 rr->WakeUp.HMAC = zeroEthAddr; in CompleteDeregistration()
2370 …if (rr->AnsweredLocalQ) { AnswerAllLocalQuestionsWithLocalAuthRecord(m, rr, QC_rmv); rr->AnsweredL… in CompleteDeregistration()
2371 mDNS_Deregister_internal(m, rr, mDNS_Dereg_normal); // Don't touch rr after this in CompleteDeregistration()
2387 AuthRecord *rr = m->CurrentRecord; in DiscardDeregistrations() local
2388 if (!AuthRecord_uDNS(rr) && rr->resrec.RecordType == kDNSRecordTypeDeregistering) in DiscardDeregistrations()
2389 CompleteDeregistration(m, rr); // Don't touch rr after this in DiscardDeregistrations()
2391 m->CurrentRecord = rr->next; in DiscardDeregistrations()
2464 mDNSlocal void SendARP(mDNS *const m, const mDNSu8 op, const AuthRecord *const rr, in SendARP() argument
2469 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, rr->resrec.InterfaceID); in SendARP()
2470 …"SendARP: No interface with InterfaceID %p found %s", rr->resrec.InterfaceID, ARDisplayString(m,rr in SendARP()
2501 mDNSPlatformSendRawPacket(m->omsg.data, ptr, rr->resrec.InterfaceID); in SendARP()
2529 …Slocal void SendNDP(mDNS *const m, const mDNSu8 op, const mDNSu8 flags, const AuthRecord *const rr, in SendNDP() argument
2540 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, rr->resrec.InterfaceID); in SendNDP()
2541 …"SendNDP: No interface with InterfaceID %p found %s", rr->resrec.InterfaceID, ARDisplayString(m,rr in SendNDP()
2626 mDNSPlatformSendRawPacket(m->omsg.data, ptr, rr->resrec.InterfaceID); in SendNDP()
2653 mDNSlocal void GrantUpdateCredit(AuthRecord *rr) in GrantUpdateCredit() argument
2655 if (++rr->UpdateCredits >= kMaxUpdateCredits) rr->NextUpdateCredit = 0; in GrantUpdateCredit()
2656 else rr->NextUpdateCredit = NonZeroTime(rr->NextUpdateCredit + kUpdateCreditRefreshInterval); in GrantUpdateCredit()
2659 …Bool ShouldSendGoodbyesBeforeSleep(mDNS *const m, const NetworkInterfaceInfo *intf, AuthRecord *rr) in ShouldSendGoodbyesBeforeSleep() argument
2666 if ((rr->AuthFlags & AuthFlagsWakeOnly) && (m->SleepState != SleepState_Awake)) in ShouldSendGoodbyesBeforeSleep()
2668 debugf("ShouldSendGoodbyesBeforeSleep: marking for goodbye", ARDisplayString(m, rr)); in ShouldSendGoodbyesBeforeSleep()
2679 …ndGoodbyesBeforeSleep: not sending goodbye %s, int %p", ARDisplayString(m, rr), intf->InterfaceID); in ShouldSendGoodbyesBeforeSleep()
2684 …debugf("ShouldSendGoodbyesBeforeSleep: sending goodbye %s, int %p", ARDisplayString(m, rr), intf->… in ShouldSendGoodbyesBeforeSleep()
2708 AuthRecord *rr, *r2; in SendResponses() local
2716 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendResponses()
2717 if (rr->ImmedUnicast) in SendResponses()
2721 v4.ip.v4 = rr->v4Requester; in SendResponses()
2722 v6.ip.v6 = rr->v6Requester; in SendResponses()
2723 … if (!mDNSIPv4AddressIsZero(rr->v4Requester)) SendDelayedUnicastResponse(m, &v4, rr->ImmedAnswer); in SendResponses()
2724 … if (!mDNSIPv6AddressIsZero(rr->v6Requester)) SendDelayedUnicastResponse(m, &v6, rr->ImmedAnswer); in SendResponses()
2725 if (rr->ImmedUnicast) in SendResponses()
2727 … LogMsg("SendResponses: ERROR: rr->ImmedUnicast still set: %s", ARDisplayString(m, rr)); in SendResponses()
2728 rr->ImmedUnicast = mDNSfalse; in SendResponses()
2737 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendResponses()
2739 … while (rr->NextUpdateCredit && m->timenow - rr->NextUpdateCredit >= 0) GrantUpdateCredit(rr); in SendResponses()
2740 if (TimeToAnnounceThisRecord(rr, m->timenow)) in SendResponses()
2742 if (rr->resrec.RecordType == kDNSRecordTypeDeregistering) in SendResponses()
2744 if (!rr->WakeUp.HMAC.l[0]) in SendResponses()
2746 …if (rr->AnnounceCount) rr->ImmedAnswer = mDNSInterfaceMark; // Send goodbye packet on all inte… in SendResponses()
2751 …ndResponses: Sending wakeup %2d for %.6a %s", rr->AnnounceCount-3, &rr->WakeUp.IMAC, ARDisplayStri… in SendResponses()
2752 …unicastOnly = ((rr->AnnounceCount == WakeupCount) || (rr->AnnounceCount == WakeupCount - 1)) ? mDN… in SendResponses()
2753 … SendWakeup(m, rr->resrec.InterfaceID, &rr->WakeUp.IMAC, &rr->WakeUp.password, unicastOnly); in SendResponses()
2754 for (r2 = rr; r2; r2=r2->next) in SendResponses()
2755 …ecordTypeDeregistering) && r2->AnnounceCount && (r2->resrec.InterfaceID == rr->resrec.InterfaceID)… in SendResponses()
2756 …mDNSSameEthAddress(&r2->WakeUp.IMAC, &rr->WakeUp.IMAC) && !mDNSSameEthAddress(&zeroEthAddr, &r2->W… in SendResponses()
2772 else if (ResourceRecordIsValidAnswer(rr)) in SendResponses()
2774 if (rr->AddressProxy.type) in SendResponses()
2776 if (!mDNSSameEthAddress(&zeroEthAddr, &rr->WakeUp.HMAC)) in SendResponses()
2778 rr->AnnounceCount--; in SendResponses()
2779 rr->ThisAPInterval *= 2; in SendResponses()
2780 rr->LastAPTime = m->timenow; in SendResponses()
2781 if (rr->AddressProxy.type == mDNSAddrType_IPv4) in SendResponses()
2784rr->AnnounceCount, &rr->WakeUp.HMAC, &rr->WakeUp.IMAC, ARDisplayString(m,rr)); in SendResponses()
2785 … SendARP(m, 1, rr, &rr->AddressProxy.ip.v4, &zeroEthAddr, &rr->AddressProxy.ip.v4, &onesEthAddr); in SendResponses()
2787 else if (rr->AddressProxy.type == mDNSAddrType_IPv6) in SendResponses()
2790rr->AnnounceCount, &rr->WakeUp.HMAC, &rr->WakeUp.IMAC, ARDisplayString(m,rr)); in SendResponses()
2791 …SendNDP(m, NDP_Adv, NDP_Override, rr, &rr->AddressProxy.ip.v6, mDNSNULL, &AllHosts_v6, &AllHosts_v… in SendResponses()
2797 rr->ImmedAnswer = mDNSInterfaceMark; // Send on all interfaces in SendResponses()
2798 if (maxExistingAnnounceInterval < rr->ThisAPInterval) in SendResponses()
2799 maxExistingAnnounceInterval = rr->ThisAPInterval; in SendResponses()
2800 if (rr->UpdateBlocked) rr->UpdateBlocked = 0; in SendResponses()
2808 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendResponses()
2809 if ((rr->resrec.InterfaceID && rr->ImmedAnswer) || in SendResponses()
2810 (rr->ThisAPInterval <= maxExistingAnnounceInterval && in SendResponses()
2811 TimeToAnnounceThisRecord(rr, m->timenow + rr->ThisAPInterval/2) && in SendResponses()
2812 …!rr->AddressProxy.type && // Don't include ARP Annoucements when considering whic… in SendResponses()
2813 ResourceRecordIsValidAnswer(rr))) in SendResponses()
2814 rr->ImmedAnswer = mDNSInterfaceMark; // Send on all interfaces in SendResponses()
2820 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendResponses()
2822 if (rr->ImmedAnswer && rr->resrec.rrtype == kDNSType_SRV) in SendResponses()
2826rr->LastMCTime - r2->LastMCTime >= 0 && // ... which we have not sent recently ... in SendResponses()
2827rr->resrec.rdatahash == r2->resrec.namehash && // ... whose name is the name of the SRV target in SendResponses()
2828 SameDomainName(&rr->resrec.rdata->u.srv.target, r2->resrec.name) && in SendResponses()
2829 … (rr->ImmedAnswer == mDNSInterfaceMark || rr->ImmedAnswer == r2->resrec.InterfaceID)) in SendResponses()
2834 …if (rr->ImmedAnswer && rr->resrec.RecordType == kDNSRecordTypeShared && rr->resrec.rrtype == kDNST… in SendResponses()
2835 …if (ResourceRecordIsValidAnswer(&m->DeviceInfo) && SameDomainLabel(rr->resrec.rdata->u.name.c, m->… in SendResponses()
2837 if (!m->DeviceInfo.ImmedAnswer) m->DeviceInfo.ImmedAnswer = rr->ImmedAnswer; in SendResponses()
2848 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendResponses()
2849 if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask) in SendResponses()
2851 …if (rr->ImmedAnswer) // If we're sending this as answer, see that its whole RRSet is si… in SendResponses()
2856 … (r2->ImmedAnswer != mDNSInterfaceMark) && (r2->ImmedAnswer != rr->ImmedAnswer) && in SendResponses()
2857 SameResourceRecordSignature(r2, rr) && in SendResponses()
2858 … ((rr->ImmedAnswer == mDNSInterfaceMark) || IsInterfaceValidForAuthRecord(r2, rr->ImmedAnswer))) in SendResponses()
2860 r2->ImmedAnswer = !r2->ImmedAnswer ? rr->ImmedAnswer : mDNSInterfaceMark; in SendResponses()
2864 …else if (rr->ImmedAdditional) // If we're sending this as additional, see that its whole RRSet i… in SendResponses()
2869 (r2->ImmedAdditional != rr->ImmedAdditional) && in SendResponses()
2870 SameResourceRecordSignature(r2, rr) && in SendResponses()
2871 IsInterfaceValidForAuthRecord(r2, rr->ImmedAdditional)) in SendResponses()
2873 r2->ImmedAdditional = rr->ImmedAdditional; in SendResponses()
2880 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendResponses()
2882 …if (rr->ImmedAnswer == mDNSInterfaceMark) // Sending this record on all appropriate interfac… in SendResponses()
2884rr->SendRNow = !intf ? mDNSNULL : (rr->resrec.InterfaceID) ? rr->resrec.InterfaceID : intf->Interf… in SendResponses()
2885rr->ImmedAdditional = mDNSNULL; // No need to send as additional if sending as answer in SendResponses()
2886 rr->LastMCTime = m->timenow; in SendResponses()
2887 rr->LastMCInterface = rr->ImmedAnswer; in SendResponses()
2888 rr->ProbeRestartCount = 0; // Reset the probe restart count in SendResponses()
2890 if (TimeToAnnounceThisRecord(rr, m->timenow + rr->ThisAPInterval/2)) in SendResponses()
2892 rr->AnnounceCount--; in SendResponses()
2893 if (rr->resrec.RecordType != kDNSRecordTypeDeregistering) in SendResponses()
2894 rr->ThisAPInterval *= 2; in SendResponses()
2895 rr->LastAPTime = m->timenow; in SendResponses()
2896 …debugf("Announcing %##s (%s) %d", rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype), rr->Announce… in SendResponses()
2899 …else if (rr->ImmedAnswer) // Else, just respond to a single query on single … in SendResponses()
2901 rr->SendRNow = rr->ImmedAnswer; // Just respond on that interface in SendResponses()
2902 rr->ImmedAdditional = mDNSNULL; // No need to send as additional too in SendResponses()
2903 rr->LastMCTime = m->timenow; in SendResponses()
2904 rr->LastMCInterface = rr->ImmedAnswer; in SendResponses()
2906 SetNextAnnounceProbeTime(m, rr); in SendResponses()
2929 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendResponses()
2934 if ((rr->SendRNow == intf->InterfaceID) && in SendResponses()
2935 …((rr->resrec.InterfaceID == mDNSInterface_Any) && !mDNSPlatformValidRecordForInterface(rr, intf->I… in SendResponses()
2937 rr->SendRNow = GetNextActiveInterfaceID(intf); in SendResponses()
2939 else if (rr->SendRNow == intf->InterfaceID) in SendResponses()
2941 RData *OldRData = rr->resrec.rdata; in SendResponses()
2942 mDNSu16 oldrdlength = rr->resrec.rdlength; in SendResponses()
2944 …(rr->resrec.RecordType != kDNSRecordTypeDeregistering && !ShouldSendGoodbyesBeforeSleep(m, intf, r… in SendResponses()
2946 if (rr->NewRData && active) in SendResponses()
2949 …if (ResourceRecordIsValidAnswer(rr) && rr->resrec.RecordType == kDNSRecordTypeShared && rr->Requir… in SendResponses()
2951 newptr = PutRR_OS_TTL(responseptr, &m->omsg.h.numAnswers, &rr->resrec, 0); in SendResponses()
2952 … if (newptr) { responseptr = newptr; numDereg++; rr->RequireGoodbye = mDNSfalse; } in SendResponses()
2955 SetNewRData(&rr->resrec, rr->NewRData, rr->newrdlength); in SendResponses()
2958 if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask) in SendResponses()
2959rr->resrec.rrclass |= kDNSClass_UniqueRRSet; // Temporarily set the cache flush bit so PutR… in SendResponses()
2960 …newptr = PutRR_OS_TTL(responseptr, &m->omsg.h.numAnswers, &rr->resrec, active ? rr->resrec.rrorigi… in SendResponses()
2961rr->resrec.rrclass &= ~kDNSClass_UniqueRRSet; // Make sure to clear cache flush bit back… in SendResponses()
2965 rr->RequireGoodbye = active; in SendResponses()
2966 if (rr->resrec.RecordType == kDNSRecordTypeDeregistering) numDereg++; in SendResponses()
2967 else if (rr->LastAPTime == m->timenow) numAnnounce++;else numAnswer++; in SendResponses()
2970 if (rr->NewRData && active) in SendResponses()
2971 SetNewRData(&rr->resrec, OldRData, oldrdlength); in SendResponses()
2975 …if (!pktcount && active && (rr->resrec.RecordType & kDNSRecordTypeActiveUniqueMask) && !rr->SendNS… in SendResponses()
2976 rr->SendNSECNow = mDNSInterfaceMark; in SendResponses()
2981 … if (rr->ImmedAnswer == mDNSInterfaceMark && rr->resrec.InterfaceID == mDNSInterface_Any) in SendResponses()
2982 rr->SendRNow = GetNextActiveInterfaceID(intf); in SendResponses()
2984 rr->SendRNow = mDNSNULL; in SendResponses()
2991 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendResponses()
2992 if (rr->ImmedAdditional == intf->InterfaceID) in SendResponses()
2993 if (ResourceRecordIsValidAnswer(rr)) in SendResponses()
3001 if (!SendAdditional && (rr->resrec.RecordType & kDNSRecordTypeUniqueMask)) in SendResponses()
3007 … SameResourceRecordSignature(a, rr)) { SendAdditional = mDNStrue; break; } in SendResponses()
3010 rr->ImmedAdditional = mDNSNULL; // then cancel its ImmedAdditional field in SendResponses()
3015 … if (!pktcount && (rr->resrec.RecordType & kDNSRecordTypeActiveUniqueMask) && !rr->SendNSECNow) in SendResponses()
3016 rr->SendNSECNow = mDNSInterfaceMark; in SendResponses()
3018 if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask) in SendResponses()
3019rr->resrec.rrclass |= kDNSClass_UniqueRRSet; // Temporarily set the cache flush bit so PutResou… in SendResponses()
3020 newptr = PutRR_OS(newptr, &m->omsg.h.numAdditionals, &rr->resrec); in SendResponses()
3021rr->resrec.rrclass &= ~kDNSClass_UniqueRRSet; // Make sure to clear cache flush bit back to … in SendResponses()
3025 rr->ImmedAdditional = mDNSNULL; in SendResponses()
3026 rr->RequireGoodbye = mDNStrue; in SendResponses()
3031 rr->LastMCTime = m->timenow; in SendResponses()
3032 rr->LastMCInterface = intf->InterfaceID; in SendResponses()
3041 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendResponses()
3042 if (rr->SendNSECNow == mDNSInterfaceMark || rr->SendNSECNow == intf->InterfaceID) in SendResponses()
3047 …mDNS_SetupResourceRecord(&nsec, mDNSNULL, mDNSInterface_Any, kDNSType_NSEC, rr->resrec.rroriginalt… in SendResponses()
3049 AssignDomainName(&nsec.namestorage, rr->resrec.name); in SendResponses()
3051 len = DomainNameLength(rr->resrec.name); in SendResponses()
3057 AssignDomainName((domainname *)ptr, rr->resrec.name); in SendResponses()
3062 … if (ResourceRecordIsValidAnswer(r2) && SameResourceRecordNameClassInterface(r2, rr)) in SendResponses()
3078 if (newptr || rr->SendNSECNow == mDNSInterfaceMark) in SendResponses()
3080 rr->SendNSECNow = mDNSNULL; in SendResponses()
3082 for (r2 = rr->next; r2; r2=r2->next) in SendResponses()
3083 if (SameResourceRecordNameClassInterface(r2, rr)) in SendResponses()
3164 rr = m->CurrentRecord; in SendResponses()
3165 m->CurrentRecord = rr->next; in SendResponses()
3167 if (rr->SendRNow) in SendResponses()
3169 if (rr->ARType != AuthRecordLocalOnly && rr->ARType != AuthRecordP2P) in SendResponses()
3171 …IIDPrintable(rr->SendRNow), IIDPrintable(rr->resrec.InterfaceID), rr->resrec.RecordType, ARDisplay… in SendResponses()
3172 rr->SendRNow = mDNSNULL; in SendResponses()
3175 if (rr->ImmedAnswer || rr->resrec.RecordType == kDNSRecordTypeDeregistering) in SendResponses()
3177 …if (rr->NewRData) CompleteRDataUpdate(m, rr); // Update our rdata, clear the NewRData pointer, a… in SendResponses()
3179 if (rr->resrec.RecordType == kDNSRecordTypeDeregistering && rr->AnnounceCount == 0) in SendResponses()
3182 … if (!AuthRecord_uDNS(rr)) CompleteDeregistration(m, rr); // Don't touch rr after this in SendResponses()
3186 rr->ImmedAnswer = mDNSNULL; in SendResponses()
3187 rr->ImmedUnicast = mDNSfalse; in SendResponses()
3188 rr->v4Requester = zerov4Addr; in SendResponses()
3189 rr->v6Requester = zerov6Addr; in SendResponses()
3229 mDNSexport void SetNextCacheCheckTimeForRecord(mDNS *const m, CacheRecord *const rr) in SetNextCacheCheckTimeForRecord() argument
3231 rr->NextRequiredQuery = RRExpireTime(rr); in SetNextCacheCheckTimeForRecord()
3235 if (rr->CRActiveQuestion && rr->UnansweredQueries < MaxUnansweredQueries) in SetNextCacheCheckTimeForRecord()
3237 rr->NextRequiredQuery -= TicksTTL(rr)/20 * (MaxUnansweredQueries - rr->UnansweredQueries); in SetNextCacheCheckTimeForRecord()
3238 rr->NextRequiredQuery += mDNSRandom((mDNSu32)TicksTTL(rr)/50); in SetNextCacheCheckTimeForRecord()
3240 …(rr->NextRequiredQuery - m->timenow) / mDNSPlatformOneSecond, CacheCheckGracePeriod(rr), CRDisplay… in SetNextCacheCheckTimeForRecord()
3242 … ScheduleNextCacheCheckTime(m, HashSlotFromNameHash(rr->resrec.namehash), NextCacheCheckEvent(rr)); in SetNextCacheCheckTimeForRecord()
3255 mDNSexport mStatus mDNS_Reconfirm_internal(mDNS *const m, CacheRecord *const rr, mDNSu32 interval) in mDNS_Reconfirm_internal() argument
3263 if (RRExpireTime(rr) - m->timenow > (mDNSs32)((interval * 4) / 3)) in mDNS_Reconfirm_internal()
3270 rr->TimeRcvd = m->timenow - (mDNSs32)interval * 3; in mDNS_Reconfirm_internal()
3271rr->resrec.rroriginalttl = (interval * 4 + mDNSPlatformOneSecond - 1) / mDNSPlatformOneSecond; in mDNS_Reconfirm_internal()
3272 SetNextCacheCheckTimeForRecord(m, rr); in mDNS_Reconfirm_internal()
3275 RRExpireTime(rr) - m->timenow, CRDisplayString(m, rr), rr->CRActiveQuestion); in mDNS_Reconfirm_internal()
4194 mDNSlocal void AdjustUnansweredQueries(mDNS *const m, CacheRecord *const rr) in AdjustUnansweredQueries() argument
4196 const mDNSs32 expireTime = RRExpireTime(rr); in AdjustUnansweredQueries()
4197 const mDNSu32 interval = TicksTTL(rr) / 20; // Calculate 5% of the cache record's TTL. in AdjustUnansweredQueries()
4201 if (((m->timenow - expireTime) >= 0) || (rr->UnansweredQueries >= MaxUnansweredQueries)) return; in AdjustUnansweredQueries()
4205 …redQueries: WARNING: unusually small TTL (%d ticks) for %s", TicksTTL(rr), CRDisplayString(m, rr)); in AdjustUnansweredQueries()
4225 if ((MaxUnansweredQueries - rr->UnansweredQueries) > (mDNSs32)rem) in AdjustUnansweredQueries()
4228 rr->UnansweredQueries = (mDNSu8)(MaxUnansweredQueries - rem); in AdjustUnansweredQueries()
4236 mDNSexport void AnswerCurrentQuestionWithResourceRecord(mDNS *const m, CacheRecord *const rr, const… in AnswerCurrentQuestionWithResourceRecord() argument
4239 const mDNSBool followcname = FollowCNAME(q, &rr->resrec, AddRecord); in AnswerCurrentQuestionWithResourceRecord()
4242 … q->CurrentAnswers, AddRecord ? "Add" : "Rmv", MortalityDisplayString(rr->resrec.mortality), in AnswerCurrentQuestionWithResourceRecord()
4243 rr->resrec.rroriginalttl, CRDisplayString(m, rr)); in AnswerCurrentQuestionWithResourceRecord()
4252 "LOAddressAnswers %d", q, q->qname.c, DNSTypeName(q->qtype), ARDisplayString(m, rr), in AnswerCurrentQuestionWithResourceRecord()
4262 …if (!q->TimeoutQuestion || rr->resrec.RecordType != kDNSRecordTypePacketNegative || (m->timenow - … in AnswerCurrentQuestionWithResourceRecord()
4267 …if (AddRecord == QC_add && Question_uDNS(q) && rr->resrec.RecordType != kDNSRecordTypePacketNegati… in AnswerCurrentQuestionWithResourceRecord()
4268 …q->allowExpired != AllowExpired_None && rr->resrec.mortality == Mortality_Mortal ) rr->resrec.mort… in AnswerCurrentQuestionWithResourceRecord()
4305 …MetricsUpdateDNSQueryStats(queryName, q->qtype, &rr->resrec, querySendCount, q->metrics.expiredAns… in AnswerCurrentQuestionWithResourceRecord()
4315 …if (AddRecord == QC_add && !q->DuplicateOf && rr->CRActiveQuestion != q && rr->resrec.mortality !=… in AnswerCurrentQuestionWithResourceRecord()
4318 rr->CRActiveQuestion, q, CRDisplayString(m,rr), q->CurrentAnswers); in AnswerCurrentQuestionWithResourceRecord()
4319 if (!rr->CRActiveQuestion) in AnswerCurrentQuestionWithResourceRecord()
4322 …AdjustUnansweredQueries(m, rr); // Adjust UnansweredQueries in case the record missed out on refre… in AnswerCurrentQuestionWithResourceRecord()
4324 rr->CRActiveQuestion = q; // We know q is non-null in AnswerCurrentQuestionWithResourceRecord()
4325 SetNextCacheCheckTimeForRecord(m, rr); in AnswerCurrentQuestionWithResourceRecord()
4336 …(AddRecord == QC_add && (q->ExpectUnique || (rr->resrec.RecordType & kDNSRecordTypePacketUniqueMas… in AnswerCurrentQuestionWithResourceRecord()
4342 …if (rr->DelayDelivery) return; // We'll come back later when CacheRecordDeferredAdd() calls us in AnswerCurrentQuestionWithResourceRecord()
4346 … if (!mDNSOpaque16IsZero(q->TargetQID) && DNS64StateMachine(m, q, &rr->resrec, AddRecord)) return; in AnswerCurrentQuestionWithResourceRecord()
4350 …if (rr->resrec.RecordType == kDNSRecordTypePacketNegative) // If negative answer, check if we nee… in AnswerCurrentQuestionWithResourceRecord()
4375 …if (rr->resrec.RecordType == kDNSRecordTypePacketNegative || (q->qtype != kDNSType_NSEC && RRAsser… in AnswerCurrentQuestionWithResourceRecord()
4382 if (q->qtype != kDNSType_NSEC && RRAssertsNonexistence(&rr->resrec, q->qtype)) in AnswerCurrentQuestionWithResourceRecord()
4389 …ativeCacheRecord(m, &neg, &q->qname, q->qnamehash, q->qtype, q->qclass, 1, rr->resrec.InterfaceID,… in AnswerCurrentQuestionWithResourceRecord()
4391 …ativeCacheRecord(m, &neg, &q->qname, q->qnamehash, q->qtype, q->qclass, 1, rr->resrec.InterfaceID,… in AnswerCurrentQuestionWithResourceRecord()
4399 if (DNS64ShouldAnswerQuestion(q, &rr->resrec)) in AnswerCurrentQuestionWithResourceRecord()
4401 DNS64AnswerCurrentQuestion(m, &rr->resrec, AddRecord); in AnswerCurrentQuestionWithResourceRecord()
4408 q->DNSSECStatus.context, rr); in AnswerCurrentQuestionWithResourceRecord()
4410 q->QuestionCallback(m, q, &rr->resrec, AddRecord); in AnswerCurrentQuestionWithResourceRecord()
4425 if (followcname) AnswerQuestionByFollowingCNAME(m, q, &rr->resrec); in AnswerCurrentQuestionWithResourceRecord()
4428 …if (rr->resrec.mortality == Mortality_Ghost && !q->firstExpiredQname.c[0] && (q->allowExpired == A… in AnswerCurrentQuestionWithResourceRecord()
4430 …ourceRecord: Keeping track of domain for expired RR %s for question %p", CRDisplayString(m,rr), q); in AnswerCurrentQuestionWithResourceRecord()
4432 … AssignDomainName(&q->firstExpiredQname, rr->resrec.name); // Update firstExpiredQname in AnswerCurrentQuestionWithResourceRecord()
4461 const CacheRecord *rr; in CheckForSoonToExpireRecords() local
4463 for (rr = cg ? cg->members : mDNSNULL; rr; rr=rr->next) in CheckForSoonToExpireRecords()
4465 … if (threshold - RRExpireTime(rr) >= 0) // If we have records about to expire within a second in CheckForSoonToExpireRecords()
4467 if (delay - RRExpireTime(rr) < 0) // then delay until after they've been deleted in CheckForSoonToExpireRecords()
4468 delay = RRExpireTime(rr); in CheckForSoonToExpireRecords()
4689 CacheRecord *rr = *rp; in ReleaseAdditionalCacheRecords() local
4691 if (rr->resrec.rdata && rr->resrec.rdata != (RData*)&rr->smallrdatastorage) in ReleaseAdditionalCacheRecords()
4693 mDNSPlatformMemFree(rr->resrec.rdata); in ReleaseAdditionalCacheRecords()
4694 rr->resrec.rdata = mDNSNULL; in ReleaseAdditionalCacheRecords()
4698 if (rr->resrec.name) in ReleaseAdditionalCacheRecords()
4700 …eAdditionalCacheRecords: freeing cached record %##s (%s)", rr->resrec.name->c, DNSTypeName(rr->res… in ReleaseAdditionalCacheRecords()
4701 mDNSPlatformMemFree((void *)rr->resrec.name); in ReleaseAdditionalCacheRecords()
4702 rr->resrec.name = mDNSNULL; in ReleaseAdditionalCacheRecords()
4705 if (!rr->resrec.InterfaceID) in ReleaseAdditionalCacheRecords()
4707 m->rrcache_totalused_unicast -= rr->resrec.rdlength; in ReleaseAdditionalCacheRecords()
4709 ReleaseCacheEntity(m, (CacheEntity *)rr); in ReleaseAdditionalCacheRecords()
4767 CacheRecord *const rr = *rp; in CheckCacheExpiration() local
4769 mDNSs32 event = RRExpireTime(rr); in CheckCacheExpiration()
4772 …if (rr->CRActiveQuestion) // If this record has one or more active questions, tell them it's goi… in CheckCacheExpiration()
4774 DNSQuestion *q = rr->CRActiveQuestion; in CheckCacheExpiration()
4776 …m->timenow - rr->TimeRcvd, rr->resrec.rroriginalttl, rr->CRActiveQuestion, CRDisplayString(m, rr)); in CheckCacheExpiration()
4784 …if (((mDNSOpaque16IsZero(q->TargetQID) && (rr->resrec.RecordType & kDNSRecordTypePacketUniqueMask)… in CheckCacheExpiration()
4791 CacheRecordRmv(m, rr); in CheckCacheExpiration()
4796 …if (rr->resrec.mortality == Mortality_Mortal || // Normal expired mort… in CheckCacheExpiration()
4797rr->resrec.rroriginalttl == 0 || // Non-mortal record that … in CheckCacheExpiration()
4798 …(rr->resrec.mortality == Mortality_Ghost && m->timenow - event >= 0)) // A ghost record that exp… in CheckCacheExpiration()
4800 …*rp = rr->next; // Cut it from the list before ReleaseCacheRec… in CheckCacheExpiration()
4802 MortalityDisplayString(rr->resrec.mortality), in CheckCacheExpiration()
4803 …m->timenow - rr->TimeRcvd, rr->resrec.rroriginalttl, rr->CRActiveQuestion, CRDisplayString(m, rr)); in CheckCacheExpiration()
4804 ReleaseCacheRecord(m, rr); in CheckCacheExpiration()
4809 if (rr->resrec.mortality == Mortality_Immortal) in CheckCacheExpiration()
4811rr->resrec.mortality = Mortality_Ghost; // Expired immortal records become ghosts in CheckCacheExpiration()
4813 MortalityDisplayString(rr->resrec.mortality), in CheckCacheExpiration()
4814 …m->timenow - rr->TimeRcvd, rr->resrec.rroriginalttl, rr->CRActiveQuestion, CRDisplayString(m, rr)); in CheckCacheExpiration()
4821 if (rr->DelayDelivery && rr->DelayDelivery - m->timenow > 0) in CheckCacheExpiration()
4822 event = rr->DelayDelivery; in CheckCacheExpiration()
4825 if (rr->DelayDelivery) CacheRecordDeferredAdd(m, rr); in CheckCacheExpiration()
4826 if (rr->CRActiveQuestion && rr->UnansweredQueries < MaxUnansweredQueries) in CheckCacheExpiration()
4828 … if (m->timenow - rr->NextRequiredQuery < 0) // If not yet time for next query in CheckCacheExpiration()
4829 … event = NextCacheCheckEvent(rr); // then just record when we want the next query in CheckCacheExpiration()
4846 … (event - m->timenow) / mDNSPlatformOneSecond, CacheCheckGracePeriod(rr), CRDisplayString(m, rr)); in CheckCacheExpiration()
4849 rp = &rr->next; in CheckCacheExpiration()
4878 AuthRecord *rr = m->CurrentRecord; in AnswerQuestionWithLORecord() local
4879 m->CurrentRecord = rr->next; in AnswerQuestionWithLORecord()
4888 …if (rr->ARType == AuthRecordLocalOnly || (rr->ARType == AuthRecordP2P && (q->InterfaceID == mDNSIn… in AnswerQuestionWithLORecord()
4889 if (LocalOnlyRecordAnswersQuestion(rr, q)) in AnswerQuestionWithLORecord()
4894 ARDisplayString(m, rr)); in AnswerQuestionWithLORecord()
4898 AnswerLocalQuestionWithLocalAuthRecord(m, rr, QC_add); in AnswerQuestionWithLORecord()
5158 AuthRecord *rr = m->CurrentRecord; in AnswerNewLocalOnlyQuestion() local
5159 m->CurrentRecord = rr->next; in AnswerNewLocalOnlyQuestion()
5160 if (LocalOnlyRecordAnswersQuestion(rr, q)) in AnswerNewLocalOnlyQuestion()
5163 AnswerLocalQuestionWithLocalAuthRecord(m, rr, QC_add); in AnswerNewLocalOnlyQuestion()
5251 CacheRecord *rr = *rp; in GetCacheEntity() local
5253 ReleaseCacheRecord(m, rr); in GetCacheEntity()
5302 …Slocal CacheGroup *GetCacheGroup(mDNS *const m, const mDNSu32 slot, const ResourceRecord *const rr) in GetCacheGroup() argument
5304 mDNSu16 namelen = DomainNameLength(rr->name); in GetCacheGroup()
5306 …if (!cg) { LogMsg("GetCacheGroup: Failed to allocate memory for %##s", rr->name->c); return(mDNSNU… in GetCacheGroup()
5308 cg->namehash = rr->namehash; in GetCacheGroup()
5317 LogMsg("GetCacheGroup: Failed to allocate name storage for %##s", rr->name->c); in GetCacheGroup()
5321 AssignDomainName(cg->name, rr->name); in GetCacheGroup()
5323 …if (CacheGroupForRecord(m, rr)) LogMsg("GetCacheGroup: Already have CacheGroup for %##s", rr->name… in GetCacheGroup()
5325 …if (CacheGroupForRecord(m, rr) != cg) LogMsg("GetCacheGroup: Not finding CacheGroup for %##s", rr-… in GetCacheGroup()
5330 mDNSexport void mDNS_PurgeCacheResourceRecord(mDNS *const m, CacheRecord *rr) in mDNS_PurgeCacheResourceRecord() argument
5339 rr->TimeRcvd = m->timenow - mDNSPlatformOneSecond * 60; in mDNS_PurgeCacheResourceRecord()
5340 rr->UnansweredQueries = MaxUnansweredQueries; in mDNS_PurgeCacheResourceRecord()
5341 rr->resrec.rroriginalttl = 0; in mDNS_PurgeCacheResourceRecord()
5342 SetNextCacheCheckTimeForRecord(m, rr); in mDNS_PurgeCacheResourceRecord()
5374 AuthRecord *rr = m->CurrentRecord; in CheckProxyRecords() local
5375 if (rr->resrec.RecordType != kDNSRecordTypeDeregistering && rr->WakeUp.HMAC.l[0]) in CheckProxyRecords()
5379 …if (m->SPSSocket && m->timenow - rr->TimeExpire < 0) // If proxy record not expired yet, update… in CheckProxyRecords()
5381 if (m->NextScheduledSPS - rr->TimeExpire > 0) in CheckProxyRecords()
5382 m->NextScheduledSPS = rr->TimeExpire; in CheckProxyRecords()
5387 … m->ProxyRecords, &rr->WakeUp.HMAC, &rr->WakeUp.IMAC, rr->WakeUp.seq, ARDisplayString(m, rr)); in CheckProxyRecords()
5388 SetSPSProxyListChanged(rr->resrec.InterfaceID); in CheckProxyRecords()
5389 mDNS_Deregister_internal(m, rr, mDNS_Dereg_normal); in CheckProxyRecords()
5395 if (m->CurrentRecord == rr) // If m->CurrentRecord was not advanced for us, do it now in CheckProxyRecords()
5396 m->CurrentRecord = rr->next; in CheckProxyRecords()
5404 AuthRecord *rr = m->CurrentRecord; in CheckRmvEventsForLocalRecords() local
5405 if (rr->AnsweredLocalQ && rr->resrec.RecordType == kDNSRecordTypeDeregistering) in CheckRmvEventsForLocalRecords()
5407 …ebugf("CheckRmvEventsForLocalRecords: Generating local RMV events for %s", ARDisplayString(m, rr)); in CheckRmvEventsForLocalRecords()
5408 rr->resrec.RecordType = kDNSRecordTypeShared; in CheckRmvEventsForLocalRecords()
5409 AnswerAllLocalQuestionsWithLocalAuthRecord(m, rr, QC_rmv); in CheckRmvEventsForLocalRecords()
5410 if (m->CurrentRecord == rr) // If rr still exists in list, restore its state now in CheckRmvEventsForLocalRecords()
5412 rr->resrec.RecordType = kDNSRecordTypeDeregistering; in CheckRmvEventsForLocalRecords()
5413 rr->AnsweredLocalQ = mDNSfalse; in CheckRmvEventsForLocalRecords()
5416 if (RRLocalOnly(rr)) CompleteDeregistration(m, rr); in CheckRmvEventsForLocalRecords()
5419 … if (m->CurrentRecord == rr) // If m->CurrentRecord was not auto-advanced, do it ourselves now in CheckRmvEventsForLocalRecords()
5420 m->CurrentRecord = rr->next; in CheckRmvEventsForLocalRecords()
5612 AuthRecord *rr = m->NewLocalRecords; in mDNS_Execute() local
5614 if (LocalRecordReady(rr)) in mDNS_Execute()
5616 … debugf("mDNS_Execute: Delivering Add event with LocalAuthRecord %s", ARDisplayString(m, rr)); in mDNS_Execute()
5617 AnswerAllLocalQuestionsWithLocalAuthRecord(m, rr, QC_add); in mDNS_Execute()
5619 else if (!rr->next) in mDNS_Execute()
5624 …DNS_Execute: Just one LocalAuthRecord %s, breaking out of the loop early", ARDisplayString(m, rr)); in mDNS_Execute()
5628 head = rr; in mDNS_Execute()
5633 debugf("mDNS_Execute: Skipping LocalAuthRecord %s", ARDisplayString(m, rr)); in mDNS_Execute()
5636 while (*p && *p != rr) p=&(*p)->next; in mDNS_Execute()
5637 if (*p) *p = rr->next; // Cut this record from the list in mDNS_Execute()
5638 …_Execute: ERROR!! Cannot find record %s in ResourceRecords list", ARDisplayString(m, rr)); break; } in mDNS_Execute()
5642 *p = rr; in mDNS_Execute()
5643 head = tail = rr; in mDNS_Execute()
5647 tail->next = rr; in mDNS_Execute()
5648 tail = rr; in mDNS_Execute()
5650 rr->next = mDNSNULL; in mDNS_Execute()
5669 AuthRecord *rr = ag->NewLocalOnlyRecords; in mDNS_Execute() local
5672 if (LocalRecordReady(rr)) in mDNS_Execute()
5674 … debugf("mDNS_Execute: Delivering Add event with LocalAuthRecord %s", ARDisplayString(m, rr)); in mDNS_Execute()
5675 AnswerAllLocalQuestionsWithLocalAuthRecord(m, rr, QC_add); in mDNS_Execute()
5677 … else LogMsg("mDNS_Execute: LocalOnlyRecord %s not ready", ARDisplayString(m, rr)); in mDNS_Execute()
5779 AuthRecord *rr; in QuestionHasLocalAnswers() local
5785 for (rr = ag->members; rr; rr=rr->next) in QuestionHasLocalAnswers()
5787 if (UniqueLocalOnlyRecord(rr) && LocalOnlyRecordAnswersQuestion(rr, q)) in QuestionHasLocalAnswers()
5789 …n %p %##s (%s) has local answer %s", q, q->qname.c, DNSTypeName(q->qtype), ARDisplayString(m, rr)); in QuestionHasLocalAnswers()
5970 mDNSexport void mDNSCoreRestartRegistration(mDNS *const m, AuthRecord *rr, int announceCount) in mDNSCoreRestartRegistration() argument
5972 if (!AuthRecord_uDNS(rr)) in mDNSCoreRestartRegistration()
5974 …if (rr->resrec.RecordType == kDNSRecordTypeVerified && !rr->DependentOn) rr->resrec.RecordType = k… in mDNSCoreRestartRegistration()
5975 rr->ProbeCount = DefaultProbeCountForRecordType(rr->resrec.RecordType); in mDNSCoreRestartRegistration()
5977 if (mDNS_KeepaliveRecord(&rr->resrec)) in mDNSCoreRestartRegistration()
5979 rr->AnnounceCount = 0; // Do not announce keepalive records in mDNSCoreRestartRegistration()
5986 if (rr->AnnounceCount < (mDNSu8)announceCount) in mDNSCoreRestartRegistration()
5987 rr->AnnounceCount = (mDNSu8)announceCount; in mDNSCoreRestartRegistration()
5990 rr->SendNSECNow = mDNSNULL; in mDNSCoreRestartRegistration()
5991 InitializeLastAPTime(m, rr); in mDNSCoreRestartRegistration()
6077 mDNSlocal mDNSBool mDNSUpdateOkToSend(mDNS *const m, AuthRecord *rr, NetworkInterfaceInfo *const in… in mDNSUpdateOkToSend() argument
6082 …if (AuthRecord_uDNS(rr) || (rr->AuthFlags & AuthFlagsWakeOnly) || mDNSOpaque16IsZero(rr->updateid)… in mDNSUpdateOkToSend()
6083 m->timenow - (rr->LastAPTime + rr->ThisAPInterval) < 0) in mDNSUpdateOkToSend()
6096 …if ((scopeid >= (sizeof(rr->updateIntID) * mDNSNBBY) || bit_get_opaque64(rr->updateIntID, scopeid)… in mDNSUpdateOkToSend()
6097 (!rr->resrec.InterfaceID || rr->resrec.InterfaceID == intf->InterfaceID)) in mDNSUpdateOkToSend()
6116 AuthRecord *rr = m->CurrentRecord; in UpdateRMAC() local
6118 if (!rr->WakeUp.HMAC.l[0] && mDNS_KeepaliveRecord(&rr->resrec)) in UpdateRMAC()
6121 getKeepaliveRaddr(m, rr, &raddr); in UpdateRMAC()
6129 UpdateKeepaliveRData(m, rr, mDNSNULL, mDNStrue, (char *)(addrmap->ethaddr)); in UpdateRMAC()
6133 m->CurrentRecord = rr->next; in UpdateRMAC()
6141 mDNSexport mStatus UpdateKeepaliveRData(mDNS *const m, AuthRecord *rr, NetworkInterfaceInfo *const … in UpdateKeepaliveRData() argument
6161 mDNS_ExtractKeepaliveInfo(rr, &timeout, &laddr, &raddr, &eth, &seq, &ack, &lport, &rport, &win); in UpdateKeepaliveRData()
6164 …ta: not a valid record %s for keepalive %#a:%d %#a:%d", ARDisplayString(m, rr), &laddr, lport.NotA… in UpdateKeepaliveRData()
6203 LogMsg("UpdateKeepaliveRData: could not allocate memory %s", ARDisplayString(m, rr)); in UpdateKeepaliveRData()
6223 if ( rr->resrec.rdata != &rr->rdatastorage) in UpdateKeepaliveRData()
6225 …"UpdateKeepaliveRData: Freed allocated memory for keep alive packet: %s ", ARDisplayString(m, rr)); in UpdateKeepaliveRData()
6226 mDNSPlatformMemFree(rr->resrec.rdata); in UpdateKeepaliveRData()
6228 SetNewRData(&rr->resrec, newrd, newrdlength); // Update our rdata in UpdateKeepaliveRData()
6230 LogSPS("UpdateKeepaliveRData: successfully updated the record %s", ARDisplayString(m, rr)); in UpdateKeepaliveRData()
6238 AuthRecord *rr; in SendSPSRegistrationForOwner() local
6264 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendSPSRegistrationForOwner()
6266 … if (!(rr->AuthFlags & AuthFlagsWakeOnly) && rr->resrec.RecordType > kDNSRecordTypeDeregistering) in SendSPSRegistrationForOwner()
6268 …if (rr->resrec.InterfaceID == intf->InterfaceID || (!rr->resrec.InterfaceID && (rr->ForceMCast || … in SendSPSRegistrationForOwner()
6270 if (mDNSPlatformMemSame(owner, &rr->WakeUp, sizeof(*owner))) in SendSPSRegistrationForOwner()
6272 rr->SendRNow = mDNSInterfaceMark; // mark it now in SendSPSRegistrationForOwner()
6276 if (mDNSOpaque16IsZero(rr->updateid)) in SendSPSRegistrationForOwner()
6277 rr->updateid = msgid; in SendSPSRegistrationForOwner()
6279 msgid = rr->updateid; in SendSPSRegistrationForOwner()
6297 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendSPSRegistrationForOwner()
6298 if (rr->SendRNow || mDNSUpdateOkToSend(m, rr, intf, scopeid)) in SendSPSRegistrationForOwner()
6300 if (mDNSPlatformMemSame(owner, &rr->WakeUp, sizeof(*owner))) in SendSPSRegistrationForOwner()
6306 …if (mDNS_KeepaliveRecord(&rr->resrec) && (UpdateKeepaliveRData(m, rr, intf, mDNSfalse, mDNSNULL) !… in SendSPSRegistrationForOwner()
6308 if (scopeid < (sizeof(rr->updateIntID) * mDNSNBBY)) in SendSPSRegistrationForOwner()
6310 bit_clr_opaque64(rr->updateIntID, scopeid); in SendSPSRegistrationForOwner()
6312 rr->SendRNow = mDNSNULL; in SendSPSRegistrationForOwner()
6316 if (rr->resrec.RecordType & kDNSRecordTypeUniqueMask) in SendSPSRegistrationForOwner()
6317rr->resrec.rrclass |= kDNSClass_UniqueRRSet; // Temporarily set the 'unique' bit so PutResource… in SendSPSRegistrationForOwner()
6318 …ResourceRecordTTLWithLimit(&m->omsg, p, &m->omsg.h.mDNS_numUpdates, &rr->resrec, rr->resrec.rrorig… in SendSPSRegistrationForOwner()
6319rr->resrec.rrclass &= ~kDNSClass_UniqueRRSet; // Make sure to clear 'unique' bit back to nor… in SendSPSRegistrationForOwner()
6321 …%s FAILED %d/%d %s", intf->ifname, p - m->omsg.data, limit - m->omsg.data, ARDisplayString(m, rr)); in SendSPSRegistrationForOwner()
6324 …dateid %d) %s", intf->ifname, rr->updateIntID.l[1], rr->updateIntID.l[0], mDNSVal16(m->omsg.h.id)… in SendSPSRegistrationForOwner()
6325 rr->SendRNow = mDNSNULL; in SendSPSRegistrationForOwner()
6326 rr->ThisAPInterval = mDNSPlatformOneSecond; in SendSPSRegistrationForOwner()
6327 rr->LastAPTime = m->timenow; in SendSPSRegistrationForOwner()
6329 …if (mDNSOpaque16IsZero(rr->updateid)) LogMsg("SendSPSRegistration: ERROR!! rr %s updateid is zero"… in SendSPSRegistrationForOwner()
6330 if (m->NextScheduledResponse - (rr->LastAPTime + rr->ThisAPInterval) >= 0) in SendSPSRegistrationForOwner()
6331 m->NextScheduledResponse = (rr->LastAPTime + rr->ThisAPInterval); in SendSPSRegistrationForOwner()
6386 mDNSlocal mDNSBool RecordIsFirstOccurrenceOfOwner(mDNS *const m, const AuthRecord *const rr) in RecordIsFirstOccurrenceOfOwner() argument
6389 for (ar = m->ResourceRecords; ar && ar != rr; ar=ar->next) in RecordIsFirstOccurrenceOfOwner()
6390 if (mDNSPlatformMemSame(&rr->WakeUp, &ar->WakeUp, sizeof(rr->WakeUp))) return mDNSfalse; in RecordIsFirstOccurrenceOfOwner()
6394 …l void mDNSCoreStoreProxyRR(mDNS *const m, const mDNSInterfaceID InterfaceID, AuthRecord *const rr) in mDNSCoreStoreProxyRR() argument
6403 mDNS_SetupResourceRecord(newRR, mDNSNULL, InterfaceID, rr->resrec.rrtype, in mDNSCoreStoreProxyRR()
6404 rr->resrec.rroriginalttl, rr->resrec.RecordType, in mDNSCoreStoreProxyRR()
6405 rr->ARType, mDNSNULL, mDNSNULL); in mDNSCoreStoreProxyRR()
6407 AssignDomainName(&newRR->namestorage, &rr->namestorage); in mDNSCoreStoreProxyRR()
6408 newRR->resrec.rdlength = DomainNameLength(rr->resrec.name); in mDNSCoreStoreProxyRR()
6410 newRR->resrec.rrclass = rr->resrec.rrclass; in mDNSCoreStoreProxyRR()
6412 if (rr->resrec.rrtype == kDNSType_A) in mDNSCoreStoreProxyRR()
6414 newRR->resrec.rdata->u.ipv4 = rr->resrec.rdata->u.ipv4; in mDNSCoreStoreProxyRR()
6416 else if (rr->resrec.rrtype == kDNSType_AAAA) in mDNSCoreStoreProxyRR()
6418 newRR->resrec.rdata->u.ipv6 = rr->resrec.rdata->u.ipv6; in mDNSCoreStoreProxyRR()
6425 LogSPS("%s : Storing proxy record : %s ", __func__, ARDisplayString(m, rr)); in mDNSCoreStoreProxyRR()
6513 AuthRecord *rr; in RetrySPSRegistrations() local
6522 for (rr = m->ResourceRecords; rr; rr=rr->next) in RetrySPSRegistrations()
6523 …if (!AuthRecord_uDNS(rr) && !mDNSOpaque16IsZero(rr->updateid) && m->timenow - (rr->LastAPTime + rr in RetrySPSRegistrations()
6529 …if ((scopeid >= (sizeof(rr->updateIntID) * mDNSNBBY) || bit_get_opaque64(rr->updateIntID, scopeid)… in RetrySPSRegistrations()
6530 (!rr->resrec.InterfaceID || rr->resrec.InterfaceID == intf->InterfaceID)) in RetrySPSRegistrations()
6532 …: 0x%x 0x%x (updateid %d) %s", rr->updateIntID.l[1], rr->updateIntID.l[0], mDNSVal16(rr->updateid)… in RetrySPSRegistrations()
6533 SendSPSRegistration(m, intf, rr->updateid); in RetrySPSRegistrations()
6599 AuthRecord *rr; in mDNSCoreHaveAdvertisedMulticastServices() local
6600 for (rr = m->ResourceRecords; rr; rr=rr->next) in mDNSCoreHaveAdvertisedMulticastServices()
6601 …if (mDNS_KeepaliveRecord(&rr->resrec) || (rr->resrec.rrtype == kDNSType_SRV && !AuthRecord_uDNS(rr in mDNSCoreHaveAdvertisedMulticastServices()
6612 AuthRecord *rr; in SendGoodbyesForSelectServices() local
6616 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendGoodbyesForSelectServices()
6621 if ((serviceType == WAKE_ONLY_SERVICE && (rr->AuthFlags & AuthFlagsWakeOnly) && in SendGoodbyesForSelectServices()
6622 rr->resrec.RecordType == kDNSRecordTypeShared && rr->RequireGoodbye) || in SendGoodbyesForSelectServices()
6623 (serviceType == AC_ONLY_SERVICE && !mDNS_KeepaliveRecord(&rr->resrec))) in SendGoodbyesForSelectServices()
6625 rr->ImmedAnswer = mDNSInterfaceMark; in SendGoodbyesForSelectServices()
6645 AuthRecord *rr; in SendSleepGoodbyes() local
6666 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendSleepGoodbyes()
6667 if (rr->resrec.RecordType == kDNSRecordTypeShared && rr->RequireGoodbye) in SendSleepGoodbyes()
6668 rr->ImmedAnswer = mDNSInterfaceMark; in SendSleepGoodbyes()
6721 AuthRecord *const rr = m->CurrentRecord; in DoKeepaliveCallbacks() local
6722 … if ((mDNS_KeepaliveRecord(&rr->resrec)) && (rr->resrec.RecordType != kDNSRecordTypeDeregistering)) in DoKeepaliveCallbacks()
6724 LogSPS("DoKeepaliveCallbacks: Invoking the callback for %s", ARDisplayString(m, rr)); in DoKeepaliveCallbacks()
6725 if (rr->RecordCallback) in DoKeepaliveCallbacks()
6726 rr->RecordCallback(m, rr, mStatus_BadStateErr); in DoKeepaliveCallbacks()
6728 if (m->CurrentRecord == rr) // If m->CurrentRecord was not advanced for us, do it now in DoKeepaliveCallbacks()
6729 m->CurrentRecord = rr->next; in DoKeepaliveCallbacks()
6922 AuthRecord *rr; in mDNSCoreMachineSleep() local
7085 for (rr = m->ResourceRecords; rr; rr=rr->next) in mDNSCoreMachineSleep()
7087 if (AuthRecord_uDNS(rr)) in mDNSCoreMachineSleep()
7089 ActivateUnicastRegistration(m, rr); in mDNSCoreMachineSleep()
7093 mDNSCoreRestartRegistration(m, rr, -1); in mDNSCoreMachineSleep()
7113 AuthRecord *rr; in mDNSCoreReadyForSleep() local
7155 for (rr = m->ResourceRecords; rr; rr = rr->next) in mDNSCoreReadyForSleep()
7156 if (!AuthRecord_uDNS(rr)) in mDNSCoreReadyForSleep()
7157 if (!mDNSOpaque64IsZero(&rr->updateIntID)) in mDNSCoreReadyForSleep()
7158 …ID 0x%x 0x%x (updateid %d) %s", rr->updateIntID.l[1], rr->updateIntID.l[0], mDNSVal16(rr->updateid… in mDNSCoreReadyForSleep()
7169 for (rr = m->ResourceRecords; rr; rr = rr->next) in mDNSCoreReadyForSleep()
7170 if (AuthRecord_uDNS(rr)) in mDNSCoreReadyForSleep()
7172 if (rr->state == regState_Refresh && rr->tcp) in mDNSCoreReadyForSleep()
7173 …ID 0x%x 0x%x (updateid %d) %s", rr->updateIntID.l[1], rr->updateIntID.l[0], mDNSVal16(rr->updateid… in mDNSCoreReadyForSleep()
7195 for (rr = m->ResourceRecords; rr; rr = rr->next) in mDNSCoreReadyForSleep()
7196 if (!AuthRecord_uDNS(rr)) in mDNSCoreReadyForSleep()
7197 if (!mDNSOpaque64IsZero(&rr->updateIntID)) in mDNSCoreReadyForSleep()
7199 …%x 0x%x (updateid %d) for %s", rr->updateIntID.l[1], rr->updateIntID.l[0], mDNSVal16(rr->updateid)… in mDNSCoreReadyForSleep()
7200 rr->updateIntID = zeroOpaque64; in mDNSCoreReadyForSleep()
7290 AuthRecord *rr; in GenerateUnicastResponse() local
7309 … for (rr=ResponseRecords; rr; rr=rr->NextResponse) // and search our list of proposed answers in GenerateUnicastResponse()
7311 …if (rr->NR_AnswerTo == ptr) // If we're going to generate a record answeri… in GenerateUnicastResponse()
7326 for (rr=ResponseRecords; rr; rr=rr->NextResponse) in GenerateUnicastResponse()
7327 if (rr->NR_AnswerTo) in GenerateUnicastResponse()
7329 … mDNSu8 *p = PutResourceRecordTTL(response, responseptr, &response->h.numAnswers, &rr->resrec, in GenerateUnicastResponse()
7330 … maxttl < rr->resrec.rroriginalttl ? maxttl : rr->resrec.rroriginalttl); in GenerateUnicastResponse()
7338 for (rr=ResponseRecords; rr; rr=rr->NextResponse) in GenerateUnicastResponse()
7339 if (rr->NR_AdditionalTo && !rr->NR_AnswerTo) in GenerateUnicastResponse()
7341 … mDNSu8 *p = PutResourceRecordTTL(response, responseptr, &response->h.numAdditionals, &rr->resrec, in GenerateUnicastResponse()
7342 … maxttl < rr->resrec.rroriginalttl ? maxttl : rr->resrec.rroriginalttl); in GenerateUnicastResponse()
7382 mDNSlocal mDNSBool PacketRecordMatches(const AuthRecord *const rr, const CacheRecord *const pktrr, … in PacketRecordMatches() argument
7384 if (IdenticalResourceRecord(&rr->resrec, &pktrr->resrec)) in PacketRecordMatches()
7386 const AuthRecord *r2 = rr; in PacketRecordMatches()
7422 const AuthRecord *rr; in FindRRSet() local
7423 for (rr = m->ResourceRecords; rr; rr=rr->next) in FindRRSet()
7425 if (IdenticalResourceRecord(&rr->resrec, &pktrr->resrec)) in FindRRSet()
7427 return(rr->RRSet ? rr->RRSet : rr); in FindRRSet()
7525 CacheRecord *rr; in FindIdenticalRecordInCache() local
7527 for (rr = cg ? cg->members : mDNSNULL; rr; rr=rr->next) in FindIdenticalRecordInCache()
7532 match = (pktrr->dnsservice == rr->resrec.dnsservice) ? mDNStrue : mDNSfalse; in FindIdenticalRecordInCache()
7535 const mDNSu32 id2 = (rr->resrec.rDNSServer ? rr->resrec.rDNSServer->resGroupID : 0); in FindIdenticalRecordInCache()
7539 else match = (pktrr->InterfaceID == rr->resrec.InterfaceID); in FindIdenticalRecordInCache()
7541 if (match && IdenticalSameNameRecord(pktrr, &rr->resrec)) break; in FindIdenticalRecordInCache()
7543 return(rr); in FindIdenticalRecordInCache()
7545 mDNSlocal void DeregisterProxyRecord(mDNS *const m, AuthRecord *const rr) in DeregisterProxyRecord() argument
7547rr->WakeUp.HMAC = zeroEthAddr; // Clear HMAC so that mDNS_Deregister_internal doesn't waste pac… in DeregisterProxyRecord()
7548 rr->RequireGoodbye = mDNSfalse; // and we don't want to send goodbye for it in DeregisterProxyRecord()
7549 mDNS_Deregister_internal(m, rr, mDNS_Dereg_normal); in DeregisterProxyRecord()
7563 AuthRecord *const rr = m->CurrentRecord; in ClearKeepaliveProxyRecords() local
7564 … if (InterfaceID == rr->resrec.InterfaceID && mDNSSameEthAddress(&owner->HMAC, &rr->WakeUp.HMAC)) in ClearKeepaliveProxyRecords()
7569 …m->ProxyRecords, &rr->WakeUp.HMAC, &rr->WakeUp.IMAC, rr->WakeUp.seq, owner->seq, ARDisplayString(m… in ClearKeepaliveProxyRecords()
7570 DeregisterProxyRecord(m, rr); in ClearKeepaliveProxyRecords()
7575 if (m->CurrentRecord == rr) // If m->CurrentRecord was not advanced for us, do it now in ClearKeepaliveProxyRecords()
7576 m->CurrentRecord = rr->next; in ClearKeepaliveProxyRecords()
7589 AuthRecord *const rr = m->CurrentRecord; in ClearIdenticalProxyRecords() local
7590 …if (m->rec.r.resrec.InterfaceID == rr->resrec.InterfaceID && mDNSSameEthAddress(&owner->HMAC, &rr-… in ClearIdenticalProxyRecords()
7591 if (IdenticalResourceRecord(&rr->resrec, &m->rec.r.resrec)) in ClearIdenticalProxyRecords()
7594 …m->ProxyRecords, &rr->WakeUp.HMAC, &rr->WakeUp.IMAC, rr->WakeUp.seq, owner->seq, ARDisplayString(m… in ClearIdenticalProxyRecords()
7595 DeregisterProxyRecord(m, rr); in ClearIdenticalProxyRecords()
7599 if (m->CurrentRecord == rr) // If m->CurrentRecord was not advanced for us, do it now in ClearIdenticalProxyRecords()
7600 m->CurrentRecord = rr->next; in ClearIdenticalProxyRecords()
7612 AuthRecord *const rr = m->CurrentRecord; in ClearProxyRecords() local
7613 …if (m->rec.r.resrec.InterfaceID == rr->resrec.InterfaceID && mDNSSameEthAddress(&owner->HMAC, &rr-… in ClearProxyRecords()
7614 … if (owner->seq != rr->WakeUp.seq || m->timenow - rr->TimeRcvd > mDNSPlatformOneSecond * 60) in ClearProxyRecords()
7616 if (rr->AddressProxy.type == mDNSAddrType_IPv6) in ClearProxyRecords()
7623 &rr->WakeUp.HMAC, &rr->WakeUp.IMAC, ARDisplayString(m,rr)); in ClearProxyRecords()
7624 …SendNDP(m, NDP_Adv, NDP_Override, rr, &rr->AddressProxy.ip.v6, &rr->WakeUp.IMAC, &AllHosts_v6, &Al… in ClearProxyRecords()
7628 m->ProxyRecords, rr->AnnounceCount, rr->resrec.RecordType, in ClearProxyRecords()
7629 … &rr->WakeUp.HMAC, &rr->WakeUp.IMAC, rr->WakeUp.seq, owner->seq, ARDisplayString(m, rr)); in ClearProxyRecords()
7630 …if (rr->resrec.RecordType == kDNSRecordTypeDeregistering) rr->resrec.RecordType = kDNSRecordTypeSh… in ClearProxyRecords()
7631rr->WakeUp.HMAC = zeroEthAddr; // Clear HMAC so that mDNS_Deregister_internal doesn't waste packe… in ClearProxyRecords()
7632rr->RequireGoodbye = mDNSfalse; // and we don't want to send goodbye for it, since real host is no… in ClearProxyRecords()
7633 mDNS_Deregister_internal(m, rr, mDNS_Dereg_normal); in ClearProxyRecords()
7638 if (m->CurrentRecord == rr) // If m->CurrentRecord was not advanced for us, do it now in ClearProxyRecords()
7639 m->CurrentRecord = rr->next; in ClearProxyRecords()
7664 AuthRecord *rr; in ProcessQuery() local
7732 rr = m->CurrentRecord; in ProcessQuery()
7733 m->CurrentRecord = rr->next; in ProcessQuery()
7734 …if (AnyTypeRecordAnswersQuestion(rr, &pktq) && (QueryWasMulticast || QueryWasLocalUnicast || rr->A… in ProcessQuery()
7737 if (RRTypeAnswersQuestionType(&rr->resrec, pktq.qtype)) in ProcessQuery()
7739 if (rr->resrec.RecordType == kDNSRecordTypeUnique) in ProcessQuery()
7740 ResolveSimultaneousProbe(m, query, end, &pktq, rr); in ProcessQuery()
7741 else if (ResourceRecordIsValidAnswer(rr)) in ProcessQuery()
7760 … if ((mDNSu32)(m->timenow - rr->LastMCTime) >= (mDNSu32)mDNSPlatformOneSecond || in ProcessQuery()
7761 … (rr->LastMCInterface != mDNSInterfaceMark && rr->LastMCInterface != InterfaceID)) in ProcessQuery()
7762 rr->NR_AnswerTo = NR_AnswerMulticast; in ProcessQuery()
7764 … else if (!rr->NR_AnswerTo) rr->NR_AnswerTo = LegacyQuery ? ptr : NR_AnswerUnicast; in ProcessQuery()
7767 …else if ((rr->resrec.RecordType & kDNSRecordTypeActiveUniqueMask) && ResourceRecordIsValidAnswer(r… in ProcessQuery()
7771 if (!NSECAnswer) NSECAnswer = rr; in ProcessQuery()
7844 …for (rr = m->ResourceRecords; rr; rr=rr->next) // Now build our list of potential ans… in ProcessQuery()
7845 if (rr->NR_AnswerTo) // If we marked the record... in ProcessQuery()
7846 AddRecordToResponseList(&nrp, rr, mDNSNULL); // ... add it to the list in ProcessQuery()
7865 for (rr=ResponseRecords; rr; rr=rr->NextResponse) in ProcessQuery()
7867 if (MustSendRecord(rr) && ShouldSuppressKnownAnswer(&m->rec.r, rr)) in ProcessQuery()
7870 rr->NR_AnswerTo = mDNSNULL; in ProcessQuery()
7871 rr->NR_AdditionalTo = mDNSNULL; in ProcessQuery()
7876 for (rr=m->ResourceRecords; rr; rr=rr->next) in ProcessQuery()
7879 if (rr->ImmedAnswer == InterfaceID && ShouldSuppressKnownAnswer(&m->rec.r, rr)) in ProcessQuery()
7883 … if (mDNSSameIPv4Address(rr->v4Requester, srcaddr->ip.v4)) rr->v4Requester = zerov4Addr; in ProcessQuery()
7887 … if (mDNSSameIPv6Address(rr->v6Requester, srcaddr->ip.v6)) rr->v6Requester = zerov6Addr; in ProcessQuery()
7889 … if (mDNSIPv4AddressIsZero(rr->v4Requester) && mDNSIPv6AddressIsZero(rr->v6Requester)) in ProcessQuery()
7892 rr->ImmedAnswer = mDNSNULL; in ProcessQuery()
7893 rr->ImmedUnicast = mDNSfalse; in ProcessQuery()
7895 … LogMsg("Suppressed after%4d: %s", m->timenow - rr->ImmedAnswerMarkTime, ARDisplayString(m, rr)); in ProcessQuery()
7938 for (rr=ResponseRecords; rr; rr=rr->NextResponse) in ProcessQuery()
7939 if (rr->NR_AdditionalTo && !MustSendRecord(rr->NR_AdditionalTo)) in ProcessQuery()
7940 { rr->NR_AnswerTo = mDNSNULL; rr->NR_AdditionalTo = mDNSNULL; } in ProcessQuery()
7945 for (rr=ResponseRecords; rr; rr=rr->NextResponse) in ProcessQuery()
7947 if (rr->NR_AnswerTo) in ProcessQuery()
7954 if ((mDNSu32)(m->timenow - rr->LastMCTime) >= (mDNSu32)TicksTTL(rr)/4) in ProcessQuery()
7960 if (rr->NR_AnswerTo == NR_AnswerUnicast) in ProcessQuery()
7963 rr->NR_AnswerTo = NR_AnswerMulticast; in ProcessQuery()
7968 if (rr->NR_AnswerTo == NR_AnswerMulticast) in ProcessQuery()
7973 else if (rr->NR_AnswerTo == NR_AnswerUnicast) in ProcessQuery()
7978 else if (rr->NR_AnswerTo) in ProcessQuery()
7986 rr->ImmedAnswerMarkTime = m->timenow; in ProcessQuery()
7990 if (rr->ImmedAnswer && rr->ImmedAnswer != InterfaceID) in ProcessQuery()
7991 rr->ImmedAnswer = mDNSInterfaceMark; in ProcessQuery()
7994 rr->ImmedAnswer = InterfaceID; // Record interface to send it on in ProcessQuery()
7995 if (SendUnicastResponse) rr->ImmedUnicast = mDNStrue; in ProcessQuery()
7998 … if (mDNSIPv4AddressIsZero(rr->v4Requester)) rr->v4Requester = srcaddr->ip.v4; in ProcessQuery()
7999 … else if (!mDNSSameIPv4Address(rr->v4Requester, srcaddr->ip.v4)) rr->v4Requester = onesIPv4Addr; in ProcessQuery()
8003 … if (mDNSIPv6AddressIsZero(rr->v6Requester)) rr->v6Requester = srcaddr->ip.v6; in ProcessQuery()
8004 … else if (!mDNSSameIPv6Address(rr->v6Requester, srcaddr->ip.v6)) rr->v6Requester = onesIPv6Addr; in ProcessQuery()
8013 …else if (rr->resrec.RecordType == kDNSRecordTypeShared) delayresponse = mDNSPlatformOneSecond; … in ProcessQuery()
8015 else if (rr->NR_AdditionalTo && rr->NR_AdditionalTo->NR_AnswerTo == NR_AnswerMulticast) in ProcessQuery()
8020 rr->ImmedAdditional = InterfaceID; in ProcessQuery()
8071 rr = ResponseRecords; in ProcessQuery()
8072 ResponseRecords = rr->NextResponse; in ProcessQuery()
8073 rr->NextResponse = mDNSNULL; in ProcessQuery()
8074 rr->NR_AnswerTo = mDNSNULL; in ProcessQuery()
8075 rr->NR_AdditionalTo = mDNSNULL; in ProcessQuery()
8210 … SrcLocal, const mDNSIPPort port, const mDNSOpaque16 id, const CacheRecord *const rr, mDNSBool tcp) in ExpectingUnicastResponseForRecord() argument
8217 if (!q->DuplicateOf && ResourceRecordAnswersUnicastResponse(&rr->resrec, q)) in ExpectingUnicastResponseForRecord()
8221 …->h.id %d q->TargetQID %d for %s", mDNSVal16(id), mDNSVal16(q->TargetQID), CRDisplayString(m, rr)); in ExpectingUnicastResponseForRecord()
8243 … q->qname.c, DNSTypeName(q->qtype), srcaddr, mDNSVal16(port), CRDisplayString(m, rr)); in ExpectingUnicastResponseForRecord()
8260 mDNSlocal mDNSu16 GetRDLengthMem(const ResourceRecord *const rr) in GetRDLengthMem() argument
8262 switch (rr->rrtype) in GetRDLengthMem()
8267 default: return rr->rdlength; in GetRDLengthMem()
8273 CacheRecord *rr = mDNSNULL; in CreateNewCacheEntry() local
8282 …if (cg) rr = GetCacheRecord(m, cg, RDLength); // Make a cache record, being careful not to recyc… in CreateNewCacheEntry()
8283 if (!rr) NoCacheAnswer(m, &m->rec.r); in CreateNewCacheEntry()
8286 RData *saveptr = rr->resrec.rdata; // Save the rr->resrec.rdata pointer in CreateNewCacheEntry()
8287 *rr = m->rec.r; // Block copy the CacheRecord object in CreateNewCacheEntry()
8289 mdns_retain_null_safe(rr->resrec.dnsservice); in CreateNewCacheEntry()
8291rr->resrec.rdata = saveptr; // Restore rr->resrec.rdata after the structur… in CreateNewCacheEntry()
8292rr->resrec.name = cg->name; // And set rr->resrec.name to point into our C… in CreateNewCacheEntry()
8293 rr->resrec.mortality = Mortality_Mortal; in CreateNewCacheEntry()
8295rr->resrec.dnssec_result = dnssec_indeterminate; // Set the DNSSEC validation result of a recor… in CreateNewCacheEntry()
8298 rr->DelayDelivery = delay; in CreateNewCacheEntry()
8301 if (rr->resrec.rdata == (RData*)&rr->smallrdatastorage && RDLength > InlineCacheRDSize) in CreateNewCacheEntry()
8303 … else if (rr->resrec.rdata != (RData*)&rr->smallrdatastorage && RDLength <= InlineCacheRDSize) in CreateNewCacheEntry()
8306 … mDNSPlatformMemCopy(rr->resrec.rdata, m->rec.r.resrec.rdata, sizeofRDataHeader + RDLength); in CreateNewCacheEntry()
8308 rr->next = mDNSNULL; // Clear 'next' pointer in CreateNewCacheEntry()
8309 rr->soa = mDNSNULL; in CreateNewCacheEntry()
8312 rr->sourceAddress = *sourceAddress; in CreateNewCacheEntry()
8314 if (!rr->resrec.InterfaceID) in CreateNewCacheEntry()
8316 m->rrcache_totalused_unicast += rr->resrec.rdlength; in CreateNewCacheEntry()
8320 if (rr != mDNSNULL) in CreateNewCacheEntry()
8322 rr->denial_of_existence_records = mDNSNULL; in CreateNewCacheEntry()
8328 *(cg->rrcache_tail) = rr; // Append this record to tail of cache slot list in CreateNewCacheEntry()
8329 cg->rrcache_tail = &(rr->next); // Advance tail pointer in CreateNewCacheEntry()
8330 … CacheRecordAdd(m, rr); // CacheRecordAdd calls SetNextCacheCheckTimeForRecord(m, rr); for us in CreateNewCacheEntry()
8340 rr->resrec.name = name; in CreateNewCacheEntry()
8344 ReleaseCacheRecord(m, rr); in CreateNewCacheEntry()
8346 rr = mDNSNULL; in CreateNewCacheEntry()
8350 return(rr); in CreateNewCacheEntry()
8372 mDNSlocal void RefreshCacheRecord(mDNS *const m, CacheRecord *rr, mDNSu32 ttl) in RefreshCacheRecord() argument
8374 rr->TimeRcvd = m->timenow; in RefreshCacheRecord()
8375 rr->resrec.rroriginalttl = ttl; in RefreshCacheRecord()
8376 rr->UnansweredQueries = 0; in RefreshCacheRecord()
8377 if (rr->resrec.mortality != Mortality_Mortal) rr->resrec.mortality = Mortality_Immortal; in RefreshCacheRecord()
8378 SetNextCacheCheckTimeForRecord(m, rr); in RefreshCacheRecord()
8383 CacheRecord *rr; in GrantCacheExtensions() local
8385 for (rr = cg ? cg->members : mDNSNULL; rr; rr=rr->next) in GrantCacheExtensions()
8386 if (rr->CRActiveQuestion == q) in GrantCacheExtensions()
8389 RefreshCacheRecord(m, rr, lease); in GrantCacheExtensions()
8433 ResourceRecord *rr = &newcr->resrec; in IsResponseAcceptable() local
8445 if (target && cr->resrec.rdatahash == rr->namehash && SameDomainName(target, rr->name)) in IsResponseAcceptable()
8447 …eAcceptable: Found a matching entry for %##s in the CacheFlushRecords %s", rr->name->c, CRDisplayS… in IsResponseAcceptable()
8740 mDNSlocal mDNSBool mDNSCoreRegisteredProxyRecord(mDNS *const m, AuthRecord *rr) in mDNSCoreRegisteredProxyRecord() argument
8746 if (IdenticalResourceRecord(&rrPtr->resrec, &rr->resrec)) in mDNSCoreRegisteredProxyRecord()
8748 …RegisteredProxyRecord: Ignoring packet registered with sleep proxy : %s ", ARDisplayString(m, rr)); in mDNSCoreRegisteredProxyRecord()
9225 ResourceRecord *const rr = &m->rec.r.resrec; in mDNSCoreReceiveResponse() local
9226 if (Querier_ResourceRecordIsAnswer(rr, querier)) in mDNSCoreReceiveResponse()
9232 rr->protocol = mdns_resolver_type_tcp; in mDNSCoreReceiveResponse()
9236 rr->protocol = resolver_type; in mDNSCoreReceiveResponse()
9238 mdns_replace(&rr->dnsservice, uDNSService); in mDNSCoreReceiveResponse()
9314 const CacheRecord *const rr = &m->rec.r; in mDNSCoreReceiveResponse() local
9315 const RDataBody2 *const rdb = (RDataBody2 *)rr->smallrdatastorage.data; in mDNSCoreReceiveResponse()
9332 AuthRecord *rr = m->CurrentRecord; in mDNSCoreReceiveResponse() local
9333 m->CurrentRecord = rr->next; in mDNSCoreReceiveResponse()
9337 …if (!AcceptableResponse && !(ResponseSrcLocal && rr->resrec.RecordType == kDNSRecordTypeUnique)) c… in mDNSCoreReceiveResponse()
9339 …if (PacketRRMatchesSignature(&m->rec.r, rr)) // If interface, name, type (if shared record)… in mDNSCoreReceiveResponse()
9342 if (IdenticalSameNameRecord(&m->rec.r.resrec, &rr->resrec)) in mDNSCoreReceiveResponse()
9345 … if (m->rec.r.resrec.rroriginalttl >= rr->resrec.rroriginalttl/2 || m->SleepState) in mDNSCoreReceiveResponse()
9348 …if (rr->ImmedAnswer == InterfaceID) { rr->ImmedAnswer = mDNSNULL; rr->ImmedUnicast = mDNSfals… in mDNSCoreReceiveResponse()
9352 …if (rr->ImmedAnswer == mDNSNULL) { rr->ImmedAnswer = InterfaceID; m->NextScheduledRe… in mDNSCoreReceiveResponse()
9353 …else if (rr->ImmedAnswer != InterfaceID) { rr->ImmedAnswer = mDNSInterfaceMark; m->NextScheduledRe… in mDNSCoreReceiveResponse()
9357 … else if (m->rec.r.resrec.rroriginalttl > 0 && PacketRRConflict(m, rr, &m->rec.r)) in mDNSCoreReceiveResponse()
9361 …gInfo("mDNSCoreReceiveResponse: Our Record: %08lX %s", rr->resrec.rdatahash, ARDisplayString(m, rr in mDNSCoreReceiveResponse()
9365 if (rr->DependentOn) in mDNSCoreReceiveResponse()
9367 while (rr->DependentOn) rr = rr->DependentOn; in mDNSCoreReceiveResponse()
9368 …gInfo("mDNSCoreReceiveResponse: Dep Record: %08lX %s", rr->resrec.rdatahash, ARDisplayString(m, rr in mDNSCoreReceiveResponse()
9372 if (rr->ProbeCount > DefaultProbeCountForTypeUnique) in mDNSCoreReceiveResponse()
9373 … LogInfo("mDNSCoreReceiveResponse: Already reset to Probing: %s", ARDisplayString(m, rr)); in mDNSCoreReceiveResponse()
9374 else if (rr->ProbeCount == DefaultProbeCountForTypeUnique) in mDNSCoreReceiveResponse()
9375 …iveResponse: Ignoring response received before we even began probing: %s", ARDisplayString(m, rr)); in mDNSCoreReceiveResponse()
9380 if (rr->resrec.RecordType == kDNSRecordTypeVerified) in mDNSCoreReceiveResponse()
9382 … LogMsg("mDNSCoreReceiveResponse: Resetting to Probing: %s", ARDisplayString(m, rr)); in mDNSCoreReceiveResponse()
9383 rr->resrec.RecordType = kDNSRecordTypeUnique; in mDNSCoreReceiveResponse()
9388 rr->ProbeCount = DefaultProbeCountForTypeUnique + 1; in mDNSCoreReceiveResponse()
9389 rr->AnnounceCount = InitialAnnounceCount; in mDNSCoreReceiveResponse()
9390 InitializeLastAPTime(m, rr); in mDNSCoreReceiveResponse()
9391 …RecordProbeFailure(m, rr); // Repeated late conflicts also cause us to back off to the slower pro… in mDNSCoreReceiveResponse()
9394 else if (rr->resrec.RecordType == kDNSRecordTypeUnique) in mDNSCoreReceiveResponse()
9400 if (!mDNSCoreRegisteredProxyRecord(m, rr)) in mDNSCoreReceiveResponse()
9402 … if ((rr->ProbingConflictCount == 0) || (m->MPktNum != rr->LastConflictPktNum)) in mDNSCoreReceiveResponse()
9405 rr->ProbingConflictCount++; in mDNSCoreReceiveResponse()
9406 rr->LastConflictPktNum = m->MPktNum; in mDNSCoreReceiveResponse()
9408 … (rr->ProbingConflictCount <= kMaxAllowedMCastProbingConflicts)) in mDNSCoreReceiveResponse()
9412rr->ProbeCount, kProbingConflictPauseDuration, rr->ProbingConflictCount, in mDNSCoreReceiveResponse()
9413 … kMaxAllowedMCastProbingConflicts, IIDPrintable(InterfaceID), ARDisplayString(m, rr)); in mDNSCoreReceiveResponse()
9414 rr->ProbeCount = DefaultProbeCountForTypeUnique; in mDNSCoreReceiveResponse()
9415rr->LastAPTime = m->timenow + kProbingConflictPauseDuration - rr->ThisAPInterval; in mDNSCoreReceiveResponse()
9416 SetNextAnnounceProbeTime(m, rr); in mDNSCoreReceiveResponse()
9421rr->ProbeCount, ARDisplayString(m, rr), ResponseMCast ? "multi" : "uni", IIDPrintable(InterfaceID)… in mDNSCoreReceiveResponse()
9425 D2D_stop_advertising_record(rr); in mDNSCoreReceiveResponse()
9427 mDNS_Deregister_internal(m, rr, mDNS_Dereg_conflict); in mDNSCoreReceiveResponse()
9437 else if (rr->resrec.RecordType == kDNSRecordTypeKnownUnique) in mDNSCoreReceiveResponse()
9439 … LogMsg("mDNSCoreReceiveResponse: Unexpected conflict discarding %s", ARDisplayString(m, rr)); in mDNSCoreReceiveResponse()
9442 D2D_stop_advertising_record(rr); in mDNSCoreReceiveResponse()
9444 mDNS_Deregister_internal(m, rr, mDNS_Dereg_conflict); in mDNSCoreReceiveResponse()
9447 …NSCoreReceiveResponse: Unexpected record type %X %s", rr->resrec.RecordType, ARDisplayString(m, rr in mDNSCoreReceiveResponse()
9454 else if ((m->rec.r.resrec.rrtype == rr->resrec.rrtype) && in mDNSCoreReceiveResponse()
9456 … ((mDNSu32)(m->timenow - rr->LastMCTime) > (mDNSu32)mDNSPlatformOneSecond/2) && in mDNSCoreReceiveResponse()
9457 ResourceRecordIsValidAnswer(rr)) in mDNSCoreReceiveResponse()
9459 rr->ImmedAnswer = mDNSInterfaceMark; in mDNSCoreReceiveResponse()
9501 CacheRecord *rr = mDNSNULL; in mDNSCoreReceiveResponse() local
9504 rr = mDNSCoreReceiveCacheCheck(m, response, LLQType, slot, cg, &cfp, InterfaceID); in mDNSCoreReceiveResponse()
9508 if (!rr && m->rec.r.resrec.rroriginalttl > 0) in mDNSCoreReceiveResponse()
9522 rr = CreateNewCacheEntry(m, slot, cg, delay, mDNStrue, srcaddr); in mDNSCoreReceiveResponse()
9523 if (rr) in mDNSCoreReceiveResponse()
9526 set_denial_records_in_cache_record(rr, &denial_of_existence_records); in mDNSCoreReceiveResponse()
9529 rr->responseFlags = response->h.flags; in mDNSCoreReceiveResponse()
9533 *cfp = rr; in mDNSCoreReceiveResponse()
9534 cfp = &rr->NextInCFList; in mDNSCoreReceiveResponse()
9537 else if (rr->DelayDelivery) in mDNSCoreReceiveResponse()
9539 ScheduleNextCacheCheckTime(m, slot, rr->DelayDelivery); in mDNSCoreReceiveResponse()
9770 AuthRecord *const rr = m->CurrentRecord; in ScheduleWakeupForList() local
9771 …if (rr->resrec.InterfaceID == InterfaceID && rr->resrec.RecordType != kDNSRecordTypeDeregistering … in ScheduleWakeupForList()
9773 … LogInfo("ScheduleWakeupForList: Scheduling wakeup packets for %s", ARDisplayString(m, rr)); in ScheduleWakeupForList()
9774 mDNS_Deregister_internal(m, rr, mDNS_Dereg_normal); in ScheduleWakeupForList()
9776 if (m->CurrentRecord == rr) // If m->CurrentRecord was not advanced for us, do it now in ScheduleWakeupForList()
9777 m->CurrentRecord = rr->next; in ScheduleWakeupForList()
10013 mDNSexport mDNSBool mDNSValidKeepAliveRecord(AuthRecord *rr) in mDNSValidKeepAliveRecord() argument
10021 if (!mDNS_KeepaliveRecord(&rr->resrec)) in mDNSValidKeepAliveRecord()
10032 mDNS_ExtractKeepaliveInfo(rr, &timeout, &laddr, &raddr, &eth, &seq, &ack, &lport, &rport, &win); in mDNSValidKeepAliveRecord()
10466 AuthRecord *const rr = m->CurrentRecord; in mDNSCoreReceiveUpdateR() local
10467 …if (rr->resrec.InterfaceID == InterfaceID || (!rr->resrec.InterfaceID && (rr->ForceMCast || IsLoca… in mDNSCoreReceiveUpdateR()
10468 if (mDNSSameOpaque16(rr->updateid, msg->h.id)) in mDNSCoreReceiveUpdateR()
10473 if (scopeid < (sizeof(rr->updateIntID) * mDNSNBBY)) in mDNSCoreReceiveUpdateR()
10474 bit_clr_opaque64(rr->updateIntID, scopeid); in mDNSCoreReceiveUpdateR()
10475 if (mDNSOpaque64IsZero(&rr->updateIntID)) in mDNSCoreReceiveUpdateR()
10476 rr->updateid = zeroID; in mDNSCoreReceiveUpdateR()
10477 rr->expire = NonZeroTime(m->timenow + updatelease * mDNSPlatformOneSecond); in mDNSCoreReceiveUpdateR()
10479rr->WakeUp.HMAC.l[0] ? "transferred" : "registered", spsupdates, updatelease, rr->updateIntID.l[1]… in mDNSCoreReceiveUpdateR()
10480 if (rr->WakeUp.HMAC.l[0]) in mDNSCoreReceiveUpdateR()
10482rr->WakeUp.HMAC = zeroEthAddr; // Clear HMAC so that mDNS_Deregister_internal doesn't waste packe… in mDNSCoreReceiveUpdateR()
10483 rr->RequireGoodbye = mDNSfalse; // and we don't want to send goodbye for it in mDNSCoreReceiveUpdateR()
10484 mDNS_Deregister_internal(m, rr, mDNS_Dereg_normal); in mDNSCoreReceiveUpdateR()
10489 if (m->CurrentRecord == rr) // If m->CurrentRecord was not advanced for us, do it now in mDNSCoreReceiveUpdateR()
10490 m->CurrentRecord = rr->next; in mDNSCoreReceiveUpdateR()
11472 AuthRecord *rr; in LocalRecordRmvEventsForQuestion() local
11488 for (rr = ag->members; rr; rr=rr->next) in LocalRecordRmvEventsForQuestion()
11490 if (UniqueLocalOnlyRecord(rr) && LocalOnlyRecordAnswersQuestion(rr, q)) in LocalRecordRmvEventsForQuestion()
11493 ARDisplayString(m, rr)); in LocalRecordRmvEventsForQuestion()
11501 … AnswerLocalQuestionWithLocalAuthRecord(m, rr, QC_rmv); // MUST NOT dereference q again in LocalRecordRmvEventsForQuestion()
12391 mDNSexport mStatus mDNS_ReconfirmByValue(mDNS *const m, ResourceRecord *const rr) in mDNS_ReconfirmByValue() argument
12396 cr = FindIdenticalRecordInCache(m, rr); in mDNS_ReconfirmByValue()
12397 debugf("mDNS_ReconfirmByValue: %p %s", cr, RRDisplayString(m, rr)); in mDNS_ReconfirmByValue()
12481 mDNSexport mStatus mDNS_Register(mDNS *const m, AuthRecord *const rr) in mDNS_Register() argument
12485 status = mDNS_Register_internal(m, rr); in mDNS_Register()
12490 mDNSexport mStatus mDNS_Update(mDNS *const m, AuthRecord *const rr, mDNSu32 newttl, in mDNS_Update() argument
12493 if (!ValidateRData(rr->resrec.rrtype, newrdlength, newrdata)) in mDNS_Update()
12495 …LogMsg("Attempt to update record with invalid rdata: %s", GetRRDisplayString_rdb(&rr->resrec, &new… in mDNS_Update()
12502 if (newttl == 0) newttl = rr->resrec.rroriginalttl; in mDNS_Update()
12505 if (rr->NewRData) in mDNS_Update()
12507 RData *n = rr->NewRData; in mDNS_Update()
12508 rr->NewRData = mDNSNULL; // Clear the NewRData pointer ... in mDNS_Update()
12509 if (rr->UpdateCallback) in mDNS_Update()
12510rr->UpdateCallback(m, rr, n, rr->newrdlength); // ...and let the client free this memory, if nece… in mDNS_Update()
12513 rr->NewRData = newrdata; in mDNS_Update()
12514 rr->newrdlength = newrdlength; in mDNS_Update()
12515 rr->UpdateCallback = Callback; in mDNS_Update()
12518 …if (rr->ARType != AuthRecordLocalOnly && rr->ARType != AuthRecordP2P && !IsLocalDomain(rr->resrec.… in mDNS_Update()
12520 mStatus status = uDNS_UpdateRecord(m, rr); in mDNS_Update()
12522 if (status != mStatus_NoError) { rr->NewRData = mDNSNULL; rr->newrdlength = 0; } in mDNS_Update()
12528 if (RRLocalOnly(rr) || (rr->resrec.rroriginalttl == newttl && in mDNS_Update()
12529rr->resrec.rdlength == newrdlength && mDNSPlatformMemSame(rr->resrec.rdata->u.data, newrdata->u.da… in mDNS_Update()
12530 CompleteRDataUpdate(m, rr); in mDNS_Update()
12533 rr->AnnounceCount = InitialAnnounceCount; in mDNS_Update()
12534 InitializeLastAPTime(m, rr); in mDNS_Update()
12535 … while (rr->NextUpdateCredit && m->timenow - rr->NextUpdateCredit >= 0) GrantUpdateCredit(rr); in mDNS_Update()
12536 if (!rr->UpdateBlocked && rr->UpdateCredits) rr->UpdateCredits--; in mDNS_Update()
12537 …if (!rr->NextUpdateCredit) rr->NextUpdateCredit = NonZeroTime(m->timenow + kUpdateCreditRefreshInt… in mDNS_Update()
12538 …if (rr->AnnounceCount > rr->UpdateCredits + 1) rr->AnnounceCount = (mDNSu8)(rr->UpdateCredits + 1); in mDNS_Update()
12539 if (rr->UpdateCredits <= 5) in mDNS_Update()
12541 …mDNSu32 delay = 6 - rr->UpdateCredits; // Delay 1 second, then 2, then 3, etc. up to 6 second… in mDNS_Update()
12542 …if (!rr->UpdateBlocked) rr->UpdateBlocked = NonZeroTime(m->timenow + (mDNSs32)delay * mDNSPlatform… in mDNS_Update()
12543 rr->ThisAPInterval *= 4; in mDNS_Update()
12544 rr->LastAPTime = rr->UpdateBlocked - rr->ThisAPInterval; in mDNS_Update()
12546 rr->resrec.name->c, delay, delay > 1 ? "s" : ""); in mDNS_Update()
12548 rr->resrec.rroriginalttl = newttl; in mDNS_Update()
12558 mDNSexport mStatus mDNS_Deregister(mDNS *const m, AuthRecord *const rr) in mDNS_Deregister() argument
12562 status = mDNS_Deregister_internal(m, rr, mDNS_Dereg_normal); in mDNS_Deregister()
12568 mDNSlocal void mDNS_HostNameCallback(mDNS *const m, AuthRecord *const rr, mStatus result);
12570 mDNSlocal void mDNS_RandomizedHostNameCallback(mDNS *m, AuthRecord *rr, mStatus result);
12771 mDNSlocal void UpdateTargetHostName(mDNS *const m, AuthRecord *const rr) in UpdateTargetHostName() argument
12776 D2D_stop_advertising_record(rr); in UpdateTargetHostName()
12779 SetTargetToHostName(m, rr); in UpdateTargetHostName()
12783 D2D_start_advertising_record(rr); in UpdateTargetHostName()
12799 AuthRecord *rr; in mDNS_SetFQDN() local
12816 for (rr = m->ResourceRecords; rr; rr=rr->next) if (rr->AutoTarget) UpdateTargetHostName(m, rr); in mDNS_SetFQDN()
12817 for (rr = m->DuplicateRecords; rr; rr=rr->next) if (rr->AutoTarget) UpdateTargetHostName(m, rr); in mDNS_SetFQDN()
12822 mDNSlocal void mDNS_HostNameCallback(mDNS *const m, AuthRecord *const rr, mStatus result) in mDNS_HostNameCallback() argument
12824 (void)rr; // Unused parameter in mDNS_HostNameCallback()
12831 …debugf("mDNS_HostNameCallback: %##s (%s) %s (%ld)", rr->resrec.name->c, DNSTypeName(rr->resrec.rrt… in mDNS_HostNameCallback()
12867 …LogMsg("mDNS_HostNameCallback: Unknown error %d for registration of record %s", result, rr->resre… in mDNS_HostNameCallback()
12877 AuthRecord *rr; in mDNS_RandomizedHostNameCallback() local
12894 for (rr = m->ResourceRecords; rr; rr = rr->next) in mDNS_RandomizedHostNameCallback()
12896 if (rr->AutoTarget && AuthRecordIncludesOrIsAWDL(rr)) UpdateTargetHostName(m, rr); in mDNS_RandomizedHostNameCallback()
12898 for (rr = m->DuplicateRecords; rr; rr = rr->next) in mDNS_RandomizedHostNameCallback()
12900 if (rr->AutoTarget && AuthRecordIncludesOrIsAWDL(rr)) UpdateTargetHostName(m, rr); in mDNS_RandomizedHostNameCallback()
12923 AuthRecord *rr; in RestartRecordGetZoneData() local
12925 for (rr = m->ResourceRecords; rr; rr=rr->next) in RestartRecordGetZoneData()
12926 if (AuthRecord_uDNS(rr) && rr->state != regState_NoTarget) in RestartRecordGetZoneData()
12928 debugf("RestartRecordGetZoneData: StartGetZoneData for %##s", rr->resrec.name->c); in RestartRecordGetZoneData()
12931 if (rr->nta) { rr->updateid = zeroID; CancelGetZoneData(m, rr->nta); } in RestartRecordGetZoneData()
12932rr->nta = StartGetZoneData(m, rr->resrec.name, ZoneServiceUpdate, RecordRegistrationGotZoneData, r… in RestartRecordGetZoneData()
13003 AuthRecord *rr; in mDNS_RegisterInterface() local
13192 for (rr = m->ResourceRecords; rr; rr=rr->next) in mDNS_RegisterInterface()
13194 if (!rr->resrec.InterfaceID || rr->resrec.InterfaceID == set->InterfaceID) in mDNS_RegisterInterface()
13196 mDNSCoreRestartRegistration(m, rr, numannounce); in mDNS_RegisterInterface()
13305 CacheRecord *rr; in mDNS_DeregisterInterface() local
13347 FORALL_CACHERECORDS(slot, cg, rr) in mDNS_DeregisterInterface()
13349 if (rr->resrec.InterfaceID == set->InterfaceID) in mDNS_DeregisterInterface()
13358 mDNS_Reconfirm_internal(m, rr, kDefaultReconfirmTimeForFlappingInterface); in mDNS_DeregisterInterface()
13361 rr->UnansweredQueries = MaxUnansweredQueries; in mDNS_DeregisterInterface()
13367 if (rr->LastCachedAnswerTime) in mDNS_DeregisterInterface()
13370 if (rr->resrec.dnsservice) cacheHitUnicastCount++; in mDNS_DeregisterInterface()
13372 if (rr->resrec.rDNSServer) cacheHitUnicastCount++; in mDNS_DeregisterInterface()
13379 if (rr->resrec.dnsservice) cacheMissUnicastCount++; in mDNS_DeregisterInterface()
13381 if (rr->resrec.rDNSServer) cacheMissUnicastCount++; in mDNS_DeregisterInterface()
13386 mDNS_PurgeCacheResourceRecord(m, rr); in mDNS_DeregisterInterface()
13415 CacheRecord *rr; in mDNS_DeregisterInterface() local
13416 FORALL_CACHERECORDS(slot, cg, rr) in mDNS_DeregisterInterface()
13417 if (rr->resrec.InterfaceID == set->InterfaceID) in mDNS_DeregisterInterface()
13418 mDNS_Reconfirm_internal(m, rr, kDefaultReconfirmTimeForFlappingInterface); in mDNS_DeregisterInterface()
13426 mDNSlocal void ServiceCallback(mDNS *const m, AuthRecord *const rr, mStatus result) in ServiceCallback() argument
13428 ServiceRecordSet *sr = (ServiceRecordSet *)rr->RecordContext; in ServiceCallback()
13437 …debugf("ServiceCallback: %##s (%s) %s (%d)", rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype), m… in ServiceCallback()
13442 if (result == mStatus_NoError && rr != &sr->RR_SRV) return; in ServiceCallback()
13485 mDNSlocal void NSSCallback(mDNS *const m, AuthRecord *const rr, mStatus result) in NSSCallback() argument
13487 ServiceRecordSet *sr = (ServiceRecordSet *)rr->RecordContext; in NSSCallback()
13660 ResourceRecord *rr; in mDNS_AddRecordToService() local
13670 rr = mDNSNULL; in mDNS_AddRecordToService()
13673 if (sr->RR_TXT.resrec.RecordType & kDNSRecordTypeUniqueMask) rr = &sr->RR_TXT.resrec; in mDNS_AddRecordToService()
13677 if (sr->RR_SRV.resrec.RecordType & kDNSRecordTypeUniqueMask) rr = &sr->RR_SRV.resrec; in mDNS_AddRecordToService()
13680 if (!rr) in mDNS_AddRecordToService()
13688 rr = &srExtra->r.resrec; in mDNS_AddRecordToService()
13694 if (rr && (extra->r.resrec.rroriginalttl != rr->rroriginalttl)) in mDNS_AddRecordToService()
13697 extra->r.resrec.rroriginalttl, rr->rroriginalttl, RRDisplayString(m, &extra->r.resrec)); in mDNS_AddRecordToService()
13698 extra->r.resrec.rroriginalttl = rr->rroriginalttl; in mDNS_AddRecordToService()
13854 mDNSexport mStatus mDNS_RegisterNoSuchService(mDNS *const m, AuthRecord *const rr, in mDNS_RegisterNoSuchService() argument
13863 …mDNS_SetupResourceRecord(rr, mDNSNULL, InterfaceID, kDNSType_SRV, kHostNameTTL, kDNSRecordTypeUniq… in mDNS_RegisterNoSuchService()
13864 …if (ConstructServiceName(&rr->namestorage, name, type, domain) == mDNSNULL) return(mStatus_BadPara… in mDNS_RegisterNoSuchService()
13865 rr->resrec.rdata->u.srv.priority = 0; in mDNS_RegisterNoSuchService()
13866 rr->resrec.rdata->u.srv.weight = 0; in mDNS_RegisterNoSuchService()
13867 rr->resrec.rdata->u.srv.port = zeroIPPort; in mDNS_RegisterNoSuchService()
13868 if (host && host->c[0]) AssignDomainName(&rr->resrec.rdata->u.srv.target, host); in mDNS_RegisterNoSuchService()
13869 else rr->AutoTarget = Target_AutoHost; in mDNS_RegisterNoSuchService()
13870 return(mDNS_Register(m, rr)); in mDNS_RegisterNoSuchService()
13873 mDNSexport mStatus mDNS_AdvertiseDomains(mDNS *const m, AuthRecord *rr, in mDNS_AdvertiseDomains() argument
13884 …mDNS_SetupResourceRecord(rr, mDNSNULL, InterfaceID, kDNSType_PTR, kStandardTTL, kDNSRecordTypeShar… in mDNS_AdvertiseDomains()
13885 …if (!MakeDomainNameFromDNSNameString(&rr->namestorage, mDNS_DomainTypeNames[DomainType])) return(m… in mDNS_AdvertiseDomains()
13886 …if (!MakeDomainNameFromDNSNameString(&rr->resrec.rdata->u.name, domname)) return(mStatus_BadParamE… in mDNS_AdvertiseDomains()
13887 return(mDNS_Register(m, rr)); in mDNS_AdvertiseDomains()
13926 mDNSlocal void RestartARPProbing(mDNS *const m, AuthRecord *const rr) in RestartARPProbing() argument
13938 rr->resrec.RecordType = kDNSRecordTypeUnique; in RestartARPProbing()
13939 rr->ProbeCount = DefaultProbeCountForTypeUnique; in RestartARPProbing()
13940 rr->ProbeRestartCount++; in RestartARPProbing()
13948 if (rr->AnnounceCount == InitialAnnounceCount && m->timenow - rr->LastAPTime >= 0) in RestartARPProbing()
13949 InitializeLastAPTime(m, rr); in RestartARPProbing()
13952 rr->AnnounceCount = InitialAnnounceCount; in RestartARPProbing()
13953 rr->ThisAPInterval = mDNSPlatformOneSecond; in RestartARPProbing()
13954rr->LastAPTime = m->timenow + mDNSPlatformOneSecond * 9; // Send first packet at rr->LastAP… in RestartARPProbing()
13955 SetNextAnnounceProbeTime(m, rr); in RestartARPProbing()
13962 AuthRecord *rr; in mDNSCoreReceiveRawARP() local
13978 for (rr = m->ResourceRecords; rr; rr=rr->next) in mDNSCoreReceiveRawARP()
13979 …if (rr->resrec.InterfaceID == InterfaceID && rr->resrec.RecordType != kDNSRecordTypeDeregistering … in mDNSCoreReceiveRawARP()
13980rr->AddressProxy.type == mDNSAddrType_IPv4 && mDNSSameIPv4Address(rr->AddressProxy.ip.v4, arp->tpa… in mDNSCoreReceiveRawARP()
13986 const char *const msg = mDNSSameEthAddress(&arp->sha, &rr->WakeUp.IMAC) ? msg1 : in mDNSCoreReceiveRawARP()
13987 (rr->AnnounceCount == InitialAnnounceCount) ? msg2 : in mDNSCoreReceiveRawARP()
13991 &rr->WakeUp.HMAC, &rr->WakeUp.IMAC, ARDisplayString(m, rr)); in mDNSCoreReceiveRawARP()
13994 if ( rr->ProbeRestartCount < MAX_PROBE_RESTARTS) in mDNSCoreReceiveRawARP()
13995 RestartARPProbing(m, rr); in mDNSCoreReceiveRawARP()
13997 … LogSPS("Reached maximum number of restarts for probing - %s", ARDisplayString(m,rr)); in mDNSCoreReceiveRawARP()
14001 … mDNSPlatformSetLocalAddressCacheEntry(&rr->AddressProxy, &rr->WakeUp.IMAC, InterfaceID); in mDNSCoreReceiveRawARP()
14007 SendARP(m, 2, rr, &tpa, &arp->sha, &spa, &arp->sha); in mDNSCoreReceiveRawARP()
14025 for (rr = m->ResourceRecords; rr; rr=rr->next) in mDNSCoreReceiveRawARP()
14026 …if (rr->resrec.InterfaceID == InterfaceID && rr->resrec.RecordType != kDNSRecordTypeDeregistering … in mDNSCoreReceiveRawARP()
14027rr->AddressProxy.type == mDNSAddrType_IPv4 && mDNSSameIPv4Address(rr->AddressProxy.ip.v4, arp->spa… in mDNSCoreReceiveRawARP()
14029 if (mDNSSameEthAddress(&zeroEthAddr, &rr->WakeUp.HMAC)) in mDNSCoreReceiveRawARP()
14032 … arp->sha.b, arp->spa.b, arp->tpa.b, &rr->WakeUp.HMAC, &rr->WakeUp.IMAC, ARDisplayString(m, rr)); in mDNSCoreReceiveRawARP()
14036 RestartARPProbing(m, rr); in mDNSCoreReceiveRawARP()
14037 if (mDNSSameEthAddress(&arp->sha, &rr->WakeUp.IMAC)) in mDNSCoreReceiveRawARP()
14041 arp->sha.b, arp->spa.b, arp->tpa.b, ARDisplayString(m, rr)); in mDNSCoreReceiveRawARP()
14046 … arp->sha.b, arp->spa.b, arp->tpa.b, &rr->WakeUp.HMAC, &rr->WakeUp.IMAC, ARDisplayString(m, rr)); in mDNSCoreReceiveRawARP()
14047 ScheduleWakeup(m, rr->resrec.InterfaceID, &rr->WakeUp.HMAC); in mDNSCoreReceiveRawARP()
14075 AuthRecord *rr; in mDNSCoreReceiveRawND() local
14086 for (rr = m->ResourceRecords; rr; rr=rr->next) in mDNSCoreReceiveRawND()
14087 …if (rr->resrec.InterfaceID == InterfaceID && rr->resrec.RecordType != kDNSRecordTypeDeregistering … in mDNSCoreReceiveRawND()
14088rr->AddressProxy.type == mDNSAddrType_IPv6 && mDNSSameIPv6Address(rr->AddressProxy.ip.v6, ndp->tar… in mDNSCoreReceiveRawND()
14095 const char *const msg = mDNSSameEthAddress(sha, &rr->WakeUp.IMAC) ? msg1 : in mDNSCoreReceiveRawND()
14096 (rr->AnnounceCount == InitialAnnounceCount) ? msg2 : in mDNSCoreReceiveRawND()
14100 …intf->ifname, msg, sha, spa, &ndp->target, &rr->WakeUp.HMAC, &rr->WakeUp.IMAC, ARDisplayString(m, in mDNSCoreReceiveRawND()
14103 if (rr->ProbeRestartCount < MAX_PROBE_RESTARTS) in mDNSCoreReceiveRawND()
14104 RestartARPProbing(m, rr); in mDNSCoreReceiveRawND()
14106 … LogSPS("Reached maximum number of restarts for probing - %s", ARDisplayString(m,rr)); in mDNSCoreReceiveRawND()
14109 … mDNSPlatformSetLocalAddressCacheEntry(&rr->AddressProxy, &rr->WakeUp.IMAC, InterfaceID); in mDNSCoreReceiveRawND()
14111 SendNDP(m, NDP_Adv, NDP_Solicited, rr, &ndp->target, mDNSNULL, spa, sha); in mDNSCoreReceiveRawND()
14113 … SendNDP(m, NDP_Adv, 0, rr, &ndp->target, mDNSNULL, &AllHosts_v6, &AllHosts_v6_Eth); in mDNSCoreReceiveRawND()
14128 for (rr = m->ResourceRecords; rr; rr=rr->next) in mDNSCoreReceiveRawND()
14129 …if (rr->resrec.InterfaceID == InterfaceID && rr->resrec.RecordType != kDNSRecordTypeDeregistering … in mDNSCoreReceiveRawND()
14130rr->AddressProxy.type == mDNSAddrType_IPv6 && mDNSSameIPv6Address(rr->AddressProxy.ip.v6, *spa) &&… in mDNSCoreReceiveRawND()
14132 if (mDNSSameEthAddress(&zeroEthAddr, &rr->WakeUp.HMAC)) in mDNSCoreReceiveRawND()
14135 … sha, spa, &ndp->target, &rr->WakeUp.HMAC, &rr->WakeUp.IMAC, ARDisplayString(m, rr)); in mDNSCoreReceiveRawND()
14139 RestartARPProbing(m, rr); in mDNSCoreReceiveRawND()
14140 if (mDNSSameEthAddress(sha, &rr->WakeUp.IMAC)) in mDNSCoreReceiveRawND()
14143 …pe == NDP_Sol ? "Solicitation " : "Advertisement", sha, spa, &ndp->target, ARDisplayString(m, rr)); in mDNSCoreReceiveRawND()
14148 … sha, spa, &ndp->target, &rr->WakeUp.HMAC, &rr->WakeUp.IMAC, ARDisplayString(m, rr)); in mDNSCoreReceiveRawND()
14149 ScheduleWakeup(m, rr->resrec.InterfaceID, &rr->WakeUp.HMAC); in mDNSCoreReceiveRawND()
14309 AuthRecord *rr, *r2; in mDNSCoreReceiveRawTransportPacket() local
14312 for (rr = m->ResourceRecords; rr; rr=rr->next) in mDNSCoreReceiveRawTransportPacket()
14313 if (rr->resrec.InterfaceID == InterfaceID && in mDNSCoreReceiveRawTransportPacket()
14314 rr->resrec.RecordType != kDNSRecordTypeDeregistering && in mDNSCoreReceiveRawTransportPacket()
14315 rr->AddressProxy.type && mDNSSameAddress(&rr->AddressProxy, dst)) in mDNSCoreReceiveRawTransportPacket()
14319 …(r2->resrec.InterfaceID == InterfaceID && mDNSSameEthAddress(&r2->WakeUp.HMAC, &rr->WakeUp.HMAC) && in mDNSCoreReceiveRawTransportPacket()
14324 …if (!r2 && mDNSSameIPPort(port, IPSECPort)) r2 = rr; // So that we wake for BTMM IPSEC packets,… in mDNSCoreReceiveRawTransportPacket()
14325 …if (!r2 && kaWake) r2 = rr; // So that we wake for keepalive packets, … in mDNSCoreReceiveRawTransportPacket()
14329 …InterfaceNameForID(m, rr->resrec.InterfaceID), dst, &rr->WakeUp.HMAC, &rr->WakeUp.IMAC, ARDisplayS… in mDNSCoreReceiveRawTransportPacket()
14330 ScheduleWakeup(m, rr->resrec.InterfaceID, &rr->WakeUp.HMAC); in mDNSCoreReceiveRawTransportPacket()
14334 … InterfaceNameForID(m, rr->resrec.InterfaceID), dst, &rr->WakeUp.HMAC, tp, mDNSVal16(port)); in mDNSCoreReceiveRawTransportPacket()
14744 mDNSlocal void DynDNSHostNameCallback(mDNS *const m, AuthRecord *const rr, mStatus result) in DynDNSHostNameCallback() argument
14747 … debugf("NameStatusCallback: result %d for registration of name %##s", result, rr->resrec.name->c); in DynDNSHostNameCallback()
14748 mDNSPlatformDynDNSHostNameStatusChanged(rr->resrec.name, result); in DynDNSHostNameCallback()
15239 AuthRecord *rr = m->CurrentRecord; in DeregLoop() local
15241 … (rr->resrec.RecordType != kDNSRecordTypeDeregistering) ? "Initiating " : "Accelerating", in DeregLoop()
15242 rr, rr->resrec.RecordType, ARDisplayString(m, rr)); in DeregLoop()
15243 if (rr->resrec.RecordType != kDNSRecordTypeDeregistering) in DeregLoop()
15244 mDNS_Deregister_internal(m, rr, mDNS_Dereg_rapid); in DeregLoop()
15245 else if (rr->AnnounceCount > 1) in DeregLoop()
15247 rr->AnnounceCount = 1; in DeregLoop()
15248 rr->LastAPTime = m->timenow - rr->ThisAPInterval; in DeregLoop()
15252 if (m->CurrentRecord == rr) // If m->CurrentRecord was not advanced for us, do it now in DeregLoop()
15253 m->CurrentRecord = rr->next; in DeregLoop()
15259 AuthRecord *rr; in mDNS_StartExit() local
15355 for (rr = m->DuplicateRecords; rr; rr = rr->next) in mDNS_StartExit()
15359 rr->resrec.RecordType, ARDisplayString(m, rr)); in mDNS_StartExit()
15375 AuthRecord *rr; in mDNS_FinalExit() local
15400 for (rr = m->ResourceRecords; rr; rr = rr->next) in mDNS_FinalExit()
15401 …_FinalExit failed to send goodbye for: %p %02X %s", rr, rr->resrec.RecordType, ARDisplayString(m, in mDNS_FinalExit()