Lines Matching refs:m

88 mDNSlocal void BeginSleepProcessing(mDNS *const m);
89 mDNSlocal void RetrySPSRegistrations(mDNS *const m);
90 mDNSlocal void SendWakeup(mDNS *const m, mDNSInterfaceID InterfaceID, mDNSEthAddr *EthAddr, mDNSOpa…
92 mDNSlocal mDNSBool LocalRecordRmvEventsForQuestion(mDNS *const m, DNSQuestion *q);
94 mDNSlocal void mDNS_PurgeBeforeResolve(mDNS *const m, DNSQuestion *q);
95 mDNSlocal void mDNS_SendKeepalives(mDNS *const m);
104 mDNSlocal void DeadvertiseInterface(mDNS *const m, NetworkInterfaceInfo *set, DeadvertiseFlags flag…
105 mDNSlocal void AdvertiseInterfaceIfNeeded(mDNS *const m, NetworkInterfaceInfo *set);
188 mDNS *m = context; in mDNS_ValidateLists() local
196 for (rr = m->ResourceRecords; rr; rr=rr->next) in mDNS_ValidateLists()
208 for (rr = m->DuplicateRecords; rr; rr=rr->next) in mDNS_ValidateLists()
217 rr = m->NewLocalRecords; in mDNS_ValidateLists()
222 rr = m->CurrentRecord; in mDNS_ValidateLists()
228 for (q = m->Questions; q; q=q->next) in mDNS_ValidateLists()
249 for (q = m->Questions; q; q=q->next) if (q == cr->CRActiveQuestion) break; in mDNS_ValidateLists()
250 …ctiveQuestion %p not in m->Questions list %s", slot, cr->CRActiveQuestion, CRDisplayString(m, cr)); in mDNS_ValidateLists()
255 if (m->NumAllInterfaceRecords != NumAllInterfaceRecords) in mDNS_ValidateLists()
256 …LogMemCorruption("NumAllInterfaceRecords is %d should be %d", m->NumAllInterfaceRecords, NumAllInt… in mDNS_ValidateLists()
258 if (m->NumAllInterfaceQuestions != NumAllInterfaceQuestions) in mDNS_ValidateLists()
259 …LogMemCorruption("NumAllInterfaceQuestions is %d should be %d", m->NumAllInterfaceQuestions, NumAl… in mDNS_ValidateLists()
274 mDNSlocal void SetNextQueryStopTime(mDNS *const m, const DNSQuestion *const q) in SetNextQueryStopTime() argument
276 mDNS_CheckLock(m); in SetNextQueryStopTime()
278 if (m->NextScheduledStopTime - q->StopTime > 0) in SetNextQueryStopTime()
279 m->NextScheduledStopTime = q->StopTime; in SetNextQueryStopTime()
282 mDNSexport void SetNextQueryTime(mDNS *const m, const DNSQuestion *const q) in SetNextQueryTime() argument
284 mDNS_CheckLock(m); in SetNextQueryTime()
291 …mDNSs32 *const timer = mDNSOpaque16IsZero(q->TargetQID) ? &m->NextScheduledQuery : &m->NextuDNSEve… in SetNextQueryTime()
423 mDNSexport AuthGroup *InsertAuthRecord(mDNS *const m, AuthHash *r, AuthRecord *rr) in InsertAuthRecord() argument
427 (void)m; in InsertAuthRecord()
438 mDNSexport AuthGroup *RemoveAuthRecord(mDNS *const m, AuthHash *r, AuthRecord *rr) in RemoveAuthRecord() argument
444 …if (!a) { LogMsg("RemoveAuthRecord: ERROR!! AuthGroup not found for %s", ARDisplayString(m, rr)); … in RemoveAuthRecord()
454 LogInfo("RemoveAuthRecord: removing auth record %s from table", ARDisplayString(m, rr)); in RemoveAuthRecord()
463 mDNSexport CacheGroup *CacheGroupForName(const mDNS *const m, const mDNSu32 namehash, const domainn… in CacheGroupForName() argument
467 for (cg = m->rrcache_hash[slot]; cg; cg=cg->next) in CacheGroupForName()
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()
478 mDNSexport mDNSBool mDNS_AddressIsLocalSubnet(mDNS *const m, const mDNSInterfaceID InterfaceID, con… in mDNS_AddressIsLocalSubnet() argument
486 for (intf = m->HostInterfaces; intf; intf = intf->next) in mDNS_AddressIsLocalSubnet()
495 for (intf = m->HostInterfaces; intf; intf = intf->next) in mDNS_AddressIsLocalSubnet()
507 mDNSlocal NetworkInterfaceInfo *FirstInterfaceForID(mDNS *const m, const mDNSInterfaceID InterfaceI… in FirstInterfaceForID() argument
509 NetworkInterfaceInfo *intf = m->HostInterfaces; in FirstInterfaceForID()
514 mDNSlocal NetworkInterfaceInfo *FirstIPv4LLInterfaceForID(mDNS *const m, const mDNSInterfaceID Inte… in FirstIPv4LLInterfaceForID() argument
523 for (intf = m->HostInterfaces; intf; intf = intf->next) in FirstIPv4LLInterfaceForID()
535 mDNSexport char *InterfaceNameForID(mDNS *const m, const mDNSInterfaceID InterfaceID) in InterfaceNameForID() argument
537 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, InterfaceID); in InterfaceNameForID()
542 mDNSlocal void GenerateNegativeResponseEx(mDNS *const m, mDNSInterfaceID InterfaceID, QC_result qc,… in GenerateNegativeResponseEx() argument
545 …if (!m->CurrentQuestion) { LogMsg("GenerateNegativeResponse: ERROR!! CurrentQuestion not set"); re… in GenerateNegativeResponseEx()
546 q = m->CurrentQuestion; in GenerateNegativeResponseEx()
551 …MakeNegativeCacheRecord(m, &m->rec.r, &q->qname, q->qnamehash, q->qtype, q->qclass, 60, InterfaceI… in GenerateNegativeResponseEx()
552m->rec.r.resrec.negativeRecordType = noData ? kNegativeRecordType_NoData : kNegativeRecordType_Uns… in GenerateNegativeResponseEx()
561 AnswerCurrentQuestionWithResourceRecord(m, &m->rec.r, qc); in GenerateNegativeResponseEx()
562 if (m->CurrentQuestion == q) { q->ThisQInterval = 0; } // Deactivate this question in GenerateNegativeResponseEx()
564 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it in GenerateNegativeResponseEx()
568 mDNSexport void AnswerQuestionByFollowingCNAME(mDNS *const m, DNSQuestion *q, ResourceRecord *rr) in AnswerQuestionByFollowingCNAME() argument
576 q->CNAMEReferrals, selfref ? " (Self-Referential)" : "", RRDisplayString(m, rr)); in AnswerQuestionByFollowingCNAME()
607 q->CNAMEReferrals, RRDisplayString(m, rr)); in AnswerQuestionByFollowingCNAME()
638 mDNS_StopQuery_internal(m, q); // Stop old query in AnswerQuestionByFollowingCNAME()
648 …NSVal16(q->TargetQID), q, DM_NAME_PARAM(&q->qname), DNSTypeName(q->qtype), RRDisplayString(m, rr)); in AnswerQuestionByFollowingCNAME()
653 mDNS_StartQuery_internal(m, q); // start new query in AnswerQuestionByFollowingCNAME()
752 mDNSlocal void AnswerLocalQuestionWithLocalAuthRecord(mDNS *const m, AuthRecord *rr, QC_result AddR… in AnswerLocalQuestionWithLocalAuthRecord() argument
754 DNSQuestion *q = m->CurrentQuestion; in AnswerLocalQuestionWithLocalAuthRecord()
759 …ithLocalAuthRecord: ERROR!! CurrentQuestion NULL while answering with %s", ARDisplayString(m, rr)); in AnswerLocalQuestionWithLocalAuthRecord()
769 AddRecord ? "Add" : "Rmv", rr->resrec.RecordType, ARDisplayString(m, rr)); in AnswerLocalQuestionWithLocalAuthRecord()
786 q->QuestionCallback(m, q, &rr->resrec, AddRecord); in AnswerLocalQuestionWithLocalAuthRecord()
791 if (followcname && m->CurrentQuestion == q) in AnswerLocalQuestionWithLocalAuthRecord()
792 AnswerQuestionByFollowingCNAME(m, q, &rr->resrec); in AnswerLocalQuestionWithLocalAuthRecord()
797 q->QuestionCallback(m, q, &rr->resrec, AddRecord); in AnswerLocalQuestionWithLocalAuthRecord()
803 mDNSlocal void AnswerInterfaceAnyQuestionsWithLocalAuthRecord(mDNS *const m, AuthRecord *ar, QC_res… in AnswerInterfaceAnyQuestionsWithLocalAuthRecord() argument
805 if (m->CurrentQuestion) in AnswerInterfaceAnyQuestionsWithLocalAuthRecord()
807 m->CurrentQuestion->qname.c, DNSTypeName(m->CurrentQuestion->qtype)); in AnswerInterfaceAnyQuestionsWithLocalAuthRecord()
808 m->CurrentQuestion = m->Questions; in AnswerInterfaceAnyQuestionsWithLocalAuthRecord()
809 while (m->CurrentQuestion && m->CurrentQuestion != m->NewQuestions) in AnswerInterfaceAnyQuestionsWithLocalAuthRecord()
812 DNSQuestion *q = m->CurrentQuestion; in AnswerInterfaceAnyQuestionsWithLocalAuthRecord()
818 … AnswerLocalQuestionWithLocalAuthRecord(m, ar, AddRecord); // MUST NOT dereference q again in AnswerInterfaceAnyQuestionsWithLocalAuthRecord()
819 …if (m->CurrentQuestion == q) // If m->CurrentQuestion was not auto-advanced, do it ourselves now in AnswerInterfaceAnyQuestionsWithLocalAuthRecord()
820 m->CurrentQuestion = q->next; in AnswerInterfaceAnyQuestionsWithLocalAuthRecord()
822 m->CurrentQuestion = mDNSNULL; in AnswerInterfaceAnyQuestionsWithLocalAuthRecord()
836 mDNSlocal void AnswerAllLocalQuestionsWithLocalAuthRecord(mDNS *const m, AuthRecord *ar, QC_result … in AnswerAllLocalQuestionsWithLocalAuthRecord() argument
838 if (m->CurrentQuestion) in AnswerAllLocalQuestionsWithLocalAuthRecord()
840 m->CurrentQuestion->qname.c, DNSTypeName(m->CurrentQuestion->qtype)); in AnswerAllLocalQuestionsWithLocalAuthRecord()
842 m->CurrentQuestion = m->LocalOnlyQuestions; in AnswerAllLocalQuestionsWithLocalAuthRecord()
843 while (m->CurrentQuestion && m->CurrentQuestion != m->NewLocalOnlyQuestions) in AnswerAllLocalQuestionsWithLocalAuthRecord()
846 DNSQuestion *q = m->CurrentQuestion; in AnswerAllLocalQuestionsWithLocalAuthRecord()
853 …AnswerLocalQuestionWithLocalAuthRecord(m, ar, AddRecord); // MUST NOT dereference q again in AnswerAllLocalQuestionsWithLocalAuthRecord()
854 …if (m->CurrentQuestion == q) // If m->CurrentQuestion was not auto-advanced, do it ourselves now in AnswerAllLocalQuestionsWithLocalAuthRecord()
855 m->CurrentQuestion = q->next; in AnswerAllLocalQuestionsWithLocalAuthRecord()
858 m->CurrentQuestion = mDNSNULL; in AnswerAllLocalQuestionsWithLocalAuthRecord()
862 AnswerInterfaceAnyQuestionsWithLocalAuthRecord(m, ar, AddRecord); in AnswerAllLocalQuestionsWithLocalAuthRecord()
1032 mDNSlocal void SetNextAnnounceProbeTime(mDNS *const m, const AuthRecord *const rr) in SetNextAnnounceProbeTime() argument
1036 if ((rr->LastAPTime + rr->ThisAPInterval) - m->timenow > mDNSPlatformOneSecond * 10) in SetNextAnnounceProbeTime()
1038 …d %s", rr->ProbeCount, (rr->LastAPTime + rr->ThisAPInterval) - m->timenow, ARDisplayString(m, rr)); in SetNextAnnounceProbeTime()
1039 …ime: m->SuppressProbes %d m->timenow %d diff %d", m->SuppressProbes, m->timenow, m->SuppressProbes… in SetNextAnnounceProbeTime()
1041 if (m->NextScheduledProbe - (rr->LastAPTime + rr->ThisAPInterval) >= 0) in SetNextAnnounceProbeTime()
1042 m->NextScheduledProbe = (rr->LastAPTime + rr->ThisAPInterval); in SetNextAnnounceProbeTime()
1047 if (m->NextScheduledProbe - m->timenow < 0) in SetNextAnnounceProbeTime()
1048 m->NextScheduledProbe = m->timenow; 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
1077 if (m->SuppressProbes == 0 || m->SuppressProbes - m->timenow < 0) in InitializeLastAPTime()
1086m->SuppressProbes = NonZeroTime(m->timenow + DefaultProbeIntervalForTypeUnique/2 + mDNSRandom(Defa… in InitializeLastAPTime()
1089 if (m->SuppressProbes - m->NextScheduledProbe >= 0) in InitializeLastAPTime()
1090 m->SuppressProbes = NonZeroTime(m->NextScheduledProbe); in InitializeLastAPTime()
1091 …if (m->SuppressProbes - m->timenow < 0) // Make sure we don't set m->SuppressProbes excessivel… in InitializeLastAPTime()
1092 m->SuppressProbes = m->timenow; in InitializeLastAPTime()
1095 if (m->SuppressProbes - m->NextScheduledQuery >= 0) in InitializeLastAPTime()
1096 m->SuppressProbes = NonZeroTime(m->NextScheduledQuery); in InitializeLastAPTime()
1097 …if (m->SuppressProbes - m->timenow < 0) // Make sure we don't set m->SuppressProbes excessivel… in InitializeLastAPTime()
1098 m->SuppressProbes = m->timenow; in InitializeLastAPTime()
1101 if (m->SuppressSending && m->SuppressProbes - m->SuppressSending < 0) in InitializeLastAPTime()
1102 m->SuppressProbes = NonZeroTime(m->SuppressSending); in InitializeLastAPTime()
1104 if (m->SuppressProbes - m->timenow > mDNSPlatformOneSecond * 8) in InitializeLastAPTime()
1107 m->SuppressProbes - m->timenow, in InitializeLastAPTime()
1108 m->NextScheduledProbe - m->timenow, in InitializeLastAPTime()
1109 m->NextScheduledQuery - m->timenow, in InitializeLastAPTime()
1110 m->SuppressSending, in InitializeLastAPTime()
1111 m->SuppressSending - m->timenow); in InitializeLastAPTime()
1112m->SuppressProbes = NonZeroTime(m->timenow + DefaultProbeIntervalForTypeUnique/2 + mDNSRandom(Defa… in InitializeLastAPTime()
1115 rr->LastAPTime = m->SuppressProbes - rr->ThisAPInterval; in InitializeLastAPTime()
1119 … && (rr->resrec.RecordType != kDNSRecordTypeShared) && m->SuppressProbes && (m->SuppressProbes - m in InitializeLastAPTime()
1120 …rr->LastAPTime = m->SuppressProbes - rr->ThisAPInterval + DefaultProbeIntervalForTypeUnique * Defa… in InitializeLastAPTime()
1122 rr->LastAPTime = m->timenow - rr->ThisAPInterval; in InitializeLastAPTime()
1131 rr->LastAPTime = m->timenow; in InitializeLastAPTime()
1135 rr->LastMCTime = m->timenow; in InitializeLastAPTime()
1138 SetNextAnnounceProbeTime(m, rr); in InitializeLastAPTime()
1141 mDNSlocal const domainname *SetUnicastTargetToHostName(mDNS *const m, AuthRecord *rr) in SetUnicastTargetToHostName() argument
1149 target = GetServiceTarget(m, rr); in SetUnicastTargetToHostName()
1153 LogInfo("SetUnicastTargetToHostName No target for %s", ARDisplayString(m, rr)); 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
1181 newname = &m->RandomizedHostname; in SetTargetToHostName()
1186 newname = &m->MulticastHostname; in SetTargetToHostName()
1192 const domainname *const n = SetUnicastTargetToHostName(m, rr); in SetTargetToHostName()
1220 InitializeLastAPTime(m, rr); in SetTargetToHostName()
1224 mDNSlocal void AcknowledgeRecord(mDNS *const m, AuthRecord *const rr) in AcknowledgeRecord() argument
1232 rr->RecordCallback(m, rr, mStatus_NoError); in AcknowledgeRecord()
1237 mDNSexport void ActivateUnicastRegistration(mDNS *const m, AuthRecord *const rr) in ActivateUnicastRegistration() argument
1254 …astRegistration: ERROR!! Resource record %s wrong, expecting SRV type", ARDisplayString(m, srvRR)); in ActivateUnicastRegistration()
1259 … ARDisplayString(m, srvRR), srvRR->state, rr->resrec.name->c, DNSTypeName(rr->resrec.rrtype)); in ActivateUnicastRegistration()
1267 …tivateUnicastRegistration record %s in regState_NoTarget, not activating", ARDisplayString(m, rr)); in ActivateUnicastRegistration()
1277 … Resource record %s, current state %d, moving to DeregPending", ARDisplayString(m, rr), rr->state); in ActivateUnicastRegistration()
1282 …tion: Resource record %s, current state %d, moving to Pending", ARDisplayString(m, rr), rr->state); in ActivateUnicastRegistration()
1291 rr->LastAPTime = m->timenow - rr->ThisAPInterval; in ActivateUnicastRegistration()
1301 mDNS_StopNATOperation_internal(m, &rr->NATinfo); in ActivateUnicastRegistration()
1304 if (rr->nta) { CancelGetZoneData(m, rr->nta); rr->nta = mDNSNULL; } in ActivateUnicastRegistration()
1306 if (m->NextuDNSEvent - (rr->LastAPTime + rr->ThisAPInterval) >= 0) in ActivateUnicastRegistration()
1307 m->NextuDNSEvent = (rr->LastAPTime + rr->ThisAPInterval); in ActivateUnicastRegistration()
1387 mDNSlocal void DecrementAutoTargetServices(mDNS *const m, AuthRecord *const rr) in DecrementAutoTargetServices() argument
1392 …ogInfo("DecrementAutoTargetServices: called for RRLocalOnly() record: %s", ARDisplayString(m, rr)); in DecrementAutoTargetServices()
1406 m->AutoTargetAWDLIncludedCount--; in DecrementAutoTargetServices()
1409 m->AutoTargetAWDLIncludedCount, ARDisplayString(m, rr)); in DecrementAutoTargetServices()
1410 if (m->AutoTargetAWDLIncludedCount == 0) in DecrementAutoTargetServices()
1413 if (m->AutoTargetAWDLOnlyCount == 0) flagsAWDL |= kDeadvertiseFlag_RandHostname; in DecrementAutoTargetServices()
1418 m->AutoTargetAWDLOnlyCount--; in DecrementAutoTargetServices()
1421 m->AutoTargetAWDLOnlyCount, ARDisplayString(m, rr)); in DecrementAutoTargetServices()
1422 if ((m->AutoTargetAWDLIncludedCount == 0) && (m->AutoTargetAWDLOnlyCount == 0)) in DecrementAutoTargetServices()
1429 for (intf = m->HostInterfaces; intf; intf = intf->next) in DecrementAutoTargetServices()
1434 if (flagsAWDL) DeadvertiseInterface(m, intf, flagsAWDL); in DecrementAutoTargetServices()
1438 if (flags) DeadvertiseInterface(m, intf, flags); in DecrementAutoTargetServices()
1442 if ((m->AutoTargetAWDLIncludedCount == 0) && (m->AutoTargetAWDLOnlyCount == 0)) in DecrementAutoTargetServices()
1444 GetRandomUUIDLocalHostname(&m->RandomizedHostname); in DecrementAutoTargetServices()
1450 m->AutoTargetServices--; in DecrementAutoTargetServices()
1453 m->AutoTargetServices, ARDisplayString(m, rr)); in DecrementAutoTargetServices()
1454 if (m->AutoTargetServices == 0) in DecrementAutoTargetServices()
1456 for (intf = m->HostInterfaces; intf; intf = intf->next) in DecrementAutoTargetServices()
1458 … if (intf->Advertise) DeadvertiseInterface(m, intf, kDeadvertiseFlag_NormalHostname); in DecrementAutoTargetServices()
1467 if (m->NumAllInterfaceRecords + m->NumAllInterfaceQuestions == 1) in DecrementAutoTargetServices()
1468m->NextBonjourDisableTime = NonZeroTime(m->timenow + (BONJOUR_DISABLE_DELAY * mDNSPlatformOneSecon… in DecrementAutoTargetServices()
1469 m->NumAllInterfaceRecords--; in DecrementAutoTargetServices()
1472 m->NumAllInterfaceRecords, m->NumAllInterfaceQuestions, ARDisplayString(m, rr)); in DecrementAutoTargetServices()
1477 mDNSlocal void AdvertiseNecessaryInterfaceRecords(mDNS *const m) in AdvertiseNecessaryInterfaceRecords() argument
1480 for (intf = m->HostInterfaces; intf; intf = intf->next) in AdvertiseNecessaryInterfaceRecords()
1482 if (intf->Advertise) AdvertiseInterfaceIfNeeded(m, intf); in AdvertiseNecessaryInterfaceRecords()
1486 mDNSlocal void IncrementAutoTargetServices(mDNS *const m, AuthRecord *const rr) in IncrementAutoTargetServices() argument
1493 …ogInfo("IncrementAutoTargetServices: called for RRLocalOnly() record: %s", ARDisplayString(m, rr)); in IncrementAutoTargetServices()
1500 m->NumAllInterfaceRecords++; in IncrementAutoTargetServices()
1503 m->NumAllInterfaceRecords, m->NumAllInterfaceQuestions, ARDisplayString(m, rr)); in IncrementAutoTargetServices()
1504 if (m->NumAllInterfaceRecords + m->NumAllInterfaceQuestions == 1) in IncrementAutoTargetServices()
1506 m->NextBonjourDisableTime = 0; in IncrementAutoTargetServices()
1507 if (m->BonjourEnabled == 0) in IncrementAutoTargetServices()
1511 m->BonjourEnabled = 1; in IncrementAutoTargetServices()
1513 m->NetworkChanged = m->timenow; in IncrementAutoTargetServices()
1524 m->AutoTargetAWDLIncludedCount++; in IncrementAutoTargetServices()
1527 m->AutoTargetAWDLIncludedCount, ARDisplayString(m, rr)); in IncrementAutoTargetServices()
1531 m->AutoTargetAWDLOnlyCount++; in IncrementAutoTargetServices()
1534 m->AutoTargetAWDLOnlyCount, ARDisplayString(m, rr)); in IncrementAutoTargetServices()
1539 m->AutoTargetServices++; in IncrementAutoTargetServices()
1542 m->AutoTargetServices, ARDisplayString(m, rr)); in IncrementAutoTargetServices()
1548 if (!enablingBonjour) AdvertiseNecessaryInterfaceRecords(m); in IncrementAutoTargetServices()
1552 mDNSlocal void getKeepaliveRaddr(mDNS *const m, AuthRecord *rr, mDNSAddr *raddr) in getKeepaliveRaddr() argument
1568 …eRaddr: not a valid record %s for keepalive %#a:%d %#a:%d", ARDisplayString(m, rr), &laddr, lport.… in getKeepaliveRaddr()
1575 mDNSexport mStatus mDNS_Register_internal(mDNS *const m, AuthRecord *const rr) in mDNS_Register_internal() argument
1579 AuthRecord **p = &m->ResourceRecords; in mDNS_Register_internal()
1580 AuthRecord **d = &m->DuplicateRecords; in mDNS_Register_internal()
1583 … %X should be 1 - 0x7FFFFFFF %s", rr->resrec.rroriginalttl, ARDisplayString(m, rr)); return(mStatu… in mDNS_Register_internal()
1586 …{ LogMsg("mDNS_Register_internal: RecordType must be non-zero %s", ARDisplayString(m, rr)); return… in mDNS_Register_internal()
1588 if (m->ShutdownTime) 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()
1601 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, rr->resrec.InterfaceID); in mDNS_Register_internal()
1605 … LogInfo("mDNS_Register_internal: Diverting record to local-only %s", ARDisplayString(m, rr)); in mDNS_Register_internal()
1610 if (CheckAuthSameRecord(&m->rrauth, rr)) in mDNS_Register_internal()
1690 if (!rr->AutoTarget) InitializeLastAPTime(m, rr); in mDNS_Register_internal()
1740 …SetTargetToHostName(m, rr); // Also sets rdlength and rdestimate for us, and calls InitializeLastA… in mDNS_Register_internal()
1749 LogInfo("mDNS_Register_internal: record %s in NoTarget state", ARDisplayString(m, rr)); in mDNS_Register_internal()
1760 …{ LogMsg("Attempt to register record with invalid name: %s", ARDisplayString(m, rr)); return(mStat… in mDNS_Register_internal()
1764 …{ LogMsg("Attempt to register record with invalid rdata: %s", ARDisplayString(m, rr)); return(mSta… in mDNS_Register_internal()
1779 if (CheckAuthRecordConflict(&m->rrauth, rr)) in mDNS_Register_internal()
1781 …_Register_internal: Name conflict %s (%p), InterfaceID %p", ARDisplayString(m, rr), rr, rr->resrec… in mDNS_Register_internal()
1791 if (!m->NewLocalRecords) m->NewLocalRecords = rr; in mDNS_Register_internal()
1800 if (rr->state != regState_NoTarget) ActivateUnicastRegistration(m, rr); in mDNS_Register_internal()
1811 r = CheckAuthIdenticalRecord(&m->rrauth, rr); in mDNS_Register_internal()
1815 for (r = m->ResourceRecords; r; r=r->next) in mDNS_Register_internal()
1825 LogInfo("mDNS_Register_internal: Adding to duplicate list %s", ARDisplayString(m,rr)); in mDNS_Register_internal()
1836 LogInfo("mDNS_Register_internal: Adding to active record list %s", ARDisplayString(m,rr)); in mDNS_Register_internal()
1840 ag = InsertAuthRecord(m, &m->rrauth, rr); in mDNS_Register_internal()
1843 m->NewLocalOnlyRecords = mDNStrue; in mDNS_Register_internal()
1848 AcknowledgeRecord(m, rr); in mDNS_Register_internal()
1853 if (!m->NewLocalRecords) m->NewLocalRecords = rr; in mDNS_Register_internal()
1861 IncrementAutoTargetServices(m, rr); in mDNS_Register_internal()
1865 AcknowledgeRecord(m, rr); in mDNS_Register_internal()
1868 mDNS_UpdateAllowSleep(m); 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
1891 m->ProbeFailTime = m->timenow; in RecordProbeFailure()
1892 m->NumFailedProbes++; in RecordProbeFailure()
1900 if (m->NumFailedProbes >= 15) in RecordProbeFailure()
1902 m->SuppressProbes = NonZeroTime(m->timenow + mDNSPlatformOneSecond * 5); in RecordProbeFailure()
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
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
1925 AuthRecord **p = &m->ResourceRecords; // Find this record in our list of active records in mDNS_Deregister_internal()
1933 a = AuthGroupForRecord(&m->rrauth, &rr->resrec); in mDNS_Deregister_internal()
1951 …for (r2 = m->DuplicateRecords; r2; r2=r2->next) if (RecordIsLocalDuplicate(r2, rr)) r2->ProbeCount… in mDNS_Deregister_internal()
1957 AuthRecord **d = &m->DuplicateRecords; in mDNS_Deregister_internal()
1968 …if (!InsertAuthRecord(m, &m->rrauth, dup)) LogMsg("mDNS_Deregister_internal: ERROR!! cannot insert… in mDNS_Deregister_internal()
2000 p = &m->DuplicateRecords; in mDNS_Deregister_internal()
2024 … LogMsg("mDNS_Deregister_internal: Record %p not found in list %s", rr, ARDisplayString(m,rr)); in mDNS_Deregister_internal()
2049 m->LocalRemoveEvents = mDNStrue; in mDNS_Deregister_internal()
2050 uDNS_DeregisterRecord(m, rr); in mDNS_Deregister_internal()
2071 mDNS_StopNATOperation_internal(m, &rr->NATinfo); in mDNS_Deregister_internal()
2074 if (rr->nta) { CancelGetZoneData(m, rr->nta); rr->nta = 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()
2091 … verbosedebugf("mDNS_Deregister_internal: Starting deregistration for %s", ARDisplayString(m, rr)); in mDNS_Deregister_internal()
2096 rr->LastAPTime = m->timenow - rr->ThisAPInterval; in mDNS_Deregister_internal()
2097 m->LocalRemoveEvents = mDNStrue; in mDNS_Deregister_internal()
2098 if (m->NextScheduledResponse - (m->timenow + mDNSPlatformOneSecond/10) >= 0) in mDNS_Deregister_internal()
2099 m->NextScheduledResponse = (m->timenow + mDNSPlatformOneSecond/10); in mDNS_Deregister_internal()
2105 AuthGroup *ag = RemoveAuthRecord(m, &m->rrauth, rr); 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()
2118 verbosedebugf("mDNS_Deregister_internal: Deleting record for %s", ARDisplayString(m, rr)); 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()
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()
2146 rr->RecordCallback(m, rr, mStatus_NameConflict); // MUST NOT touch rr after this in mDNS_Deregister_internal()
2151 r2 = m->DuplicateRecords; in mDNS_Deregister_internal()
2164 mDNS_Deregister_internal(m, r2, mDNS_Dereg_conflict); in mDNS_Deregister_internal()
2167 r2 = m->DuplicateRecords; in mDNS_Deregister_internal()
2172 mDNS_UpdateAllowSleep(m); in mDNS_Deregister_internal()
2197 mDNSlocal void AddRRSetAdditionalsToResponseList(mDNS *const m, AuthRecord ***nrpp, AuthRecord *rr,… in AddRRSetAdditionalsToResponseList() argument
2202 for (rr2 = m->ResourceRecords; rr2; rr2 = rr2->next) in AddRRSetAdditionalsToResponseList()
2218 mDNSlocal void AddAdditionalsToResponseList(mDNS *const m, AuthRecord *ResponseRecords, AuthRecord … in AddAdditionalsToResponseList() argument
2228 AddRRSetAdditionalsToResponseList(m, nrpp, rr, rr->Additional1, InterfaceID); in AddAdditionalsToResponseList()
2234 AddRRSetAdditionalsToResponseList(m, nrpp, rr, rr->Additional2, InterfaceID); in AddAdditionalsToResponseList()
2240 …for (rr2=m->ResourceRecords; rr2; rr2=rr2->next) // Scan list of resource recor… in AddAdditionalsToResponseList()
2249 …for (rr2=m->ResourceRecords; rr2; rr2=rr2->next) // Scan list of resource recor… in AddAdditionalsToResponseList()
2258 if (ResourceRecordIsValidInterfaceAnswer(&m->DeviceInfo, InterfaceID) && 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()
2265 mDNSlocal void SendDelayedUnicastResponse(mDNS *const m, const mDNSAddr *const dest, const mDNSInte… in SendDelayedUnicastResponse() argument
2270 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, InterfaceID); in SendDelayedUnicastResponse()
2273 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendDelayedUnicastResponse()
2307 AddAdditionalsToResponseList(m, ResponseRecords, &nrp, InterfaceID); in SendDelayedUnicastResponse()
2311 mDNSu8 *responseptr = m->omsg.data; in SendDelayedUnicastResponse()
2313 InitializeDNSMessage(&m->omsg.h, zeroID, ResponseFlags); in SendDelayedUnicastResponse()
2322 newptr = PutResourceRecord(&m->omsg, responseptr, &m->omsg.h.numAnswers, &rr->resrec); in SendDelayedUnicastResponse()
2325 if (!newptr && m->omsg.h.numAnswers) in SendDelayedUnicastResponse()
2343 … newptr = PutResourceRecord(&m->omsg, responseptr, &m->omsg.h.numAdditionals, &rr->resrec); in SendDelayedUnicastResponse()
2347 if (newptr && m->omsg.h.numAnswers) rr->RequireGoodbye = mDNStrue; in SendDelayedUnicastResponse()
2355 if (m->omsg.h.numAnswers) in SendDelayedUnicastResponse()
2356 …mDNSSendDNSMessage(m, &m->omsg, responseptr, InterfaceID, mDNSNULL, mDNSNULL, dest, MulticastDNSPo… 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()
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()
2379 mDNSlocal void DiscardDeregistrations(mDNS *const m) in DiscardDeregistrations() argument
2381 if (m->CurrentRecord) in DiscardDeregistrations()
2382 …LogMsg("DiscardDeregistrations ERROR m->CurrentRecord already set %s", ARDisplayString(m, m->Curre… in DiscardDeregistrations()
2383 m->CurrentRecord = m->ResourceRecords; in DiscardDeregistrations()
2385 while (m->CurrentRecord) in DiscardDeregistrations()
2387 AuthRecord *rr = m->CurrentRecord; 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
2468 mDNSu8 *ptr = m->omsg.data; in SendARP()
2469 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, rr->resrec.InterfaceID); in SendARP()
2470 … interface with InterfaceID %p found %s", rr->resrec.InterfaceID, ARDisplayString(m,rr)); return; } in SendARP()
2501 mDNSPlatformSendRawPacket(m->omsg.data, ptr, rr->resrec.InterfaceID); in SendARP()
2529 mDNSlocal void SendNDP(mDNS *const m, const mDNSu8 op, const mDNSu8 flags, const AuthRecord *const … in SendNDP() argument
2534 mDNSu8 *ptr = m->omsg.data; in SendNDP()
2540 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, rr->resrec.InterfaceID); in SendNDP()
2541 … interface with InterfaceID %p found %s", rr->resrec.InterfaceID, ARDisplayString(m,rr)); return; } in SendNDP()
2621 m->omsg.data[0x13] = ptr - &m->omsg.data[0x36]; // Compute actual length in SendNDP()
2622 … checksum.NotAnInteger = ~IPv6CheckSum(spa, v6dst, 0x3A, &m->omsg.data[0x36], m->omsg.data[0x13]); in SendNDP()
2623 m->omsg.data[0x38] = checksum.b[0]; in SendNDP()
2624 m->omsg.data[0x39] = checksum.b[1]; in SendNDP()
2626 mDNSPlatformSendRawPacket(m->omsg.data, ptr, rr->resrec.InterfaceID); in SendNDP()
2629 mDNSlocal void SetupTracerOpt(const mDNS *const m, rdataOPT *const Trace) in SetupTracerOpt() argument
2632 Trace->u.tracer.platf = m->mDNS_plat; in SetupTracerOpt()
2639 mDNSlocal void SetupOwnerOpt(const mDNS *const m, const NetworkInterfaceInfo *const intf, rdataOPT … in SetupOwnerOpt() argument
2642 owner->u.owner.seq = m->SleepSeqNum; in SetupOwnerOpt()
2643 owner->u.owner.HMAC = m->PrimaryMAC; in SetupOwnerOpt()
2650 owner->optlen = DNSOpt_Owner_Space(&m->PrimaryMAC, &intf->MAC) - 4; in SetupOwnerOpt()
2659 mDNSlocal mDNSBool ShouldSendGoodbyesBeforeSleep(mDNS *const m, const NetworkInterfaceInfo *intf, A… 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()
2672 if (m->SleepState != SleepState_Sleeping) in ShouldSendGoodbyesBeforeSleep()
2679 …debugf("ShouldSendGoodbyesBeforeSleep: not sending goodbye %s, int %p", ARDisplayString(m, rr), in… in ShouldSendGoodbyesBeforeSleep()
2684 …debugf("ShouldSendGoodbyesBeforeSleep: sending goodbye %s, int %p", ARDisplayString(m, rr), intf->… in ShouldSendGoodbyesBeforeSleep()
2705 mDNSlocal void SendResponses(mDNS *const m) in SendResponses() argument
2710 const NetworkInterfaceInfo *intf = GetFirstActiveInterface(m->HostInterfaces); in SendResponses()
2712 m->NextScheduledResponse = m->timenow + FutureTime; in SendResponses()
2714 if (m->SleepState == SleepState_Transferring) RetrySPSRegistrations(m); in SendResponses()
2716 for (rr = m->ResourceRecords; rr; rr=rr->next) 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()
2727 … LogMsg("SendResponses: ERROR: rr->ImmedUnicast still set: %s", ARDisplayString(m, rr)); 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()
2751 …s: Sending wakeup %2d for %.6a %s", rr->AnnounceCount-3, &rr->WakeUp.IMAC, ARDisplayString(m, rr)); in SendResponses()
2753 … SendWakeup(m, rr->resrec.InterfaceID, &rr->WakeUp.IMAC, &rr->WakeUp.password, unicastOnly); in SendResponses()
2763 … r2->AnnounceCount-3, &r2->WakeUp.HMAC, &r2->WakeUp.IMAC, ARDisplayString(m,r2)); in SendResponses()
2764 …SendNDP(m, NDP_Adv, NDP_Override, r2, &r2->AddressProxy.ip.v6, &r2->WakeUp.IMAC, &AllHosts_v6, &Al… in SendResponses()
2766 r2->LastAPTime = m->timenow; in SendResponses()
2780 rr->LastAPTime = m->timenow; in SendResponses()
2784 … rr->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()
2790 … rr->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()
2808 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendResponses()
2811 TimeToAnnounceThisRecord(rr, m->timenow + rr->ThisAPInterval/2) && in SendResponses()
2820 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendResponses()
2823 … for (r2=m->ResourceRecords; r2; r2=r2->next) // Scan list of resource records 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()
2838 else m->DeviceInfo.ImmedAnswer = mDNSInterfaceMark; in SendResponses()
2848 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendResponses()
2853 for (r2 = m->ResourceRecords; r2; r2=r2->next) in SendResponses()
2866 for (r2 = m->ResourceRecords; r2; r2=r2->next) in SendResponses()
2880 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendResponses()
2886 rr->LastMCTime = m->timenow; in SendResponses()
2890 if (TimeToAnnounceThisRecord(rr, m->timenow + rr->ThisAPInterval/2)) in SendResponses()
2895 rr->LastAPTime = m->timenow; in SendResponses()
2903 rr->LastMCTime = m->timenow; in SendResponses()
2906 SetNextAnnounceProbeTime(m, rr); in SendResponses()
2916 …int OwnerRecordSpace = (m->AnnounceOwner && intf->MAC.l[0]) ? DNSOpt_Header_Space + DNSOpt_Owner_S… in SendResponses()
2921 mDNSu8 *responseptr = m->omsg.data; in SendResponses()
2923 InitializeDNSMessage(&m->omsg.h, zeroID, ResponseFlags); in SendResponses()
2929 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendResponses()
2944 …->resrec.RecordType != kDNSRecordTypeDeregistering && !ShouldSendGoodbyesBeforeSleep(m, intf, rr)); in SendResponses()
2951 newptr = PutRR_OS_TTL(responseptr, &m->omsg.h.numAnswers, &rr->resrec, 0); in SendResponses()
2960 …newptr = PutRR_OS_TTL(responseptr, &m->omsg.h.numAnswers, &rr->resrec, active ? rr->resrec.rrorigi… in SendResponses()
2967 else if (rr->LastAPTime == m->timenow) numAnnounce++;else numAnswer++; in SendResponses()
2991 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendResponses()
2996 mDNSBool SendAdditional = (m->omsg.h.numAnswers > 0); in SendResponses()
3004 for (a = m->ResourceRecords; a; a=a->next) in SendResponses()
3005 if (a->LastMCTime == m->timenow && in SendResponses()
3020 newptr = PutRR_OS(newptr, &m->omsg.h.numAdditionals, &rr->resrec); in SendResponses()
3031 rr->LastMCTime = m->timenow; in SendResponses()
3041 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendResponses()
3061 for (r2 = m->ResourceRecords; r2; r2=r2->next) in SendResponses()
3064 …e_ANY) { LogMsg("SendResponses: Can't create NSEC for record %s", ARDisplayString(m, r2)); break; } in SendResponses()
3070 newptr = PutRR_OS(responseptr, &m->omsg.h.numAdditionals, &nsec.resrec); in SendResponses()
3089 if (m->omsg.h.numAnswers || m->omsg.h.numAdditionals) in SendResponses()
3103 SetupOwnerOpt(m, intf, &opt.resrec.rdata->u.opt[0]); in SendResponses()
3104 SetupTracerOpt(m, &opt.resrec.rdata->u.opt[1]); in SendResponses()
3108 SetupOwnerOpt(m, intf, &opt.resrec.rdata->u.opt[0]); in SendResponses()
3112 SetupTracerOpt(m, &opt.resrec.rdata->u.opt[0]); in SendResponses()
3114 … newptr = PutResourceRecord(&m->omsg, responseptr, &m->omsg.h.numAdditionals, &opt.resrec); in SendResponses()
3119 … else if (m->omsg.h.numAnswers + m->omsg.h.numAuthorities + m->omsg.h.numAdditionals == 1) in SendResponses()
3122m->omsg.h.numQuestions, m->omsg.h.numAnswers, m->omsg.h.numAuthorities, m->omsg.h.numAdditionals, … in SendResponses()
3127m->omsg.h.numQuestions, m->omsg.h.numAnswers, m->omsg.h.numAuthorities, m->omsg.h.numAdditionals, … in SendResponses()
3135m->omsg.h.numAdditionals, m->omsg.h.numAdditionals == 1 ? "" : "s", intf->InterfaceID); in SendResponses()
3137 …if (intf->IPv4Available) mDNSSendDNSMessage(m, &m->omsg, responseptr, intf->InterfaceID, mDNSNULL,… in SendResponses()
3138 …if (intf->IPv6Available) mDNSSendDNSMessage(m, &m->omsg, responseptr, intf->InterfaceID, mDNSNULL,… in SendResponses()
3139 …if (!m->SuppressSending) m->SuppressSending = NonZeroTime(m->timenow + (mDNSPlatformOneSecond+9)/1… in SendResponses()
3159 if (m->CurrentRecord) in SendResponses()
3160 …LogMsg("SendResponses ERROR m->CurrentRecord already set %s", ARDisplayString(m, m->CurrentRecord)… in SendResponses()
3161 m->CurrentRecord = m->ResourceRecords; in SendResponses()
3162 while (m->CurrentRecord) in SendResponses()
3164 rr = m->CurrentRecord; in SendResponses()
3165 m->CurrentRecord = rr->next; in SendResponses()
3171 …r->SendRNow), IIDPrintable(rr->resrec.InterfaceID), rr->resrec.RecordType, ARDisplayString(m, rr)); in SendResponses()
3177 …if (rr->NewRData) CompleteRDataUpdate(m, rr); // Update our rdata, clear the NewRData pointer, a… in SendResponses()
3182 … if (!AuthRecord_uDNS(rr)) CompleteDeregistration(m, rr); // Don't touch rr after this in SendResponses()
3193 verbosedebugf("SendResponses: Next in %ld ticks", m->NextScheduledResponse - m->timenow); in SendResponses()
3216 mDNSexport void ScheduleNextCacheCheckTime(mDNS *const m, const mDNSu32 slot, const mDNSs32 event) in ScheduleNextCacheCheckTime() argument
3218 if (m->rrcache_nextcheck[slot] - event > 0) in ScheduleNextCacheCheckTime()
3219 m->rrcache_nextcheck[slot] = event; in ScheduleNextCacheCheckTime()
3220 if (m->NextCacheCheck - event > 0) in ScheduleNextCacheCheckTime()
3221 m->NextCacheCheck = event; in ScheduleNextCacheCheckTime()
3229 mDNSexport void SetNextCacheCheckTimeForRecord(mDNS *const m, CacheRecord *const rr) in SetNextCacheCheckTimeForRecord() argument
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()
3268 if (!m->RandomReconfirmDelay) m->RandomReconfirmDelay = 1 + mDNSRandom(FutureTime); in mDNS_Reconfirm_internal()
3269 interval += m->RandomReconfirmDelay % ((interval/3) + 1); in mDNS_Reconfirm_internal()
3270 rr->TimeRcvd = m->timenow - (mDNSs32)interval * 3; 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()
3282 mDNSlocal mDNSBool BuildQuestion(mDNS *const m, const NetworkInterfaceInfo *intf, DNSMessage *query… in BuildQuestion() argument
3285 …mDNSBool ucast = (q->LargeAnswers || q->RequestUnicast) && m->CanReceiveUnicastOn5353 && intf->Sup… in BuildQuestion()
3297 const CacheGroup *const cg = CacheGroupForName(m, q->qnamehash, &q->qname); in BuildQuestion()
3307 …cr->TimeRcvd + TicksTTL(cr)/2 - m->timenow > // and its half-way-to-expiry time is … in BuildQuestion()
3337 if (ucast) q->ExpectUnicastResp = NonZeroTime(m->timenow); in BuildQuestion()
3345 cr->LastUnansweredTime = m->timenow; in BuildQuestion()
3346 SetNextCacheCheckTimeForRecord(m, cr); in BuildQuestion()
3365 mDNSlocal void ReconfirmAntecedents(mDNS *const m, const domainname *const name, const mDNSu32 name… in ReconfirmAntecedents() argument
3380 …ecedents: Reconfirming (depth=%d, InterfaceID=%p) %s", depth, InterfaceID, CRDisplayString(m, cr)); in ReconfirmAntecedents()
3381 mDNS_Reconfirm_internal(m, cr, kDefaultReconfirmTimeForNoAnswer); in ReconfirmAntecedents()
3383 ReconfirmAntecedents(m, cr->resrec.name, cr->resrec.namehash, InterfaceID, depth+1); in ReconfirmAntecedents()
3392 mDNSlocal const CacheRecord *CacheHasAddressTypeForName(mDNS *const m, const domainname *const name… in CacheHasAddressTypeForName() argument
3394 CacheGroup *const cg = CacheGroupForName(m, namehash, name); in CacheHasAddressTypeForName()
3401 mDNSlocal const CacheRecord *FindSPSInCache1(mDNS *const m, const DNSQuestion *const q, const Cache… in FindSPSInCache1() argument
3404 CacheGroup *const cg = CacheGroupForName(m, q->qnamehash, &q->qname); in FindSPSInCache1()
3411 …if (!IdenticalSameNameRecord(&cr->resrec, &m->SPSRecords.RR_PTR.resrec)) // and is not our own … in FindSPSInCache1()
3418 (void) m; in FindSPSInCache1()
3452 mDNSexport void FindSPSInCache(mDNS *const m, const DNSQuestion *const q, const CacheRecord *sps[3]) in FindSPSInCache() argument
3454 sps[0] = FindSPSInCache1(m, q, mDNSNULL, mDNSNULL); in FindSPSInCache()
3455 sps[1] = !sps[0] ? mDNSNULL : FindSPSInCache1(m, q, sps[0], mDNSNULL); in FindSPSInCache()
3456 sps[2] = !sps[1] ? mDNSNULL : FindSPSInCache1(m, q, sps[0], sps[1]); in FindSPSInCache()
3513 mDNSlocal void mDNSSendWakeOnResolve(mDNS *const m, DNSQuestion *q) in mDNSSendWakeOnResolve() argument
3554 m->mDNSStats.WakeOnResolves++; in mDNSSendWakeOnResolve()
3565 mDNSlocal mDNSBool AccelerateThisQuery(mDNS *const m, DNSQuestion *q) in AccelerateThisQuery() argument
3568 if (TimeToSendThisQuestion(q, m->timenow + q->ThisQInterval/10)) in AccelerateThisQuery()
3572 if (TimeToSendThisQuestion(q, m->timenow + q->ThisQInterval/2)) in AccelerateThisQuery()
3576 const CacheGroup *const cg = CacheGroupForName(m, q->qnamehash, &q->qname); in AccelerateThisQuery()
3581 …cr->TimeRcvd + TicksTTL(cr)/2 - m->timenow >= 0 && // and it is less than half-way to ex… in AccelerateThisQuery()
3582 …cr->NextRequiredQuery - (m->timenow + q->ThisQInterval) > 0) // and we'll ask at least once again … in AccelerateThisQuery()
3606 mDNSlocal void SendQueries(mDNS *const m) in SendQueries() argument
3616 const NetworkInterfaceInfo *intf = GetFirstActiveInterface(m->HostInterfaces); in SendQueries()
3627 if (m->timenow + TicksTTL(cr)/50 - cr->NextRequiredQuery >= 0) in SendQueries()
3629 …nding %d%% cache expiration query for %s", 80 + 5 * cr->UnansweredQueries, CRDisplayString(m, cr)); in SendQueries()
3631 …ExpireDupSuppressInfoOnInterface(q->DupSuppress, m->timenow - TicksTTL(cr)/20, cr->resrec.Interfac… in SendQueries()
3636 q->LastQTime = m->timenow - q->ThisQInterval; in SendQueries()
3638 m->mDNSStats.CacheRefreshQueries++; in SendQueries()
3663 if (m->CurrentQuestion) in SendQueries()
3664 …ries ERROR m->CurrentQuestion already set: %##s (%s)", m->CurrentQuestion->qname.c, DNSTypeName(m-… in SendQueries()
3665 m->CurrentQuestion = m->Questions; in SendQueries()
3666 while (m->CurrentQuestion && m->CurrentQuestion != m->NewQuestions) in SendQueries()
3668 q = m->CurrentQuestion; in SendQueries()
3669 if (mDNSOpaque16IsZero(q->TargetQID) && TimeToSendThisQuestion(q, m->timenow)) in SendQueries()
3679 if (q == m->CurrentQuestion) m->CurrentQuestion = m->CurrentQuestion->next; in SendQueries()
3681 while (m->CurrentQuestion) in SendQueries()
3683 …ries question loop 1: Skipping NewQuestion %##s (%s)", m->CurrentQuestion->qname.c, DNSTypeName(m-… in SendQueries()
3684 m->CurrentQuestion = m->CurrentQuestion->next; in SendQueries()
3686 m->CurrentQuestion = mDNSNULL; in SendQueries()
3694 m->NextScheduledQuery = m->timenow + FutureTime; in SendQueries()
3695 for (q = m->Questions; q && q != m->NewQuestions; q=q->next) in SendQueries()
3698 …ActiveQuestion(q) && q->ThisQInterval <= maxExistingQuestionInterval && AccelerateThisQuery(m,q)))) in SendQueries()
3703 if (m->timenow - (q->LastQTime + (q->ThisQInterval/2)) >= 0) in SendQueries()
3716 q->LastQTime = m->timenow; in SendQueries()
3737 … !(RRTypeIsAddressType(q->qtype) && CacheHasAddressTypeForName(m, &q->qname, q->qnamehash))) in SendQueries()
3747 ReconfirmAntecedents(m, &q->qname, q->qnamehash, q->InterfaceID, 0); in SendQueries()
3756 q->LastQTime = m->timenow; in SendQueries()
3761 ExpireDupSuppressInfo(q->DupSuppress, m->timenow - q->ThisQInterval/2); in SendQueries()
3763 q->LastQTxTime = m->timenow; in SendQueries()
3769 SetNextQueryTime(m,q); in SendQueries()
3774 m->NextScheduledProbe = m->timenow + FutureTime; in SendQueries()
3776 if (m->CurrentRecord) in SendQueries()
3777 … LogMsg("SendQueries ERROR m->CurrentRecord already set %s", ARDisplayString(m, m->CurrentRecord)); in SendQueries()
3778 m->CurrentRecord = m->ResourceRecords; in SendQueries()
3779 while (m->CurrentRecord) in SendQueries()
3781 ar = m->CurrentRecord; in SendQueries()
3782 m->CurrentRecord = ar->next; in SendQueries()
3786 if (m->timenow - (ar->LastAPTime + ar->ThisAPInterval) < 0) in SendQueries()
3788 SetNextAnnounceProbeTime(m, ar); in SendQueries()
3800 …P Probe %d %s %s", ar->ProbeCount, InterfaceNameForID(m, ar->resrec.InterfaceID), ARDisplayString( in SendQueries()
3801 … SendARP(m, 1, ar, &zerov4Addr, &zeroEthAddr, &ar->AddressProxy.ip.v4, &ar->WakeUp.IMAC); in SendQueries()
3805 …P Probe %d %s %s", ar->ProbeCount, InterfaceNameForID(m, ar->resrec.InterfaceID), ARDisplayString( in SendQueries()
3810 … SendNDP(m, NDP_Sol, 0, ar, &zerov6Addr, mDNSNULL, &ar->AddressProxy.ip.v6, &ar->WakeUp.IMAC); in SendQueries()
3814 ar->LastAPTime = m->timenow; in SendQueries()
3820 SetNextAnnounceProbeTime(m, ar); in SendQueries()
3826 for (r2 = m->DuplicateRecords; r2; r2=r2->next) in SendQueries()
3837 if (!ar->Acknowledged) AcknowledgeRecord(m, ar); in SendQueries()
3844 …if (!ar->Acknowledged) AcknowledgeRecord(m, ar); // Defensive, just in case it got missed someh… in SendQueries()
3847 ar->LastAPTime = m->timenow - DefaultAnnounceIntervalForTypeUnique; in SendQueries()
3848 SetNextAnnounceProbeTime(m, ar); in SendQueries()
3852 m->CurrentRecord = m->DuplicateRecords; in SendQueries()
3853 while (m->CurrentRecord) in SendQueries()
3855 ar = m->CurrentRecord; in SendQueries()
3856 m->CurrentRecord = ar->next; in SendQueries()
3858 AcknowledgeRecord(m, ar); in SendQueries()
3865 …int OwnerRecordSpace = (m->AnnounceOwner && intf->MAC.l[0]) ? DNSOpt_Header_Space + DNSOpt_Owner_S… in SendQueries()
3867 mDNSu8 *queryptr = m->omsg.data; in SendQueries()
3870 InitializeDNSMessage(&m->omsg.h, zeroID, QueryFlags); in SendQueries()
3879 for (q = m->Questions; q && q != m->NewQuestions; q=q->next) in SendQueries()
3886 …q->qname.c, DNSTypeName(q->qtype), queryptr - m->omsg.data, queryptr + answerforecast - m->omsg.da… in SendQueries()
3895 BuildQuestion(m, intf, &m->omsg, &queryptr, q, &kalistptr, &answerforecast)) in SendQueries()
3898 m->mDNSStats.DupQuerySuppressions++; in SendQueries()
3903 mDNSSendWakeOnResolve(m, q); in SendQueries()
3917 for (ar = m->ResourceRecords; ar; ar=ar->next) in SendQueries()
3930 …mDNSBool ucast = (ar->ProbeCount >= DefaultProbeCountForTypeUnique-1) && m->CanReceiveUnicastOn535… in SendQueries()
3932 …const mDNSu8 *const limit = m->omsg.data + (m->omsg.h.numQuestions ? NormalMaxDNSMessageData : Abs… in SendQueries()
3939 const mDNSu8 *questionptr = m->omsg.data; in SendQueries()
3942 for (n = 0; n < m->omsg.h.numQuestions && questionptr; n++) in SendQueries()
3944 … questionptr = getQuestion(&m->omsg, questionptr, limit, mDNSInterface_Any, &question); in SendQueries()
3956 …mDNSu8 *newptr = putQuestion(&m->omsg, queryptr, limit - forecast, ar->resrec.name, kDNSQType_ANY,… in SendQueries()
3980 mDNSu32 SecsSinceRcvd = ((mDNSu32)(m->timenow - ka->TimeRcvd)) / mDNSPlatformOneSecond; in SendQueries()
3981 …mDNSu8 *newptr = PutResourceRecordTTLWithLimit(&m->omsg, queryptr, &m->omsg.h.numAnswers, &ka->res… in SendQueries()
3982m->omsg.data + NormalMaxDNSMessageData - OwnerRecordSpace - TraceRecordSpace); in SendQueries()
3986 …ka->resrec.name->c, DNSTypeName(ka->resrec.rrtype), queryptr - m->omsg.data, newptr - m->omsg.data… in SendQueries()
3995 if (m->omsg.h.numQuestions > 1) in SendQueries()
3996 … LogMsg("SendQueries: Put %d answers; No more space for known answers", m->omsg.h.numAnswers); in SendQueries()
3997 m->omsg.h.flags.b[0] |= kDNSFlag0_TC; in SendQueries()
4002 for (ar = m->ResourceRecords; ar; ar=ar->next) in SendQueries()
4006 … mDNSu8 *newptr = PutResourceRecord(&m->omsg, queryptr, &m->omsg.h.numAuthorities, &ar->resrec); in SendQueries()
4009 …sg("SendQueries: How did we fail to have space for the Update record %s", ARDisplayString(m,ar)); in SendQueries()
4013 if (queryptr > m->omsg.data) in SendQueries()
4027 SetupOwnerOpt(m, intf, &opt.resrec.rdata->u.opt[0]); in SendQueries()
4028 SetupTracerOpt(m, &opt.resrec.rdata->u.opt[1]); in SendQueries()
4032 SetupOwnerOpt(m, intf, &opt.resrec.rdata->u.opt[0]); in SendQueries()
4036 SetupTracerOpt(m, &opt.resrec.rdata->u.opt[0]); in SendQueries()
4038 … queryptr = PutResourceRecordTTLWithLimit(&m->omsg, queryptr, &m->omsg.h.numAdditionals, in SendQueries()
4039 … &opt.resrec, opt.resrec.rroriginalttl, m->omsg.data + AbsoluteMaxDNSMessageData); in SendQueries()
4043m->omsg.h.numQuestions, m->omsg.h.numAnswers, m->omsg.h.numAuthorities, m->omsg.h.numAdditionals, … in SendQueries()
4045 if (queryptr > m->omsg.data + NormalMaxDNSMessageData) in SendQueries()
4047 …if (m->omsg.h.numQuestions != 1 || m->omsg.h.numAnswers != 0 || m->omsg.h.numAuthorities != 1 || m in SendQueries()
4049 …aceRecordSpace ? "TRACER" : "", m->omsg.data, m->omsg.data + NormalMaxDNSMessageData, queryptr, m-… in SendQueries()
4050m->omsg.h.numAuthorities, m->omsg.h.numAdditionals, ARDisplayString(m, &opt)); in SendQueries()
4054 if ((m->omsg.h.flags.b[0] & kDNSFlag0_TC) && m->omsg.h.numQuestions > 1) in SendQueries()
4055 …ueries: Should not have more than one question (%d) in a truncated packet", m->omsg.h.numQuestions… in SendQueries()
4057 m->omsg.h.numQuestions, m->omsg.h.numQuestions == 1 ? "" : "s", in SendQueries()
4058 m->omsg.h.numAnswers, m->omsg.h.numAnswers == 1 ? "" : "s", in SendQueries()
4059m->omsg.h.numAuthorities, m->omsg.h.numAuthorities == 1 ? "" : "s", IIDPrintable(intf->InterfaceID… in SendQueries()
4060 …if (intf->IPv4Available) mDNSSendDNSMessage(m, &m->omsg, queryptr, intf->InterfaceID, mDNSNULL, mD… in SendQueries()
4061 …if (intf->IPv6Available) mDNSSendDNSMessage(m, &m->omsg, queryptr, intf->InterfaceID, mDNSNULL, mD… in SendQueries()
4062 …if (!m->SuppressSending) m->SuppressSending = NonZeroTime(m->timenow + (mDNSPlatformOneSecond+9)/1… in SendQueries()
4082 for (ar = m->ResourceRecords; ar; ar=ar->next) in SendQueries()
4087 … IIDPrintable(ar->SendRNow), IIDPrintable(ar->resrec.InterfaceID), ARDisplayString(m, ar)); in SendQueries()
4100 if (m->timenow + TicksTTL(cr)/50 - cr->NextRequiredQuery >= 0) in SendQueries()
4104 SetNextCacheCheckTimeForRecord(m, cr); in SendQueries()
4112 for (q = m->Questions; q; q=q->next) in SendQueries()
4117 …for (x = m->NewQuestions; x; x=x->next) if (x == q) break; // Check if this question is a NewQues… in SendQueries()
4129 mDNSlocal void SendWakeup(mDNS *const m, mDNSInterfaceID InterfaceID, mDNSEthAddr *EthAddr, mDNSOpa… in SendWakeup() argument
4133 mDNSu8 *ptr = m->omsg.data; in SendWakeup()
4134 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, InterfaceID); in SendWakeup()
4156 mDNSPlatformSendRawPacket(m->omsg.data, ptr, InterfaceID); in SendWakeup()
4165 for (i=0; i<6; i++) m->omsg.data[i] = 0xFF; in SendWakeup()
4166 mDNSPlatformSendRawPacket(m->omsg.data, ptr, InterfaceID); in SendWakeup()
4179 mDNSlocal void ResetQuestionState(mDNS *const m, DNSQuestion *q) in ResetQuestionState() argument
4181 q->LastQTime = m->timenow; in ResetQuestionState()
4182 q->LastQTxTime = m->timenow; in ResetQuestionState()
4194 mDNSlocal void AdjustUnansweredQueries(mDNS *const m, CacheRecord *const rr) in AdjustUnansweredQueries() argument
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()
4210 rem = ((mDNSu32)(expireTime - m->timenow)) / interval; in AdjustUnansweredQueries()
4236 mDNSexport void AnswerCurrentQuestionWithResourceRecord(mDNS *const m, CacheRecord *const rr, const… in AnswerCurrentQuestionWithResourceRecord() argument
4238 DNSQuestion *const q = m->CurrentQuestion; 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()
4299 … responseLatencyMs = ((m->timenow - q->metrics.firstQueryTime) * 1000) / mDNSPlatformOneSecond; in AnswerCurrentQuestionWithResourceRecord()
4318 rr->CRActiveQuestion, q, CRDisplayString(m,rr), q->CurrentAnswers); in AnswerCurrentQuestionWithResourceRecord()
4321m->rrcache_active++; // If not previously active, increment rrcache_active count in AnswerCurrentQuestionWithResourceRecord()
4322 …AdjustUnansweredQueries(m, rr); // Adjust UnansweredQueries in case the record missed out on refre… in AnswerCurrentQuestionWithResourceRecord()
4325 SetNextCacheCheckTimeForRecord(m, rr); in AnswerCurrentQuestionWithResourceRecord()
4339 ResetQuestionState(m, q); in AnswerCurrentQuestionWithResourceRecord()
4346 … if (!mDNSOpaque16IsZero(q->TargetQID) && DNS64StateMachine(m, q, &rr->resrec, AddRecord)) return; in AnswerCurrentQuestionWithResourceRecord()
4358 mDNS_StopQuery_internal(m, q); // Stop old query in AnswerCurrentQuestionWithResourceRecord()
4361 mDNS_StartQuery_internal(m, q); // Start new query in AnswerCurrentQuestionWithResourceRecord()
4389 …MakeNegativeCacheRecord(m, &neg, &q->qname, q->qnamehash, q->qtype, q->qclass, 1, rr->resrec.Inter… in AnswerCurrentQuestionWithResourceRecord()
4391 …MakeNegativeCacheRecord(m, &neg, &q->qname, q->qnamehash, q->qtype, q->qclass, 1, rr->resrec.Inter… in AnswerCurrentQuestionWithResourceRecord()
4393 q->QuestionCallback(m, q, &neg.resrec, AddRecord); in AnswerCurrentQuestionWithResourceRecord()
4401 DNS64AnswerCurrentQuestion(m, &rr->resrec, AddRecord); in AnswerCurrentQuestionWithResourceRecord()
4410 q->QuestionCallback(m, q, &rr->resrec, AddRecord); in AnswerCurrentQuestionWithResourceRecord()
4420 if (m->CurrentQuestion == q) in AnswerCurrentQuestionWithResourceRecord()
4425 if (followcname) AnswerQuestionByFollowingCNAME(m, q, &rr->resrec); in AnswerCurrentQuestionWithResourceRecord()
4430 …ourceRecord: Keeping track of domain for expired RR %s for question %p", CRDisplayString(m,rr), q); in AnswerCurrentQuestionWithResourceRecord()
4437 mDNSlocal void CacheRecordDeferredAdd(mDNS *const m, CacheRecord *cr) in CacheRecordDeferredAdd() argument
4440 if (m->CurrentQuestion) in CacheRecordDeferredAdd()
4442 m->CurrentQuestion->qname.c, DNSTypeName(m->CurrentQuestion->qtype)); in CacheRecordDeferredAdd()
4443 m->CurrentQuestion = m->Questions; in CacheRecordDeferredAdd()
4444 while (m->CurrentQuestion && m->CurrentQuestion != m->NewQuestions) in CacheRecordDeferredAdd()
4446 DNSQuestion *q = m->CurrentQuestion; in CacheRecordDeferredAdd()
4448 AnswerCurrentQuestionWithResourceRecord(m, cr, QC_add); in CacheRecordDeferredAdd()
4449 …if (m->CurrentQuestion == q) // If m->CurrentQuestion was not auto-advanced, do it ourselves now in CacheRecordDeferredAdd()
4450 m->CurrentQuestion = q->next; in CacheRecordDeferredAdd()
4452 m->CurrentQuestion = mDNSNULL; in CacheRecordDeferredAdd()
4455 mDNSlocal mDNSs32 CheckForSoonToExpireRecords(mDNS *const m, const domainname *const name, const mD… in CheckForSoonToExpireRecords() argument
4457 …const mDNSs32 threshold = m->timenow + mDNSPlatformOneSecond; // See if there are any records exp… in CheckForSoonToExpireRecords()
4458 const mDNSs32 start = m->timenow - 0x10000000; in CheckForSoonToExpireRecords()
4460 CacheGroup *cg = CacheGroupForName(m, namehash, name); in CheckForSoonToExpireRecords()
4485 mDNSlocal void CacheRecordAdd(mDNS *const m, CacheRecord *cr) in CacheRecordAdd() argument
4491 for (q = m->Questions; q && q != m->NewQuestions; q=q->next) in CacheRecordAdd()
4502 if (q->LastAnswerPktNum != m->PktNum) in CacheRecordAdd()
4504 q->LastAnswerPktNum = m->PktNum; in CacheRecordAdd()
4506 …q->ThisQInterval > InitialQuestionInterval * QuestionIntervalStep3 && m->timenow - q->LastQTxTime … in CacheRecordAdd()
4510 …q->LastQTime = m->timenow - InitialQuestionInterval + (mDNSs32)mDNSRandom((mDNSu32)mDNSPlatfo… in CacheRecordAdd()
4512 SetNextQueryTime(m,q); in CacheRecordAdd()
4540 if (m->CurrentQuestion) in CacheRecordAdd()
4541 …dAdd ERROR m->CurrentQuestion already set: %##s (%s)", m->CurrentQuestion->qname.c, DNSTypeName(m-… in CacheRecordAdd()
4542 m->CurrentQuestion = m->Questions; in CacheRecordAdd()
4543 while (m->CurrentQuestion && m->CurrentQuestion != m->NewQuestions) in CacheRecordAdd()
4545 q = m->CurrentQuestion; in CacheRecordAdd()
4547 AnswerCurrentQuestionWithResourceRecord(m, cr, QC_add); in CacheRecordAdd()
4548 …if (m->CurrentQuestion == q) // If m->CurrentQuestion was not auto-advanced, do it ourselves now in CacheRecordAdd()
4549 m->CurrentQuestion = q->next; in CacheRecordAdd()
4551 m->CurrentQuestion = mDNSNULL; in CacheRecordAdd()
4554 SetNextCacheCheckTimeForRecord(m, cr); in CacheRecordAdd()
4567 mDNSlocal void NoCacheAnswer(mDNS *const m, CacheRecord *cr) in NoCacheAnswer() argument
4569 LogMsg("No cache space: Delivering non-cached result for %##s", m->rec.r.resrec.name->c); in NoCacheAnswer()
4570 if (m->CurrentQuestion) in NoCacheAnswer()
4571 …swer ERROR m->CurrentQuestion already set: %##s (%s)", m->CurrentQuestion->qname.c, DNSTypeName(m-… in NoCacheAnswer()
4572 m->CurrentQuestion = m->Questions; in NoCacheAnswer()
4575 while (m->CurrentQuestion) in NoCacheAnswer()
4577 DNSQuestion *q = m->CurrentQuestion; in NoCacheAnswer()
4579 …AnswerCurrentQuestionWithResourceRecord(m, cr, QC_addnocache); // QC_addnocache means "don't expe… in NoCacheAnswer()
4580 …if (m->CurrentQuestion == q) // If m->CurrentQuestion was not auto-advanced, do it ourselves now in NoCacheAnswer()
4581 m->CurrentQuestion = q->next; in NoCacheAnswer()
4583 m->CurrentQuestion = mDNSNULL; in NoCacheAnswer()
4595 mDNSlocal void CacheRecordRmv(mDNS *const m, CacheRecord *cr) in CacheRecordRmv() argument
4597 if (m->CurrentQuestion) in CacheRecordRmv()
4599 m->CurrentQuestion->qname.c, DNSTypeName(m->CurrentQuestion->qtype)); in CacheRecordRmv()
4600 m->CurrentQuestion = m->Questions; in CacheRecordRmv()
4604 while (m->CurrentQuestion && m->CurrentQuestion != m->NewQuestions) in CacheRecordRmv()
4606 DNSQuestion *q = m->CurrentQuestion; in CacheRecordRmv()
4614 verbosedebugf("CacheRecordRmv %p %s", cr, CRDisplayString(m, cr)); in CacheRecordRmv()
4638 q->LastQTime = m->timenow - q->ThisQInterval; in CacheRecordRmv()
4639 SetNextQueryTime(m,q); in CacheRecordRmv()
4649 ReconfirmAntecedents(m, &q->qname, q->qnamehash, cr->resrec.InterfaceID, 0); in CacheRecordRmv()
4651 AnswerCurrentQuestionWithResourceRecord(m, cr, QC_rmv); in CacheRecordRmv()
4654 …if (m->CurrentQuestion == q) // If m->CurrentQuestion was not auto-advanced, do it ourselves now in CacheRecordRmv()
4655 m->CurrentQuestion = q->next; in CacheRecordRmv()
4657 m->CurrentQuestion = mDNSNULL; in CacheRecordRmv()
4660 mDNSlocal void ReleaseCacheEntity(mDNS *const m, CacheEntity *e) in ReleaseCacheEntity() argument
4666 e->next = m->rrcache_free; in ReleaseCacheEntity()
4667 m->rrcache_free = e; in ReleaseCacheEntity()
4668 m->rrcache_totalused--; in ReleaseCacheEntity()
4671 mDNSlocal void ReleaseCacheGroup(mDNS *const m, CacheGroup **cp) in ReleaseCacheGroup() argument
4682 ReleaseCacheEntity(m, e); in ReleaseCacheGroup()
4685 mDNSlocal void ReleaseAdditionalCacheRecords(mDNS *const m, CacheRecord **rp) in ReleaseAdditionalCacheRecords() argument
4707 m->rrcache_totalused_unicast -= rr->resrec.rdlength; in ReleaseAdditionalCacheRecords()
4709 ReleaseCacheEntity(m, (CacheEntity *)rr); in ReleaseAdditionalCacheRecords()
4713 mDNSexport void ReleaseCacheRecord(mDNS *const m, CacheRecord *r) in ReleaseCacheRecord() argument
4728 cg = CacheGroupForRecord(m, &r->resrec); in ReleaseCacheRecord()
4747 m->rrcache_totalused_unicast -= r->resrec.rdlength; in ReleaseCacheRecord()
4750 ReleaseAdditionalCacheRecords(m, &r->soa); in ReleaseCacheRecord()
4752 ReleaseCacheEntity(m, (CacheEntity *)r); in ReleaseCacheRecord()
4758 mDNSlocal void CheckCacheExpiration(mDNS *const m, const mDNSu32 slot, CacheGroup *const cg) in CheckCacheExpiration() argument
4762 if (m->lock_rrcache) { LogMsg("CheckCacheExpiration ERROR! Cache already locked!"); return; } in CheckCacheExpiration()
4763 m->lock_rrcache = 1; in CheckCacheExpiration()
4770 if (m->timenow - event >= 0) // If expired, delete it in CheckCacheExpiration()
4776m->timenow - rr->TimeRcvd, rr->resrec.rroriginalttl, rr->CRActiveQuestion, CRDisplayString(m, rr)); in CheckCacheExpiration()
4788 q->LastQTime = m->timenow - q->ThisQInterval; in CheckCacheExpiration()
4789 SetNextQueryTime(m, q); in CheckCacheExpiration()
4791 CacheRecordRmv(m, rr); in CheckCacheExpiration()
4792 m->rrcache_active--; in CheckCacheExpiration()
4798 …(rr->resrec.mortality == Mortality_Ghost && m->timenow - event >= 0)) // A ghost record that exp… in CheckCacheExpiration()
4803m->timenow - rr->TimeRcvd, rr->resrec.rroriginalttl, rr->CRActiveQuestion, CRDisplayString(m, rr)); in CheckCacheExpiration()
4804 ReleaseCacheRecord(m, rr); in CheckCacheExpiration()
4814m->timenow - rr->TimeRcvd, rr->resrec.rroriginalttl, rr->CRActiveQuestion, CRDisplayString(m, rr)); in CheckCacheExpiration()
4821 if (rr->DelayDelivery && rr->DelayDelivery - m->timenow > 0) in CheckCacheExpiration()
4825 if (rr->DelayDelivery) CacheRecordDeferredAdd(m, rr); in CheckCacheExpiration()
4828 … if (m->timenow - rr->NextRequiredQuery < 0) // If not yet time for next query in CheckCacheExpiration()
4834 m->NextScheduledQuery = m->timenow; in CheckCacheExpiration()
4837 event = m->timenow + FutureTime; in CheckCacheExpiration()
4846 … (event - m->timenow) / mDNSPlatformOneSecond, CacheCheckGracePeriod(rr), CRDisplayString(m, rr)); in CheckCacheExpiration()
4847 if (m->rrcache_nextcheck[slot] - event > 0) in CheckCacheExpiration()
4848 m->rrcache_nextcheck[slot] = event; in CheckCacheExpiration()
4854 m->lock_rrcache = 0; in CheckCacheExpiration()
4864 mDNSlocal mDNSBool AnswerQuestionWithLORecord(mDNS *const m, DNSQuestion *q, mDNSBool checkOnly) in AnswerQuestionWithLORecord() argument
4869 if (m->CurrentRecord) in AnswerQuestionWithLORecord()
4870 …QuestionWithLORecord ERROR m->CurrentRecord already set %s", ARDisplayString(m, m->CurrentRecord)); in AnswerQuestionWithLORecord()
4872 ag = AuthGroupForName(&m->rrauth, q->qnamehash, &q->qname); in AnswerQuestionWithLORecord()
4875 m->CurrentRecord = ag->members; in AnswerQuestionWithLORecord()
4876 while (m->CurrentRecord && m->CurrentRecord != ag->NewLocalOnlyRecords) in AnswerQuestionWithLORecord()
4878 AuthRecord *rr = m->CurrentRecord; in AnswerQuestionWithLORecord()
4879 m->CurrentRecord = rr->next; in AnswerQuestionWithLORecord()
4894 ARDisplayString(m, rr)); in AnswerQuestionWithLORecord()
4895 m->CurrentRecord = mDNSNULL; in AnswerQuestionWithLORecord()
4898 AnswerLocalQuestionWithLocalAuthRecord(m, rr, QC_add); in AnswerQuestionWithLORecord()
4899 if (m->CurrentQuestion != q) in AnswerQuestionWithLORecord()
4904 m->CurrentRecord = mDNSNULL; in AnswerQuestionWithLORecord()
4906 if (m->CurrentQuestion != q) in AnswerQuestionWithLORecord()
4944 mDNSlocal void AnswerSuppressedQuestion(mDNS *const m, DNSQuestion *q) in AnswerSuppressedQuestion() argument
4950 GenerateNegativeResponse(m, mDNSInterface_Any, QC_suppressed); in AnswerSuppressedQuestion()
4958 mDNSlocal void AnswerNewQuestion(mDNS *const m) in AnswerNewQuestion() argument
4961 DNSQuestion *const q = m->NewQuestions; // Grab the question we're going to answer in AnswerNewQuestion()
4963 if (!mDNSOpaque16IsZero(q->TargetQID)) DNS64HandleNewQuestion(m, q); in AnswerNewQuestion()
4965 CacheGroup *const cg = CacheGroupForName(m, q->qnamehash, &q->qname); in AnswerNewQuestion()
4969 if (cg) CheckCacheExpiration(m, HashSlotFromNameHash(q->qnamehash), cg); in AnswerNewQuestion()
4970 …if (m->NewQuestions != q) { LogInfo("AnswerNewQuestion: Question deleted while doing CheckCacheExp… in AnswerNewQuestion()
4971 m->NewQuestions = q->next; in AnswerNewQuestion()
4989 if (m->lock_rrcache) LogMsg("AnswerNewQuestion ERROR! Cache already locked!"); in AnswerNewQuestion()
4994 m->lock_rrcache = 1; in AnswerNewQuestion()
4995 if (m->CurrentQuestion) { in AnswerNewQuestion()
4998 m->CurrentQuestion->request_id, mDNSVal16(m->CurrentQuestion->TargetQID), in AnswerNewQuestion()
4999 DM_NAME_PARAM(&m->CurrentQuestion->qname), DNSTypeName(m->CurrentQuestion->qtype)); in AnswerNewQuestion()
5002m->CurrentQuestion = q; // Indicate which question we're answering, so we'll know if it gets d… in AnswerNewQuestion()
5011 …MakeNegativeCacheRecord(m, &m->rec.r, &q->qname, q->qnamehash, q->qtype, q->qclass, 60, mDNSInterf… in AnswerNewQuestion()
5013 …MakeNegativeCacheRecord(m, &m->rec.r, &q->qname, q->qnamehash, q->qtype, q->qclass, 60, mDNSInterf… in AnswerNewQuestion()
5016 AnswerCurrentQuestionWithResourceRecord(m, &m->rec.r, QC_addnocache); in AnswerNewQuestion()
5018 if (m->CurrentQuestion == q) q->NoAnswer = NoAnswer_Fail; // Restore NoAnswer state in AnswerNewQuestion()
5019 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it in AnswerNewQuestion()
5022 if (m->CurrentQuestion != q) in AnswerNewQuestion()
5030 if (AnswerQuestionWithLORecord(m, q, mDNSfalse)) in AnswerNewQuestion()
5038 AnswerSuppressedQuestion(m, q); in AnswerNewQuestion()
5047 … mDNSu32 SecsSinceRcvd = ((mDNSu32)(m->timenow - cr->TimeRcvd)) / mDNSPlatformOneSecond; in AnswerNewQuestion()
5062 cr->LastCachedAnswerTime = m->timenow; in AnswerNewQuestion()
5065 AnswerCurrentQuestionWithResourceRecord(m, cr, QC_add); in AnswerNewQuestion()
5066 … if (m->CurrentQuestion != q) break; // If callback deleted q, then we're finished here in AnswerNewQuestion()
5073 …if (m->CurrentQuestion != q) { debugf("AnswerNewQuestion: Question deleted while giving cache answ… in AnswerNewQuestion()
5087 mDNS_StopQuery_internal(m, q); // Stop old query in AnswerNewQuestion()
5096 mDNS_StartQuery_internal(m, q); // start new query in AnswerNewQuestion()
5108 q->LastQTime = m->timenow - q->ThisQInterval; in AnswerNewQuestion()
5112 if (!m->RandomQueryDelay) in AnswerNewQuestion()
5113m->RandomQueryDelay = (mDNSPlatformOneSecond + mDNSRandom(mDNSPlatformOneSecond*5) - 1) / 50 + 1; in AnswerNewQuestion()
5114 q->LastQTime += m->RandomQueryDelay; in AnswerNewQuestion()
5123 SetNextQueryTime(m,q); in AnswerNewQuestion()
5126 m->CurrentQuestion = mDNSNULL; in AnswerNewQuestion()
5127 m->lock_rrcache = 0; in AnswerNewQuestion()
5132 mDNSlocal void AnswerNewLocalOnlyQuestion(mDNS *const m) in AnswerNewLocalOnlyQuestion() argument
5135 DNSQuestion *q = m->NewLocalOnlyQuestions; // Grab the question we're going to answer in AnswerNewLocalOnlyQuestion()
5137m->NewLocalOnlyQuestions = q->next; // Advance NewLocalOnlyQuestions to the next (if a… in AnswerNewLocalOnlyQuestion()
5141 if (m->CurrentQuestion) in AnswerNewLocalOnlyQuestion()
5143 m->CurrentQuestion->qname.c, DNSTypeName(m->CurrentQuestion->qtype)); in AnswerNewLocalOnlyQuestion()
5144m->CurrentQuestion = q; // Indicate which question we're answering, so we'll know if it gets d… in AnswerNewLocalOnlyQuestion()
5146 if (m->CurrentRecord) in AnswerNewLocalOnlyQuestion()
5147 …NewLocalOnlyQuestion ERROR m->CurrentRecord already set %s", ARDisplayString(m, m->CurrentRecord)); in AnswerNewLocalOnlyQuestion()
5152 ag = AuthGroupForName(&m->rrauth, q->qnamehash, &q->qname); in AnswerNewLocalOnlyQuestion()
5155 m->CurrentRecord = ag->members; in AnswerNewLocalOnlyQuestion()
5156 while (m->CurrentRecord && m->CurrentRecord != ag->NewLocalOnlyRecords) in AnswerNewLocalOnlyQuestion()
5158 AuthRecord *rr = m->CurrentRecord; in AnswerNewLocalOnlyQuestion()
5159 m->CurrentRecord = rr->next; in AnswerNewLocalOnlyQuestion()
5163 AnswerLocalQuestionWithLocalAuthRecord(m, rr, QC_add); in AnswerNewLocalOnlyQuestion()
5164 … if (m->CurrentQuestion != q) break; // If callback deleted q, then we're finished here in AnswerNewLocalOnlyQuestion()
5169 if (m->CurrentQuestion == q) in AnswerNewLocalOnlyQuestion()
5171 m->CurrentRecord = m->ResourceRecords; in AnswerNewLocalOnlyQuestion()
5173 while (m->CurrentRecord && m->CurrentRecord != m->NewLocalRecords) in AnswerNewLocalOnlyQuestion()
5175 AuthRecord *ar = m->CurrentRecord; in AnswerNewLocalOnlyQuestion()
5176 m->CurrentRecord = ar->next; in AnswerNewLocalOnlyQuestion()
5180 AnswerLocalQuestionWithLocalAuthRecord(m, ar, QC_add); in AnswerNewLocalOnlyQuestion()
5181 … if (m->CurrentQuestion != q) break; // If callback deleted q, then we're finished here in AnswerNewLocalOnlyQuestion()
5188 if (!retEv && (m->CurrentQuestion == q) && q->ReturnIntermed) in AnswerNewLocalOnlyQuestion()
5189 GenerateNegativeResponse(m, mDNSInterface_LocalOnly, QC_forceresponse); in AnswerNewLocalOnlyQuestion()
5191 m->CurrentQuestion = mDNSNULL; in AnswerNewLocalOnlyQuestion()
5192 m->CurrentRecord = mDNSNULL; in AnswerNewLocalOnlyQuestion()
5195 mDNSlocal CacheEntity *GetCacheEntity(mDNS *const m, const CacheGroup *const PreserveCG) in GetCacheEntity() argument
5199 … if (m->lock_rrcache) { LogMsg("GetFreeCacheRR ERROR! Cache already locked!"); return(mDNSNULL); } in GetCacheEntity()
5200 m->lock_rrcache = 1; in GetCacheEntity()
5203 if (!m->rrcache_free && m->MainCallback) in GetCacheEntity()
5205 if (m->rrcache_totalused != m->rrcache_size) in GetCacheEntity()
5209 m->rrcache_totalused, m->rrcache_size); in GetCacheEntity()
5217 if (m->rrcache_size > 5000 && m->rrcache_size / 32 > m->rrcache_active) in GetCacheEntity()
5221 m->rrcache_size, m->rrcache_active); in GetCacheEntity()
5226 m->MainCallback(m, mStatus_GrowCache); in GetCacheEntity()
5233 if (!m->rrcache_free) in GetCacheEntity()
5235 mDNSu32 oldtotalused = m->rrcache_totalused; in GetCacheEntity()
5239 CacheGroup **cp = &m->rrcache_hash[slot]; in GetCacheEntity()
5253 ReleaseCacheRecord(m, rr); in GetCacheEntity()
5260 else ReleaseCacheGroup(m, cp); in GetCacheEntity()
5264 oldtotalused - m->rrcache_totalused, oldtotalused, m->rrcache_totalused); in GetCacheEntity()
5267 if (m->rrcache_free) // If there are records in the free list, take one in GetCacheEntity()
5269 e = m->rrcache_free; in GetCacheEntity()
5270 m->rrcache_free = e->next; in GetCacheEntity()
5271 if (++m->rrcache_totalused >= m->rrcache_report) in GetCacheEntity()
5273 …LogRedact(MDNS_LOG_CATEGORY_DEFAULT, MDNS_LOG_INFO, "RR Cache now using %u objects", m->rrcache_to… in GetCacheEntity()
5274 if (m->rrcache_report < 100) m->rrcache_report += 10; in GetCacheEntity()
5275 else if (m->rrcache_report < 1000) m->rrcache_report += 100; in GetCacheEntity()
5276 else m->rrcache_report += 1000; in GetCacheEntity()
5281 m->lock_rrcache = 0; in GetCacheEntity()
5286 mDNSlocal CacheRecord *GetCacheRecord(mDNS *const m, CacheGroup *cg, mDNSu16 RDLength) in GetCacheRecord() argument
5288 CacheRecord *r = (CacheRecord *)GetCacheEntity(m, cg); in GetCacheRecord()
5296 else { ReleaseCacheEntity(m, (CacheEntity*)r); r = mDNSNULL; } in GetCacheRecord()
5302 mDNSlocal CacheGroup *GetCacheGroup(mDNS *const m, const mDNSu32 slot, const ResourceRecord *const … in GetCacheGroup() argument
5305 CacheGroup *cg = (CacheGroup*)GetCacheEntity(m, mDNSNULL); in GetCacheGroup()
5307 cg->next = m->rrcache_hash[slot]; in GetCacheGroup()
5318 ReleaseCacheEntity(m, (CacheEntity*)cg); in GetCacheGroup()
5323 …if (CacheGroupForRecord(m, rr)) LogMsg("GetCacheGroup: Already have CacheGroup for %##s", rr->name… in GetCacheGroup()
5324 m->rrcache_hash[slot] = cg; 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
5332 mDNS_CheckLock(m); in mDNS_PurgeCacheResourceRecord()
5339 rr->TimeRcvd = m->timenow - mDNSPlatformOneSecond * 60; in mDNS_PurgeCacheResourceRecord()
5342 SetNextCacheCheckTimeForRecord(m, rr); in mDNS_PurgeCacheResourceRecord()
5345 mDNSexport mDNSs32 mDNS_TimeNow(const mDNS *const m) in mDNS_TimeNow() argument
5348 mDNSPlatformLock(m); in mDNS_TimeNow()
5349 if (m->mDNS_busy) in mDNS_TimeNow()
5352 … if (!m->timenow) LogMsg("mDNS_TimeNow: m->mDNS_busy is %ld but m->timenow not set", m->mDNS_busy); in mDNS_TimeNow()
5355 if (m->timenow) time = m->timenow; in mDNS_TimeNow()
5356 else time = mDNS_TimeNow_NoLock(m); in mDNS_TimeNow()
5357 mDNSPlatformUnlock(m); in mDNS_TimeNow()
5365 …if (m->SPSProxyListChanged && m->SPSProxyListChanged != (X)) mDNSPlatformUpdateProxyList(m->SPSPro…
5366 m->SPSProxyListChanged = (X); } while(0)
5369 mDNSlocal void CheckProxyRecords(mDNS *const m, AuthRecord *list) in CheckProxyRecords() argument
5371 m->CurrentRecord = list; in CheckProxyRecords()
5372 while (m->CurrentRecord) in CheckProxyRecords()
5374 AuthRecord *rr = m->CurrentRecord; 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()
5387m->ProxyRecords, &rr->WakeUp.HMAC, &rr->WakeUp.IMAC, rr->WakeUp.seq, ARDisplayString(m, rr)); 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()
5400 mDNSlocal void CheckRmvEventsForLocalRecords(mDNS *const m) in CheckRmvEventsForLocalRecords() argument
5402 while (m->CurrentRecord) in CheckRmvEventsForLocalRecords()
5404 AuthRecord *rr = m->CurrentRecord; in CheckRmvEventsForLocalRecords()
5407 …ebugf("CheckRmvEventsForLocalRecords: Generating local RMV events for %s", ARDisplayString(m, rr)); 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()
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()
5424 mDNSlocal void TimeoutQuestions_internal(mDNS *const m, DNSQuestion* questions, mDNSInterfaceID Int… in TimeoutQuestions_internal() argument
5426 if (m->CurrentQuestion) in TimeoutQuestions_internal()
5427 …LogMsg("TimeoutQuestions ERROR m->CurrentQuestion already set: %##s (%s)", m->CurrentQuestion->qna… in TimeoutQuestions_internal()
5428 DNSTypeName(m->CurrentQuestion->qtype)); in TimeoutQuestions_internal()
5429 m->CurrentQuestion = questions; in TimeoutQuestions_internal()
5430 while (m->CurrentQuestion) in TimeoutQuestions_internal()
5432 DNSQuestion *const q = m->CurrentQuestion; in TimeoutQuestions_internal()
5438 if (m->timenow - q->StopTime >= 0) in TimeoutQuestions_internal()
5440 …LogInfo("TimeoutQuestions: question %p %##s timed out, time %d", q, q->qname.c, m->timenow - q->St… in TimeoutQuestions_internal()
5442 GenerateNegativeResponse(m, InterfaceID, QC_forceresponse); in TimeoutQuestions_internal()
5443 if (m->CurrentQuestion == q) q->StopTime = 0; in TimeoutQuestions_internal()
5447 if (m->NextScheduledStopTime - q->StopTime > 0) in TimeoutQuestions_internal()
5448 m->NextScheduledStopTime = q->StopTime; in TimeoutQuestions_internal()
5454 if (m->CurrentQuestion == q) in TimeoutQuestions_internal()
5455 m->CurrentQuestion = q->next; in TimeoutQuestions_internal()
5457 m->CurrentQuestion = mDNSNULL; in TimeoutQuestions_internal()
5460 mDNSlocal void TimeoutQuestions(mDNS *const m) in TimeoutQuestions() argument
5462m->NextScheduledStopTime = m->timenow + FutureTime; // push reschedule of TimeoutQuestions to way … in TimeoutQuestions()
5463 TimeoutQuestions_internal(m, m->Questions, mDNSInterface_Any); in TimeoutQuestions()
5464 TimeoutQuestions_internal(m, m->LocalOnlyQuestions, mDNSInterface_LocalOnly); in TimeoutQuestions()
5467 mDNSlocal void mDNSCoreFreeProxyRR(mDNS *const m) in mDNSCoreFreeProxyRR() argument
5469 AuthRecord *rrPtr = m->SPSRRSet, *rrNext = mDNSNULL; in mDNSCoreFreeProxyRR()
5477 m->SPSRRSet = mDNSNULL; in mDNSCoreFreeProxyRR()
5480 mDNSexport mDNSs32 mDNS_Execute(mDNS *const m) in mDNS_Execute() argument
5482 mDNS_Lock(m); // Must grab lock before trying to read m->timenow in mDNS_Execute()
5484 if (m->timenow - m->NextScheduledEvent >= 0) in mDNS_Execute()
5493 if (m->CurrentQuestion) in mDNS_Execute()
5495 m->CurrentQuestion->qname.c, DNSTypeName(m->CurrentQuestion->qtype)); in mDNS_Execute()
5497 if (m->CurrentRecord) in mDNS_Execute()
5498 …LogMsg("mDNS_Execute: ERROR m->CurrentRecord already set: %s", ARDisplayString(m, m->CurrentRecord… in mDNS_Execute()
5501 if (m->SuppressProbes && m->timenow - m->SuppressProbes >= 0) m->SuppressProbes = 0; in mDNS_Execute()
5504 …if (m->NumFailedProbes && m->timenow - m->ProbeFailTime >= mDNSPlatformOneSecond * 10) m->NumFaile… in mDNS_Execute()
5507 if (m->rrcache_size && m->timenow - m->NextCacheCheck >= 0) in mDNS_Execute()
5510 m->NextCacheCheck = m->timenow + FutureTime; in mDNS_Execute()
5513 if (m->timenow - m->rrcache_nextcheck[slot] >= 0) in mDNS_Execute()
5515 CacheGroup **cp = &m->rrcache_hash[slot]; in mDNS_Execute()
5516 m->rrcache_nextcheck[slot] = m->timenow + FutureTime; in mDNS_Execute()
5521 CheckCacheExpiration(m, slot, *cp); in mDNS_Execute()
5523 else ReleaseCacheGroup(m, cp); in mDNS_Execute()
5528 if (m->NextCacheCheck - m->rrcache_nextcheck[slot] > 0) in mDNS_Execute()
5529 m->NextCacheCheck = m->rrcache_nextcheck[slot]; in mDNS_Execute()
5531 … debugf("m->NextCacheCheck %4d checked, next in %d", numchecked, m->NextCacheCheck - m->timenow); in mDNS_Execute()
5534 if (m->timenow - m->NextScheduledSPS >= 0) in mDNS_Execute()
5536 m->NextScheduledSPS = m->timenow + FutureTime; in mDNS_Execute()
5537 …CheckProxyRecords(m, m->DuplicateRecords); // Clear m->DuplicateRecords first, then m->ResourceRe… in mDNS_Execute()
5538 CheckProxyRecords(m, m->ResourceRecords); in mDNS_Execute()
5545 if (m->timenow - m->NextScheduledKA >= 0) in mDNS_Execute()
5547 m->NextScheduledKA = m->timenow + FutureTime; in mDNS_Execute()
5548 mDNS_SendKeepalives(m); in mDNS_Execute()
5552 if (m->NextBonjourDisableTime && (m->timenow - m->NextBonjourDisableTime >= 0)) in mDNS_Execute()
5556 m->NetworkChanged = m->timenow; in mDNS_Execute()
5557 m->NextBonjourDisableTime = 0; in mDNS_Execute()
5558 m->BonjourEnabled = 0; in mDNS_Execute()
5565 if (m->AnnounceOwner && m->timenow - m->AnnounceOwner >= 0) in mDNS_Execute()
5567 m->AnnounceOwner = 0; in mDNS_Execute()
5570 if (m->DelaySleep && m->timenow - m->DelaySleep >= 0) in mDNS_Execute()
5572 m->DelaySleep = 0; in mDNS_Execute()
5573 if (m->SleepState == SleepState_Transferring) in mDNS_Execute()
5576 BeginSleepProcessing(m); in mDNS_Execute()
5581 for (i=0; m->NewQuestions && i<1000; i++) in mDNS_Execute()
5583 … if (m->NewQuestions->DelayAnswering && m->timenow - m->NewQuestions->DelayAnswering < 0) break; in mDNS_Execute()
5584 AnswerNewQuestion(m); in mDNS_Execute()
5590 for (i=0; i<1000 && m->LocalRemoveEvents; i++) in mDNS_Execute()
5592 m->LocalRemoveEvents = mDNSfalse; in mDNS_Execute()
5593 m->CurrentRecord = m->ResourceRecords; in mDNS_Execute()
5594 CheckRmvEventsForLocalRecords(m); in mDNS_Execute()
5597 for (ag = m->rrauth.rrauth_hash[slot]; ag; ag = ag->next) in mDNS_Execute()
5599 m->CurrentRecord = ag->members; in mDNS_Execute()
5600 if (m->CurrentRecord) CheckRmvEventsForLocalRecords(m); in mDNS_Execute()
5606 for (i=0; m->NewLocalOnlyQuestions && i<1000; i++) AnswerNewLocalOnlyQuestion(m); in mDNS_Execute()
5610 for (i=0; i<1000 && m->NewLocalRecords && m->NewLocalRecords != head; i++) in mDNS_Execute()
5612 AuthRecord *rr = m->NewLocalRecords; in mDNS_Execute()
5613 m->NewLocalRecords = m->NewLocalRecords->next; 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()
5624 …DNS_Execute: Just one LocalAuthRecord %s, breaking out of the loop early", ARDisplayString(m, rr)); in mDNS_Execute()
5625 if (head != mDNSNULL || m->NewLocalRecords != mDNSNULL) in mDNS_Execute()
5626 … LogMsg("mDNS_Execute: ERROR!!: head %p, NewLocalRecords %p", head, m->NewLocalRecords); in mDNS_Execute()
5632 … AuthRecord **p = &m->ResourceRecords; // Find this record in our list of active records in mDNS_Execute()
5633 debugf("mDNS_Execute: Skipping LocalAuthRecord %s", ARDisplayString(m, rr)); in mDNS_Execute()
5638 …_Execute: ERROR!! Cannot find record %s in ResourceRecords list", ARDisplayString(m, rr)); break; } in mDNS_Execute()
5653 m->NewLocalRecords = head; in mDNS_Execute()
5654 … debugf("mDNS_Execute: Setting NewLocalRecords to %s", (head ? ARDisplayString(m, head) : "NULL")); in mDNS_Execute()
5660 if (m->NewLocalOnlyRecords) in mDNS_Execute()
5662 m->NewLocalOnlyRecords = mDNSfalse; in mDNS_Execute()
5665 for (ag = m->rrauth.rrauth_hash[slot]; ag; ag = ag->next) 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()
5686 if (m->mDNSPlatformStatus != mStatus_NoError || (m->SleepState == SleepState_Sleeping)) in mDNS_Execute()
5687 DiscardDeregistrations(m); in mDNS_Execute()
5688 …if (m->mDNSPlatformStatus == mStatus_NoError && (m->SuppressSending == 0 || m->timenow - m->Suppre… in mDNS_Execute()
5696 m->SuppressSending = 0; in mDNS_Execute()
5699 …if (m->timenow - m->NextScheduledQuery >= 0 || m->timenow - m->NextScheduledProbe >= 0) SendQuerie… in mDNS_Execute()
5700 if (m->timenow - m->NextScheduledQuery >= 0) in mDNS_Execute()
5704 m->timenow, m->NextScheduledQuery, m->timenow - m->NextScheduledQuery); in mDNS_Execute()
5705 m->NextScheduledQuery = m->timenow + mDNSPlatformOneSecond; in mDNS_Execute()
5706 for (q = m->Questions; q && q != m->NewQuestions; q=q->next) in mDNS_Execute()
5707 if (ActiveQuestion(q) && m->timenow - NextQSendTime(q) >= 0) in mDNS_Execute()
5710 if (m->timenow - m->NextScheduledProbe >= 0) in mDNS_Execute()
5713 m->timenow, m->NextScheduledProbe, m->timenow - m->NextScheduledProbe); in mDNS_Execute()
5714 m->NextScheduledProbe = m->timenow + mDNSPlatformOneSecond; in mDNS_Execute()
5718 if (m->timenow - m->NextScheduledResponse >= 0) SendResponses(m); in mDNS_Execute()
5719 if (m->timenow - m->NextScheduledResponse >= 0) in mDNS_Execute()
5722 m->NextScheduledResponse = m->timenow + mDNSPlatformOneSecond; in mDNS_Execute()
5727 m->RandomQueryDelay = 0; in mDNS_Execute()
5728 m->RandomReconfirmDelay = 0; in mDNS_Execute()
5731 … if (m->NextScheduledStopTime && m->timenow - m->NextScheduledStopTime >= 0) TimeoutQuestions(m); in mDNS_Execute()
5733 if (m->NextSRVUpdate && m->timenow - m->NextSRVUpdate >= 0) UpdateAllSRVRecords(m); in mDNS_Execute()
5734 if (m->timenow - m->NextScheduledNATOp >= 0) CheckNATMappings(m); in mDNS_Execute()
5735 if (m->timenow - m->NextuDNSEvent >= 0) uDNS_Tasks(m); in mDNS_Execute()
5739 if (m->NextBLEServiceTime && (m->timenow - m->NextBLEServiceTime >= 0)) serviceBLE(); in mDNS_Execute()
5763 mDNS_Unlock(m); // Calling mDNS_Unlock is what gives m->NextScheduledEvent its new value in mDNS_Execute()
5764 return(m->NextScheduledEvent); in mDNS_Execute()
5768 mDNSlocal void SuspendLLQs(mDNS *m) in SuspendLLQs() argument
5771 for (q = m->Questions; q; q = q->next) in SuspendLLQs()
5773 { q->ReqLease = 0; sendLLQRefresh(m, q); } in SuspendLLQs()
5777 mDNSlocal mDNSBool QuestionHasLocalAnswers(mDNS *const m, DNSQuestion *q) in QuestionHasLocalAnswers() argument
5782 ag = AuthGroupForName(&m->rrauth, q->qnamehash, &q->qname); in QuestionHasLocalAnswers()
5789 …n %p %##s (%s) has local answer %s", q, q->qname.c, DNSTypeName(q->qtype), ARDisplayString(m, rr)); in QuestionHasLocalAnswers()
5802 mDNSlocal void ActivateUnicastQuery(mDNS *const m, DNSQuestion *const question, mDNSBool ScheduleIm… in ActivateUnicastQuery() argument
5809 if (question->nta) { CancelGetZoneData(m, question->nta); question->nta = mDNSNULL; } in ActivateUnicastQuery()
5818 if (ScheduleImmediately && !QuestionHasLocalAnswers(m, question)) in ActivateUnicastQuery()
5821 question->LastQTime = m->timenow - question->ThisQInterval; in ActivateUnicastQuery()
5822 SetNextQueryTime(m, question); in ActivateUnicastQuery()
5828 mDNSexport void mDNSCoreRestartAddressQueries(mDNS *const m, mDNSBool SearchDomainsChanged, FlushCa… in mDNSCoreRestartAddressQueries() argument
5834 mDNS_CheckLock(m); in mDNSCoreRestartAddressQueries()
5837 if (flushCacheRecords) flushCacheRecords(m); in mDNSCoreRestartAddressQueries()
5849 if (m->RestartQuestion) in mDNSCoreRestartAddressQueries()
5851 m->RestartQuestion->qname.c, DNSTypeName(m->RestartQuestion->qtype)); in mDNSCoreRestartAddressQueries()
5853 m->RestartQuestion = m->Questions; in mDNSCoreRestartAddressQueries()
5854 while (m->RestartQuestion) in mDNSCoreRestartAddressQueries()
5856 q = m->RestartQuestion; in mDNSCoreRestartAddressQueries()
5857 m->RestartQuestion = q->next; in mDNSCoreRestartAddressQueries()
5898 …if (!CacheRecordRmvEventsForQuestion(m, q)) { LogInfo("mDNSCoreRestartAddressQueries: Question del… in mDNSCoreRestartAddressQueries()
5901 …if (!LocalRecordRmvEventsForQuestion(m, q)) { LogInfo("mDNSCoreRestartAddressQueries: Question del… in mDNSCoreRestartAddressQueries()
5905 mDNS_StopQuery_internal(m, q); in mDNSCoreRestartAddressQueries()
5913 if (BeforeStartCallback) BeforeStartCallback(m, context); in mDNSCoreRestartAddressQueries()
5922 mDNS_StartQuery_internal(m, q); in mDNSCoreRestartAddressQueries()
5926 mDNSexport void mDNSCoreRestartQueries(mDNS *const m) in mDNSCoreRestartQueries() argument
5932 if (m->CurrentQuestion) in mDNSCoreRestartQueries()
5934 m->CurrentQuestion->qname.c, DNSTypeName(m->CurrentQuestion->qtype)); in mDNSCoreRestartQueries()
5935 m->CurrentQuestion = m->Questions; in mDNSCoreRestartQueries()
5936 while (m->CurrentQuestion) in mDNSCoreRestartQueries()
5938 q = m->CurrentQuestion; in mDNSCoreRestartQueries()
5939 m->CurrentQuestion = m->CurrentQuestion->next; in mDNSCoreRestartQueries()
5945 ActivateUnicastQuery(m, q, mDNStrue); in mDNSCoreRestartQueries()
5951 for (q = m->Questions; q; q=q->next) // Scan our list of questions in mDNSCoreRestartQueries()
5952 mDNSCoreRestartQuestion(m, q); in mDNSCoreRestartQueries()
5956 mDNSexport void mDNSCoreRestartQuestion(mDNS *const m, DNSQuestion *q) in mDNSCoreRestartQuestion() argument
5962 q->LastQTime = m->timenow - q->ThisQInterval; in mDNSCoreRestartQuestion()
5964 ExpireDupSuppressInfo(q->DupSuppress, m->timenow); in mDNSCoreRestartQuestion()
5965 m->NextScheduledQuery = m->timenow; in mDNSCoreRestartQuestion()
5970 mDNSexport void mDNSCoreRestartRegistration(mDNS *const m, AuthRecord *rr, int announceCount) in mDNSCoreRestartRegistration() argument
5991 InitializeLastAPTime(m, rr); in mDNSCoreRestartRegistration()
6001 mDNSexport void mDNS_UpdateAllowSleep(mDNS *const m) in mDNS_UpdateAllowSleep() argument
6009 if (m->SystemSleepOnlyIfWakeOnLAN) in mDNS_UpdateAllowSleep()
6012 if (m->ProxyRecords) in mDNS_UpdateAllowSleep()
6015 mDNS_snprintf(reason, sizeof(reason), "sleep proxy for %d records", m->ProxyRecords); in mDNS_UpdateAllowSleep()
6016 …LogInfo("mDNS_UpdateAllowSleep: Sleep disabled because we are proxying %d records", m->ProxyRecord… in mDNS_UpdateAllowSleep()
6019 if (allowSleep && mDNSCoreHaveAdvertisedMulticastServices(m)) in mDNS_UpdateAllowSleep()
6023 …for (intf = GetFirstActiveInterface(m->HostInterfaces); intf; intf = GetFirstActiveInterface(intf-… in mDNS_UpdateAllowSleep()
6044 … const CacheRecord *cr = FindSPSInCache1(m, &intf->NetWakeBrowse, mDNSNULL, mDNSNULL); in mDNS_UpdateAllowSleep()
6052 else if (m->SPSType != 0) in mDNS_UpdateAllowSleep()
6054 mDNSu32 mymetric = LocalSPSMetric(m); in mDNS_UpdateAllowSleep()
6073 (void) m; in mDNS_UpdateAllowSleep()
6077 mDNSlocal mDNSBool mDNSUpdateOkToSend(mDNS *const m, AuthRecord *rr, NetworkInterfaceInfo *const in… in mDNSUpdateOkToSend() argument
6083 m->timenow - (rr->LastAPTime + rr->ThisAPInterval) < 0) in mDNSUpdateOkToSend()
6103 mDNSexport void UpdateRMAC(mDNS *const m, void *context) in UpdateRMAC() argument
6106 m->CurrentRecord = m->ResourceRecords; in UpdateRMAC()
6114 while (m->CurrentRecord) in UpdateRMAC()
6116 AuthRecord *rr = m->CurrentRecord; 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
6164 …eRData: not a valid record %s for keepalive %#a:%d %#a:%d", ARDisplayString(m, rr), &laddr, lport.… in UpdateKeepaliveRData()
6203 LogMsg("UpdateKeepaliveRData: could not allocate memory %s", ARDisplayString(m, rr)); in UpdateKeepaliveRData()
6225 …"UpdateKeepaliveRData: Freed allocated memory for keep alive packet: %s ", ARDisplayString(m, rr)); in UpdateKeepaliveRData()
6230 LogSPS("UpdateKeepaliveRData: successfully updated the record %s", ARDisplayString(m, rr)); in UpdateKeepaliveRData()
6234 mDNSlocal void SendSPSRegistrationForOwner(mDNS *const m, NetworkInterfaceInfo *const intf, const m… in SendSPSRegistrationForOwner() argument
6236 …const int optspace = DNSOpt_Header_Space + DNSOpt_LeaseData_Space + DNSOpt_Owner_Space(&m->Primary… in SendSPSRegistrationForOwner()
6242 scopeid = mDNSPlatformInterfaceIndexfromInterfaceID(m, intf->InterfaceID, mDNStrue); in SendSPSRegistrationForOwner()
6245 intf->NextSPSAttemptTime = m->timenow + mDNSPlatformOneSecond; in SendSPSRegistrationForOwner()
6246 if (m->NextScheduledSPRetry - intf->NextSPSAttemptTime > 0) in SendSPSRegistrationForOwner()
6247 m->NextScheduledSPRetry = intf->NextSPSAttemptTime; in SendSPSRegistrationForOwner()
6263 msgid = mDNS_NewMessageID(m); in SendSPSRegistrationForOwner()
6264 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendSPSRegistrationForOwner()
6290 mDNSu8 *p = m->omsg.data; in SendSPSRegistrationForOwner()
6295 InitializeDNSMessage(&m->omsg.h, msgid, UpdateReqFlags); in SendSPSRegistrationForOwner()
6297 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendSPSRegistrationForOwner()
6298 if (rr->SendRNow || mDNSUpdateOkToSend(m, rr, intf, scopeid)) in SendSPSRegistrationForOwner()
6303 …const mDNSu8 *const limit = m->omsg.data + (m->omsg.h.mDNS_numUpdates ? NormalMaxDNSMessageData : … in SendSPSRegistrationForOwner()
6306 …if (mDNS_KeepaliveRecord(&rr->resrec) && (UpdateKeepaliveRData(m, rr, intf, mDNSfalse, mDNSNULL) !… in SendSPSRegistrationForOwner()
6318 …newptr = PutResourceRecordTTLWithLimit(&m->omsg, p, &m->omsg.h.mDNS_numUpdates, &rr->resrec, rr->r… in SendSPSRegistrationForOwner()
6321 …ration put %s FAILED %d/%d %s", intf->ifname, p - m->omsg.data, limit - m->omsg.data, ARDisplayStr… in SendSPSRegistrationForOwner()
6324 …name, rr->updateIntID.l[1], rr->updateIntID.l[0], mDNSVal16(m->omsg.h.id), ARDisplayString(m, rr)); in SendSPSRegistrationForOwner()
6327 rr->LastAPTime = m->timenow; in SendSPSRegistrationForOwner()
6329 …->updateid)) LogMsg("SendSPSRegistration: ERROR!! rr %s updateid is zero", ARDisplayString(m, rr)); in SendSPSRegistrationForOwner()
6330 if (m->NextScheduledResponse - (rr->LastAPTime + rr->ThisAPInterval) >= 0) in SendSPSRegistrationForOwner()
6331 m->NextScheduledResponse = (rr->LastAPTime + rr->ThisAPInterval); in SendSPSRegistrationForOwner()
6337 if (!m->omsg.h.mDNS_numUpdates) break; in SendSPSRegistrationForOwner()
6349 … SetupOwnerOpt(m, intf, &opt.resrec.rdata->u.opt[1]); // use our own interface information in SendSPSRegistrationForOwner()
6356 LogSPS("SendSPSRegistration put %s %s", intf->ifname, ARDisplayString(m, &opt)); in SendSPSRegistrationForOwner()
6357 …p = PutResourceRecordTTLWithLimit(&m->omsg, p, &m->omsg.h.numAdditionals, &opt.resrec, opt.resrec.… in SendSPSRegistrationForOwner()
6359 …istration: Failed to put OPT record (%d updates) %s", m->omsg.h.mDNS_numUpdates, ARDisplayString(m in SendSPSRegistrationForOwner()
6365 …mDNSVal16(m->omsg.h.id), m->omsg.h.mDNS_numUpdates, p - m->omsg.data, &intf->SPSAddr[sps], mDNSVal… in SendSPSRegistrationForOwner()
6367 …err = mDNSSendDNSMessage(m, &m->omsg, p, intf->InterfaceID, mDNSNULL, mDNSNULL, &intf->SPSAddr[sps… in SendSPSRegistrationForOwner()
6373 mDNS_StartQuery_internal(m, &intf->NetWakeResolve[sps]); in SendSPSRegistrationForOwner()
6380 …intf->NextSPSAttemptTime = m->timenow + mDNSPlatformOneSecond * 10; // If successful, update N… 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()
6394 mDNSlocal void mDNSCoreStoreProxyRR(mDNS *const m, const mDNSInterfaceID InterfaceID, AuthRecord *c… in mDNSCoreStoreProxyRR() argument
6423 newRR->next = m->SPSRRSet; in mDNSCoreStoreProxyRR()
6424 m->SPSRRSet = newRR; in mDNSCoreStoreProxyRR()
6425 LogSPS("%s : Storing proxy record : %s ", __func__, ARDisplayString(m, rr)); in mDNSCoreStoreProxyRR()
6433 mDNSlocal void SPSInitRecordsBeforeUpdate(mDNS *const m, mDNSOpaque64 updateIntID, mDNSBool *WakeOn… in SPSInitRecordsBeforeUpdate() argument
6442 mDNSCoreFreeProxyRR(m); in SPSInitRecordsBeforeUpdate()
6446 for (ar = m->ResourceRecords; ar; ar=ar->next) in SPSInitRecordsBeforeUpdate()
6465 …tting scopeid (ALL) 0x%x 0x%x for %s", updateIntID.l[1], updateIntID.l[0], ARDisplayString(m, ar)); in SPSInitRecordsBeforeUpdate()
6472 … mDNSu32 scopeid = mDNSPlatformInterfaceIndexfromInterfaceID(m, ar->resrec.InterfaceID, mDNStrue); in SPSInitRecordsBeforeUpdate()
6477 ar->updateIntID.l[0], ARDisplayString(m, ar)); in SPSInitRecordsBeforeUpdate()
6488 mDNSCoreStoreProxyRR(m, ar->resrec.InterfaceID, ar); in SPSInitRecordsBeforeUpdate()
6493 mDNSlocal void SendSPSRegistration(mDNS *const m, NetworkInterfaceInfo *const intf, const mDNSOpaqu… in SendSPSRegistration() argument
6498 SendSPSRegistrationForOwner(m, intf, id, &owner); in SendSPSRegistration()
6500 for (ar = m->ResourceRecords; ar; ar=ar->next) in SendSPSRegistration()
6502 …(!mDNSPlatformMemSame(&owner, &ar->WakeUp, sizeof(owner)) && RecordIsFirstOccurrenceOfOwner(m, ar)) in SendSPSRegistration()
6505 SendSPSRegistrationForOwner(m, intf, id, &owner); in SendSPSRegistration()
6511 mDNSlocal void RetrySPSRegistrations(mDNS *const m) in RetrySPSRegistrations() argument
6517 …for (intf = GetFirstActiveInterface(m->HostInterfaces); intf; intf = GetFirstActiveInterface(intf-… in RetrySPSRegistrations()
6518 … if (intf->NextSPSAttempt && intf->NextSPSAttemptTime == m->timenow + mDNSPlatformOneSecond * 10) in RetrySPSRegistrations()
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()
6525 …for (intf = GetFirstActiveInterface(m->HostInterfaces); intf; intf = GetFirstActiveInterface(intf-… in RetrySPSRegistrations()
6528 … mDNSu32 scopeid = mDNSPlatformInterfaceIndexfromInterfaceID(m, intf->InterfaceID, mDNStrue); in RetrySPSRegistrations()
6532 … %s", rr->updateIntID.l[1], rr->updateIntID.l[0], mDNSVal16(rr->updateid), ARDisplayString(m, rr)); in RetrySPSRegistrations()
6533 SendSPSRegistration(m, intf, rr->updateid); in RetrySPSRegistrations()
6539 …for (intf = GetFirstActiveInterface(m->HostInterfaces); intf; intf = GetFirstActiveInterface(intf-… in RetrySPSRegistrations()
6540 …if (intf->NextSPSAttempt && intf->NextSPSAttemptTime == m->timenow + mDNSPlatformOneSecond * 10 &&… in RetrySPSRegistrations()
6544 mDNSlocal void NetWakeResolve(mDNS *const m, DNSQuestion *question, const ResourceRecord *const ans… in NetWakeResolve() argument
6548 (void)m; // Unused in NetWakeResolve()
6549 LogSPS("NetWakeResolve: SPS: %d Add: %d %s", sps, AddRecord, RRDisplayString(m, answer)); in NetWakeResolve()
6559 mDNS_StopQuery(m, question); in NetWakeResolve()
6563 mDNS_StartQuery(m, question); in NetWakeResolve()
6568 mDNS_StopQuery(m, question); in NetWakeResolve()
6572 mDNS_Lock(m); in NetWakeResolve()
6573 …if (sps == intf->NextSPSAttempt/3) SendSPSRegistration(m, intf, zeroID); // If we're ready for … in NetWakeResolve()
6574 mDNS_Unlock(m); in NetWakeResolve()
6579 mDNS_StopQuery(m, question); in NetWakeResolve()
6582 mDNS_StartQuery(m, question); in NetWakeResolve()
6587 mDNS_StopQuery(m, question); in NetWakeResolve()
6591 mDNS_Lock(m); in NetWakeResolve()
6592 …if (sps == intf->NextSPSAttempt/3) SendSPSRegistration(m, intf, zeroID); // If we're ready for … in NetWakeResolve()
6593 mDNS_Unlock(m); in NetWakeResolve()
6597 mDNSexport mDNSBool mDNSCoreHaveAdvertisedMulticastServices(mDNS *const m) in mDNSCoreHaveAdvertisedMulticastServices() argument
6600 for (rr = m->ResourceRecords; rr; rr=rr->next) in mDNSCoreHaveAdvertisedMulticastServices()
6610 mDNSlocal void SendGoodbyesForSelectServices(mDNS *const m, mDNSBool *servicePresent, mDNSu32 servi… in SendGoodbyesForSelectServices() argument
6616 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendGoodbyesForSelectServices()
6636 mDNSlocal void SendGoodbyesForWakeOnlyService(mDNS *const m, mDNSBool *WakeOnlyService) in SendGoodbyesForWakeOnlyService() argument
6638 return SendGoodbyesForSelectServices(m, WakeOnlyService, WAKE_ONLY_SERVICE); in SendGoodbyesForWakeOnlyService()
6643 mDNSlocal void SendSleepGoodbyes(mDNS *const m, mDNSBool AllInterfaces, mDNSBool unicast) in SendSleepGoodbyes() argument
6646 m->SleepState = SleepState_Sleeping; in SendSleepGoodbyes()
6653 …for (intf = GetFirstActiveInterface(m->HostInterfaces); intf; intf = GetFirstActiveInterface(intf-… in SendSleepGoodbyes()
6661 SleepRecordRegistrations(m); // If we have no SPS, need to deregister our uDNS records in SendSleepGoodbyes()
6666 for (rr = m->ResourceRecords; rr; rr=rr->next) in SendSleepGoodbyes()
6669 SendResponses(m); in SendSleepGoodbyes()
6682 mDNSlocal mDNSBool skipSameSubnetRegistration(mDNS *const m, mDNSInterfaceID *regID, mDNSu32 count,… in skipSameSubnetRegistration() argument
6688 for (newIntf = FirstInterfaceForID(m, intfid); newIntf; newIntf = newIntf->next) in skipSameSubnetRegistration()
6697 for (intf = FirstInterfaceForID(m, regID[i]); intf; intf = intf->next) in skipSameSubnetRegistration()
6715 mDNSlocal void DoKeepaliveCallbacks(mDNS *m) in DoKeepaliveCallbacks() argument
6718 m->CurrentRecord = m->ResourceRecords; in DoKeepaliveCallbacks()
6719 while (m->CurrentRecord) in DoKeepaliveCallbacks()
6721 AuthRecord *const rr = m->CurrentRecord; in DoKeepaliveCallbacks()
6724 LogSPS("DoKeepaliveCallbacks: Invoking the callback for %s", ARDisplayString(m, rr)); 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()
6734 mDNSlocal void BeginSleepProcessing(mDNS *const m) in BeginSleepProcessing() argument
6745 m->NextScheduledSPRetry = m->timenow; in BeginSleepProcessing()
6750 …if (!m->SystemWakeOnLANEnabled) LogSPS("BeginSleepProcessing: m->SystemWakeOnLANEnabled is fa… in BeginSleepProcessing()
6751 …else if (!mDNSCoreHaveAdvertisedMulticastServices(m)) LogSPS("BeginSleepProcessing: No advertised … in BeginSleepProcessing()
6755 …for (intf = GetFirstActiveInterface(m->HostInterfaces); intf; intf = GetFirstActiveInterface(intf-… in BeginSleepProcessing()
6787 … if (skipSameSubnetRegistration(m, registeredIntfIDS, registeredCount, intf->InterfaceID)) in BeginSleepProcessing()
6800 SendGoodbyesForWakeOnlyService(m, &WakeOnlyService); in BeginSleepProcessing()
6820 if (m->SystemWakeOnLANEnabled == mDNS_WakeOnBattery) in BeginSleepProcessing()
6826 FindSPSInCache(m, &intf->NetWakeBrowse, sps); in BeginSleepProcessing()
6828 …intf->ifname, &intf->ip, NextQSendTime(&intf->NetWakeBrowse) - m->timenow, intf->NetWakeBrowse.Thi… in BeginSleepProcessing()
6835 intf->NextSPSAttemptTime = m->timenow + mDNSPlatformOneSecond; in BeginSleepProcessing()
6837 … scopeid = mDNSPlatformInterfaceIndexfromInterfaceID(m, intf->InterfaceID, mDNStrue); in BeginSleepProcessing()
6852 … if (intf->NetWakeResolve[i].ThisQInterval >= 0) mDNS_StopQuery(m, &intf->NetWakeResolve[i]); in BeginSleepProcessing()
6856 …y Server %d TTL %d %s", intf->ifname, i, sps[i]->resrec.rroriginalttl, CRDisplayString(m, sps[i])); in BeginSleepProcessing()
6859 mDNS_StartQuery_internal(m, &intf->NetWakeResolve[i]); in BeginSleepProcessing()
6874 SPSInitRecordsBeforeUpdate(m, updateIntID, &WakeOnlyService); in BeginSleepProcessing()
6881 DoKeepaliveCallbacks(m); in BeginSleepProcessing()
6902 SendSleepGoodbyes(m, mDNStrue, mDNStrue); in BeginSleepProcessing()
6907 SendSleepGoodbyes(m, mDNSfalse, mDNSfalse); in BeginSleepProcessing()
6913 SendResponses(m); in BeginSleepProcessing()
6920 mDNSexport void mDNSCoreMachineSleep(mDNS *const m, mDNSBool sleep) in mDNSCoreMachineSleep() argument
6925 PUB_S " (old state %d) at %d", sleep ? "Sleeping" : "Waking", m->SleepState, m->timenow); in mDNSCoreMachineSleep()
6927 if (sleep && !m->SleepState) // Going to sleep in mDNSCoreMachineSleep()
6929 mDNS_Lock(m); in mDNSCoreMachineSleep()
6931 if (m->SPSSocket) in mDNSCoreMachineSleep()
6933 mDNSu8 oldstate = m->SPSState; in mDNSCoreMachineSleep()
6935 m->SPSState = 2; in mDNSCoreMachineSleep()
6937 if (oldstate == 1) mDNS_DeregisterService(m, &m->SPSRecords); in mDNSCoreMachineSleep()
6944 if (m->SSDPSocket) in mDNSCoreMachineSleep()
6946 mDNSPlatformUDPClose(m->SSDPSocket); in mDNSCoreMachineSleep()
6947 m->SSDPSocket = mDNSNULL; in mDNSCoreMachineSleep()
6950 m->SleepState = SleepState_Transferring; in mDNSCoreMachineSleep()
6951 if (m->SystemWakeOnLANEnabled && m->DelaySleep) in mDNSCoreMachineSleep()
6955 …Sleep: Re-sleeping immediately after waking; will delay for %d ticks", m->DelaySleep - m->timenow); in mDNSCoreMachineSleep()
6956 m->SleepLimit = NonZeroTime(m->DelaySleep + mDNSPlatformOneSecond * 10); in mDNSCoreMachineSleep()
6960 m->DelaySleep = 0; in mDNSCoreMachineSleep()
6961 m->SleepLimit = NonZeroTime(m->timenow + mDNSPlatformOneSecond * 10); in mDNSCoreMachineSleep()
6962 m->mDNSStats.Sleeps++; in mDNSCoreMachineSleep()
6966 BeginSleepProcessing(m); in mDNSCoreMachineSleep()
6970 SuspendLLQs(m); in mDNSCoreMachineSleep()
6973 m->SleepState, in mDNSCoreMachineSleep()
6974 m->SleepState == SleepState_Transferring ? "Transferring" : in mDNSCoreMachineSleep()
6975 m->SleepState == SleepState_Sleeping ? "Sleeping" : "?", m->SleepSeqNum); in mDNSCoreMachineSleep()
6976 mDNS_Unlock(m); in mDNSCoreMachineSleep()
6986 mDNS_Lock(m); in mDNSCoreMachineSleep()
6988 m->SleepLimit = 0; in mDNSCoreMachineSleep()
6991 if (m->SleepState != SleepState_Awake) in mDNSCoreMachineSleep()
6993 m->SleepState = SleepState_Awake; in mDNSCoreMachineSleep()
6994 m->SleepSeqNum++; in mDNSCoreMachineSleep()
6999 m->DelaySleep = NonZeroTime(m->timenow + kDarkWakeDelaySleep); in mDNSCoreMachineSleep()
7002 if (m->SPSState == 3) in mDNSCoreMachineSleep()
7004 m->SPSState = 0; in mDNSCoreMachineSleep()
7005 …mDNSCoreBeSleepProxyServer_internal(m, m->SPSType, m->SPSPortability, m->SPSMarginalPower, m->SPST… in mDNSCoreMachineSleep()
7007 m->mDNSStats.Wakes++; in mDNSCoreMachineSleep()
7009 …for (intf = GetFirstActiveInterface(m->HostInterfaces); intf; intf = GetFirstActiveInterface(intf-… in mDNSCoreMachineSleep()
7015 mDNSCoreRestartQueries(m); in mDNSCoreMachineSleep()
7018 m->NextSRVUpdate = NonZeroTime(m->timenow + mDNSPlatformOneSecond); in mDNSCoreMachineSleep()
7020 … "mDNSCoreMachineSleep waking: NextSRVUpdate in %d %d", m->NextSRVUpdate - m->timenow, m->timenow); in mDNSCoreMachineSleep()
7025 diff = currtime - m->TimeSlept; in mDNSCoreMachineSleep()
7045 … const mDNSs32 remain = uTTL - (m->timenow - cr->TimeRcvd) / mDNSPlatformOneSecond; in mDNSCoreMachineSleep()
7058 CRDisplayString(m, cr), diff, remain); in mDNSCoreMachineSleep()
7059 mDNS_PurgeCacheResourceRecord(m, cr); in mDNSCoreMachineSleep()
7063 if (m->timenow - (cr->TimeRcvd + ((mDNSs32)uTTL * mDNSPlatformOneSecond)) >= 0) in mDNSCoreMachineSleep()
7067 CRDisplayString(m, cr), remain, diff); in mDNSCoreMachineSleep()
7068 mDNS_PurgeCacheResourceRecord(m, cr); in mDNSCoreMachineSleep()
7074 CRDisplayString(m, cr), remain, diff); in mDNSCoreMachineSleep()
7080 mDNS_Reconfirm_internal(m, cr, kDefaultReconfirmTimeForWake); in mDNSCoreMachineSleep()
7085 for (rr = m->ResourceRecords; rr; rr=rr->next) in mDNSCoreMachineSleep()
7089 ActivateUnicastRegistration(m, rr); in mDNSCoreMachineSleep()
7093 mDNSCoreRestartRegistration(m, rr, -1); in mDNSCoreMachineSleep()
7105 RecreateNATMappings(m, mDNSPlatformOneSecond * 5); in mDNSCoreMachineSleep()
7106 mDNS_Unlock(m); in mDNSCoreMachineSleep()
7110 mDNSexport mDNSBool mDNSCoreReadyForSleep(mDNS *m, mDNSs32 now) in mDNSCoreReadyForSleep() argument
7116 mDNS_Lock(m); in mDNSCoreReadyForSleep()
7118 if (m->DelaySleep) goto notready; in mDNSCoreReadyForSleep()
7121 if (m->SleepLimit - now > 0 && m->NextScheduledSPRetry - now > 0) goto notready; in mDNSCoreReadyForSleep()
7123 m->NextScheduledSPRetry = now + 0x40000000UL; in mDNSCoreReadyForSleep()
7126 …for (intf = GetFirstActiveInterface(m->HostInterfaces); intf; intf = GetFirstActiveInterface(intf-… in mDNSCoreReadyForSleep()
7133 SendSPSRegistration(m, intf, zeroID); in mDNSCoreReadyForSleep()
7138 if (m->NextScheduledSPRetry - intf->NextSPSAttemptTime > 0) in mDNSCoreReadyForSleep()
7139 m->NextScheduledSPRetry = intf->NextSPSAttemptTime; in mDNSCoreReadyForSleep()
7143 …for (intf = GetFirstActiveInterface(m->HostInterfaces); intf; intf = GetFirstActiveInterface(intf-… in mDNSCoreReadyForSleep()
7155 for (rr = m->ResourceRecords; rr; rr = rr->next) in mDNSCoreReadyForSleep()
7158 …eIntID.l[1], rr->updateIntID.l[0], mDNSVal16(rr->updateid), ARDisplayString(m,rr)); goto spsnotrea… in mDNSCoreReadyForSleep()
7161 for (q = m->Questions; q; q = q->next) in mDNSCoreReadyForSleep()
7169 for (rr = m->ResourceRecords; rr; rr = rr->next) in mDNSCoreReadyForSleep()
7173 …eIntID.l[1], rr->updateIntID.l[0], mDNSVal16(rr->updateid), ARDisplayString(m,rr)); goto notready;… in mDNSCoreReadyForSleep()
7176 mDNS_Unlock(m); in mDNSCoreReadyForSleep()
7183 if (now - m->SleepLimit >= 0) in mDNSCoreReadyForSleep()
7187 …for (intf = GetFirstActiveInterface(m->HostInterfaces); intf; intf = GetFirstActiveInterface(intf-… in mDNSCoreReadyForSleep()
7192 mDNS_DeactivateNetWake_internal(m, intf); in mDNSCoreReadyForSleep()
7195 for (rr = m->ResourceRecords; rr; rr = rr->next) in mDNSCoreReadyForSleep()
7199 … %s", rr->updateIntID.l[1], rr->updateIntID.l[0], mDNSVal16(rr->updateid), ARDisplayString(m, rr)); in mDNSCoreReadyForSleep()
7209 m->SleepLimit = now + mDNSPlatformOneSecond * 1; in mDNSCoreReadyForSleep()
7211 SendSleepGoodbyes(m, mDNStrue, mDNStrue); in mDNSCoreReadyForSleep()
7215 mDNS_Unlock(m); in mDNSCoreReadyForSleep()
7219 mDNSexport mDNSs32 mDNSCoreIntervalToNextWake(mDNS *const m, mDNSs32 now, mDNSNextWakeReason *outRe… in mDNSCoreIntervalToNextWake() argument
7231 for (nat = m->NATTraversals; nat; nat=nat->next) in mDNSCoreIntervalToNextWake()
7252 for (ar = m->ResourceRecords; ar; ar = ar->next) in mDNSCoreIntervalToNextWake()
7266 (t - now) / mDNSPlatformOneSecond, ARDisplayString(m, ar)); in mDNSCoreIntervalToNextWake()
7402 mDNSlocal mDNSBool MatchDependentOn(const mDNS *const m, const CacheRecord *const pktrr, const Auth… in MatchDependentOn() argument
7405 for (r1 = m->ResourceRecords; r1; r1=r1->next) in MatchDependentOn()
7409 for (r1 = m->DuplicateRecords; r1; r1=r1->next) in MatchDependentOn()
7420 mDNSlocal const AuthRecord *FindRRSet(const mDNS *const m, const CacheRecord *const pktrr) in FindRRSet() argument
7423 for (rr = m->ResourceRecords; rr; rr=rr->next) in FindRRSet()
7442 mDNSlocal mDNSBool PacketRRConflict(const mDNS *const m, const AuthRecord *const our, const CacheRe… in PacketRRConflict() argument
7448 if (our->DependentOn || MatchDependentOn(m, pktrr, our)) return(mDNSfalse); in PacketRRConflict()
7453 const AuthRecord *pktset = FindRRSet(m, pktrr); in PacketRRConflict()
7469 mDNSlocal void ResolveSimultaneousProbe(mDNS *const m, const DNSMessage *const query, const mDNSu8 … in ResolveSimultaneousProbe() argument
7478 …ptr = GetLargeResourceRecord(m, query, ptr, end, q->InterfaceID, kDNSRecordTypePacketAuth, &m->rec… in ResolveSimultaneousProbe()
7480 …if (m->rec.r.resrec.RecordType != kDNSRecordTypePacketNegative && CacheRecordAnswersQuestion(&m->r… in ResolveSimultaneousProbe()
7483 if (PacketRRConflict(m, our, &m->rec.r)) in ResolveSimultaneousProbe()
7485 int result = (int)our->resrec.rrclass - (int)m->rec.r.resrec.rrclass; in ResolveSimultaneousProbe()
7486 if (!result) result = (int)our->resrec.rrtype - (int)m->rec.r.resrec.rrtype; in ResolveSimultaneousProbe()
7487 if (!result) result = CompareRData(our, &m->rec.r); in ResolveSimultaneousProbe()
7491 …e: %p Pkt Record: %08lX %s", q->InterfaceID, m->rec.r.resrec.rdatahash, CRDisplayString(m, … in ResolveSimultaneousProbe()
7492 …s", our->resrec.InterfaceID, our->ProbeCount, msg, our->resrec.rdatahash, ARDisplayString(m, our)); in ResolveSimultaneousProbe()
7499 m->SuppressProbes = NonZeroTime(m->timenow + mDNSPlatformOneSecond); in ResolveSimultaneousProbe()
7502 InitializeLastAPTime(m, our); in ResolveSimultaneousProbe()
7509 …e: %p Pkt Record: %08lX %s", q->InterfaceID, m->rec.r.resrec.rdatahash, CRDisplayString(m, … in ResolveSimultaneousProbe()
7510 …8lX %s", our->resrec.InterfaceID, our->ProbeCount, our->resrec.rdatahash, ARDisplayString(m, our)); in ResolveSimultaneousProbe()
7514 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it in ResolveSimultaneousProbe()
7519 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it in ResolveSimultaneousProbe()
7522 mDNSlocal CacheRecord *FindIdenticalRecordInCache(const mDNS *const m, const ResourceRecord *const … in FindIdenticalRecordInCache() argument
7524 CacheGroup *cg = CacheGroupForRecord(m, pktrr); in FindIdenticalRecordInCache()
7545 mDNSlocal void DeregisterProxyRecord(mDNS *const m, AuthRecord *const rr) in DeregisterProxyRecord() argument
7549 mDNS_Deregister_internal(m, rr, mDNS_Dereg_normal); in DeregisterProxyRecord()
7550 SetSPSProxyListChanged(m->rec.r.resrec.InterfaceID); in DeregisterProxyRecord()
7553 mDNSlocal void ClearKeepaliveProxyRecords(mDNS *const m, const OwnerOptData *const owner, AuthRecor… in ClearKeepaliveProxyRecords() argument
7555 if (m->CurrentRecord) in ClearKeepaliveProxyRecords()
7556 …eepaliveProxyRecords ERROR m->CurrentRecord already set %s", ARDisplayString(m, m->CurrentRecord)); in ClearKeepaliveProxyRecords()
7557 m->CurrentRecord = thelist; in ClearKeepaliveProxyRecords()
7561 while (m->CurrentRecord) in ClearKeepaliveProxyRecords()
7563 AuthRecord *const rr = m->CurrentRecord; in ClearKeepaliveProxyRecords()
7566 if (mDNS_KeepaliveRecord(&m->rec.r.resrec)) in ClearKeepaliveProxyRecords()
7569m->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()
7582 mDNSlocal void ClearIdenticalProxyRecords(mDNS *const m, const OwnerOptData *const owner, AuthRecor… in ClearIdenticalProxyRecords() argument
7584 if (m->CurrentRecord) in ClearIdenticalProxyRecords()
7585 …denticalProxyRecords ERROR m->CurrentRecord already set %s", ARDisplayString(m, m->CurrentRecord)); in ClearIdenticalProxyRecords()
7586 m->CurrentRecord = thelist; in ClearIdenticalProxyRecords()
7587 while (m->CurrentRecord) in ClearIdenticalProxyRecords()
7589 AuthRecord *const rr = m->CurrentRecord; in ClearIdenticalProxyRecords()
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()
7594m->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()
7605 mDNSlocal void ClearProxyRecords(mDNS *const m, const OwnerOptData *const owner, AuthRecord *const … in ClearProxyRecords() argument
7607 if (m->CurrentRecord) in ClearProxyRecords()
7608 …LogMsg("ClearProxyRecords ERROR m->CurrentRecord already set %s", ARDisplayString(m, m->CurrentRec… in ClearProxyRecords()
7609 m->CurrentRecord = thelist; in ClearProxyRecords()
7610 while (m->CurrentRecord) in ClearProxyRecords()
7612 AuthRecord *const rr = m->CurrentRecord; in ClearProxyRecords()
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()
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()
7633 mDNS_Deregister_internal(m, rr, mDNS_Dereg_normal); in ClearProxyRecords()
7634 SetSPSProxyListChanged(m->rec.r.resrec.InterfaceID); 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()
7644 mDNSlocal mDNSu8 *ProcessQuery(mDNS *const m, const DNSMessage *const query, const mDNSu8 *const en… in ProcessQuery() argument
7648 const mDNSBool FromLocalSubnet = mDNS_AddressIsLocalSubnet(m, InterfaceID, srcaddr); in ProcessQuery()
7673 … ptr = GetLargeResourceRecord(m, query, ptr, end, InterfaceID, kDNSRecordTypePacketAdd, &m->rec); in ProcessQuery()
7674 …if (ptr && m->rec.r.resrec.RecordType != kDNSRecordTypePacketNegative && m->rec.r.resrec.rrtype ==… in ProcessQuery()
7677 …const rdataOPT *const e = (const rdataOPT *)&m->rec.r.resrec.rdata->u.data[m->rec.r.resrec.rdlengt… in ProcessQuery()
7680 for (opt = &m->rec.r.resrec.rdata->u.opt[0]; opt < e; opt++) in ProcessQuery()
7683 ClearProxyRecords(m, &opt->u.owner, m->DuplicateRecords); in ProcessQuery()
7684 ClearProxyRecords(m, &opt->u.owner, m->ResourceRecords); in ProcessQuery()
7687 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it in ProcessQuery()
7715 m->mDNSStats.UnicastBitInQueries++; in ProcessQuery()
7717 m->mDNSStats.NormalQueries++; in ProcessQuery()
7727 if (m->CurrentRecord) in ProcessQuery()
7728 …LogMsg("ProcessQuery ERROR m->CurrentRecord already set %s", ARDisplayString(m, m->CurrentRecord)); in ProcessQuery()
7729 m->CurrentRecord = m->ResourceRecords; in ProcessQuery()
7730 while (m->CurrentRecord) in ProcessQuery()
7732 rr = m->CurrentRecord; in ProcessQuery()
7733 m->CurrentRecord = rr->next; in ProcessQuery()
7736 m->mDNSStats.MatchingAnswersForQueries++; in ProcessQuery()
7740 ResolveSimultaneousProbe(m, query, end, &pktq, rr); in ProcessQuery()
7760 … if ((mDNSu32)(m->timenow - rr->LastMCTime) >= (mDNSu32)mDNSPlatformOneSecond || in ProcessQuery()
7780 m->NextScheduledResponse = m->timenow; in ProcessQuery()
7788 m->mDNSStats.KnownAnswerMultiplePkts++; in ProcessQuery()
7799 CacheGroup *cg = CacheGroupForName(m, pktq.qnamehash, &pktq.qname); in ProcessQuery()
7822 for (q = m->Questions; q; q=q->next) in ProcessQuery()
7824 if (ActiveQuestion(q) && m->timenow - q->LastQTxTime > mDNSPlatformOneSecond / 4) in ProcessQuery()
7844 …for (rr = m->ResourceRecords; rr; rr=rr->next) // Now build our list of potential ans… in ProcessQuery()
7851 AddAdditionalsToResponseList(m, ResponseRecords, &nrp, InterfaceID); in ProcessQuery()
7860 … ptr = GetLargeResourceRecord(m, query, ptr, end, InterfaceID, kDNSRecordTypePacketAns, &m->rec); in ProcessQuery()
7862 if (m->rec.r.resrec.RecordType != kDNSRecordTypePacketNegative) in ProcessQuery()
7867 if (MustSendRecord(rr) && ShouldSuppressKnownAnswer(&m->rec.r, rr)) in ProcessQuery()
7869 m->mDNSStats.KnownAnswerSuppressions++; 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()
7891 m->mDNSStats.KnownAnswerSuppressions++; in ProcessQuery()
7895 … LogMsg("Suppressed after%4d: %s", m->timenow - rr->ImmedAnswerMarkTime, ARDisplayString(m, rr)); in ProcessQuery()
7901 ourcacherr = FindIdenticalRecordInCache(m, &m->rec.r.resrec); in ProcessQuery()
7912 …if (cr->resrec.InterfaceID == InterfaceID && IdenticalResourceRecord(&m->rec.r.resrec, &cr->resrec… in ProcessQuery()
7926 if (CacheRecordAnswersQuestion(&m->rec.r, q)) in ProcessQuery()
7932 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it in ProcessQuery()
7954 if ((mDNSu32)(m->timenow - rr->LastMCTime) >= (mDNSu32)TicksTTL(rr)/4) in ProcessQuery()
7962 m->mDNSStats.UnicastDemotedToMulticast++; in ProcessQuery()
7970 m->mDNSStats.MulticastResponses++; in ProcessQuery()
7975 m->mDNSStats.UnicastResponses++; in ProcessQuery()
7986 rr->ImmedAnswerMarkTime = m->timenow; in ProcessQuery()
7988 m->NextScheduledResponse = m->timenow; in ProcessQuery()
8029 …if (delayresponse && (!m->SuppressSending || (m->SuppressSending - m->timenow) < (delayresponse + … in ProcessQuery()
8032 mDNSs32 oldss = m->SuppressSending; in ProcessQuery()
8034 …LogMsg("Current SuppressSending delay%5ld; require%5ld", m->SuppressSending - m->timenow, (delayre… in ProcessQuery()
8049m->SuppressSending = m->timenow + (delayresponse + (mDNSs32)mDNSRandom((mDNSu32)mDNSPlatformOneSec… in ProcessQuery()
8050 if (m->SuppressSending == 0) m->SuppressSending = 1; in ProcessQuery()
8053 LogMsg("Set SuppressSending to %5ld", m->SuppressSending - m->timenow); in ProcessQuery()
8064 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it in ProcessQuery()
8088 …if (cr->UnansweredQueries == 0 || m->timenow - cr->LastUnansweredTime >= mDNSPlatformOneSecond * 3… in ProcessQuery()
8091 cr->LastUnansweredTime = m->timenow; in ProcessQuery()
8093 … debugf("ProcessQuery: UnansweredQueries %lu %s", cr->UnansweredQueries, CRDisplayString(m, cr)); in ProcessQuery()
8094 SetNextCacheCheckTimeForRecord(m, cr); in ProcessQuery()
8102 …if (RRExpireTime(cr) - m->timenow > (mDNSs32) kDefaultReconfirmTimeForNoAnswer * 4 / 3 + mDNSPlatf… in ProcessQuery()
8104 …s, InterfaceID, (RRExpireTime(cr) - m->timenow + mDNSPlatformOneSecond-1) / mDNSPlatformOneSecond,… in ProcessQuery()
8106 m->mDNSStats.PoofCacheDeletions++; in ProcessQuery()
8107 mDNS_Reconfirm_internal(m, cr, kDefaultReconfirmTimeForNoAnswer); in ProcessQuery()
8117 RecordDupSuppressInfo(q->DupSuppress, m->timenow, InterfaceID, srcaddr->type); in ProcessQuery()
8124 mDNSlocal void mDNSCoreReceiveQuery(mDNS *const m, const DNSMessage *const msg, const mDNSu8 *const… in mDNSCoreReceiveQuery() argument
8130 … !mDNSAddrIsDNSMulticast(dstaddr) && mDNS_AddressIsLocalSubnet(m, InterfaceID, srcaddr); in mDNSCoreReceiveQuery()
8153 responseend = ProcessQuery(m, msg, end, srcaddr, InterfaceID, in mDNSCoreReceiveQuery()
8154 …PPort(srcport, MulticastDNSPort), mDNSAddrIsDNSMulticast(dstaddr), QueryWasLocalUnicast, &m->omsg); in mDNSCoreReceiveQuery()
8159 m->omsg.h.numQuestions, m->omsg.h.numQuestions == 1 ? "" : "s", in mDNSCoreReceiveQuery()
8160 m->omsg.h.numAnswers, m->omsg.h.numAnswers == 1 ? "" : "s", in mDNSCoreReceiveQuery()
8161 m->omsg.h.numAdditionals, m->omsg.h.numAdditionals == 1 ? "" : "s", in mDNSCoreReceiveQuery()
8163 …mDNSSendDNSMessage(m, &m->omsg, responseend, InterfaceID, mDNSNULL, mDNSNULL, srcaddr, srcport, mD… in mDNSCoreReceiveQuery()
8168 mDNSlocal mDNSBool TrustedSource(const mDNS *const m, const mDNSAddr *const srcaddr)
8171 (void)m; // Unused
8173 for (s = m->DNSServers; s; s = s->next)
8184 mDNSlocal DNSQuestion *ExpectingUnicastResponseForQuestion(const mDNS *const m, const mDNSIPPort po… in ExpectingUnicastResponseForQuestion() argument
8188 for (q = m->Questions; q; q=q->next) in ExpectingUnicastResponseForQuestion()
8209 mDNSlocal DNSQuestion *ExpectingUnicastResponseForRecord(mDNS *const m, in ExpectingUnicastResponseForRecord() argument
8215 for (q = m->Questions; q; q=q->next) 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()
8249 …if (SrcLocal && q->ExpectUnicastResp && (mDNSu32)(m->timenow - q->ExpectUnicastResp) < (mDNSu32)(m… in ExpectingUnicastResponseForRecord()
8271 mDNSexport CacheRecord *CreateNewCacheEntry(mDNS *const m, const mDNSu32 slot, CacheGroup *cg, mDNS… in CreateNewCacheEntry() argument
8274 mDNSu16 RDLength = GetRDLengthMem(&m->rec.r.resrec); in CreateNewCacheEntry()
8276 … if (!m->rec.r.resrec.InterfaceID) debugf("CreateNewCacheEntry %s", CRDisplayString(m, &m->rec.r)); in CreateNewCacheEntry()
8281 …if (!cg) cg = GetCacheGroup(m, slot, &m->rec.r.resrec); // If we don't have a CacheGroup for this … in CreateNewCacheEntry()
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()
8287 *rr = m->rec.r; // Block copy the CacheRecord object in CreateNewCacheEntry()
8302 …LogMsg("rr->resrec.rdata == &rr->rdatastorage but length > InlineCacheRDSize %##s", m->rec.r.resre… in CreateNewCacheEntry()
8304 …LogMsg("rr->resrec.rdata != &rr->rdatastorage but length <= InlineCacheRDSize %##s", m->rec.r.resr… in CreateNewCacheEntry()
8306 … mDNSPlatformMemCopy(rr->resrec.rdata, m->rec.r.resrec.rdata, sizeofRDataHeader + RDLength); in CreateNewCacheEntry()
8316 m->rrcache_totalused_unicast += rr->resrec.rdlength; in CreateNewCacheEntry()
8330 … CacheRecordAdd(m, rr); // CacheRecordAdd calls SetNextCacheCheckTimeForRecord(m, rr); for us in CreateNewCacheEntry()
8344 ReleaseCacheRecord(m, rr); in CreateNewCacheEntry()
8345 NoCacheAnswer(m, &m->rec.r); in CreateNewCacheEntry()
8372 mDNSlocal void RefreshCacheRecord(mDNS *const m, CacheRecord *rr, mDNSu32 ttl) in RefreshCacheRecord() argument
8374 rr->TimeRcvd = m->timenow; in RefreshCacheRecord()
8378 SetNextCacheCheckTimeForRecord(m, rr); in RefreshCacheRecord()
8381 mDNSexport void GrantCacheExtensions(mDNS *const m, DNSQuestion *q, mDNSu32 lease) in GrantCacheExtensions() argument
8384 CacheGroup *cg = CacheGroupForName(m, q->qnamehash, &q->qname); in GrantCacheExtensions()
8389 RefreshCacheRecord(m, rr, lease); in GrantCacheExtensions()
8430 mDNSlocal mDNSBool IsResponseAcceptable(mDNS *const m, const CacheRecord *crlist) in IsResponseAcceptable() argument
8432 CacheRecord *const newcr = &m->rec.r; in IsResponseAcceptable()
8447 …Found a matching entry for %##s in the CacheFlushRecords %s", rr->name->c, CRDisplayString(m, cr)); in IsResponseAcceptable()
8454 mDNSlocal void mDNSCoreReceiveNoUnicastAnswers(mDNS *const m, const DNSMessage *const response, con… in mDNSCoreReceiveNoUnicastAnswers() argument
8485 … qptr = ExpectingUnicastResponseForQuestion(m, dstport, response->h.id, &q, !dstaddr); in mDNSCoreReceiveNoUnicastAnswers()
8491 cg = CacheGroupForName(m, q.qnamehash, &q.qname); in mDNSCoreReceiveNoUnicastAnswers()
8508 if (RRExpireTime(cr) - m->timenow > 0) break; in mDNSCoreReceiveNoUnicastAnswers()
8516 q.request_id, mDNSVal16(q.TargetQID), CRDisplayString(m, cr)); in mDNSCoreReceiveNoUnicastAnswers()
8517 mDNS_PurgeCacheResourceRecord(m, cr); in mDNSCoreReceiveNoUnicastAnswers()
8547 m->CurrentQuestion = qptr; in mDNSCoreReceiveNoUnicastAnswers()
8553 GenerateNegativeResponseEx(m, mDNSInterface_Any, QC_forceresponse, noData); in mDNSCoreReceiveNoUnicastAnswers()
8554 m->CurrentQuestion = mDNSNULL; in mDNSCoreReceiveNoUnicastAnswers()
8586 …ptr = GetLargeResourceRecord(m, response, ptr, end, InterfaceID, kDNSRecordTypePacketAuth, &m->rec… in mDNSCoreReceiveNoUnicastAnswers()
8587 …if (ptr && m->rec.r.resrec.RecordType != kDNSRecordTypePacketNegative && m->rec.r.resrec.rrtype ==… in mDNSCoreReceiveNoUnicastAnswers()
8589 CacheGroup *cgSOA = CacheGroupForRecord(m, &m->rec.r.resrec); in mDNSCoreReceiveNoUnicastAnswers()
8590 … const rdataSOA *const soa = (const rdataSOA *)m->rec.r.resrec.rdata->u.data; in mDNSCoreReceiveNoUnicastAnswers()
8595 if (ttl_s > m->rec.r.resrec.rroriginalttl && m->rec.r.resrec.name->c[0]) in mDNSCoreReceiveNoUnicastAnswers()
8596 ttl_s = m->rec.r.resrec.rroriginalttl; in mDNSCoreReceiveNoUnicastAnswers()
8601 …SOARecord = CreateNewCacheEntry(m, HashSlotFromNameHash(m->rec.r.resrec.namehash), cgSOA, 1, mDNSf… in mDNSCoreReceiveNoUnicastAnswers()
8613 int scount = CountLabels(m->rec.r.resrec.name); in mDNSCoreReceiveNoUnicastAnswers()
8615 … if (SameDomainName(SkipLeadingLabels(&q.qname, qcount - scount), m->rec.r.resrec.name)) in mDNSCoreReceiveNoUnicastAnswers()
8619m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it in mDNSCoreReceiveNoUnicastAnswers()
8643 … q.request_id, mDNSVal16(q.TargetQID), neg->resrec.rroriginalttl, negttl, CRDisplayString(m, neg)); in mDNSCoreReceiveNoUnicastAnswers()
8644 RefreshCacheRecord(m, neg, negttl); in mDNSCoreReceiveNoUnicastAnswers()
8661 ResetQuestionState(m, qptr); in mDNSCoreReceiveNoUnicastAnswers()
8666 ReleaseCacheRecord(m, neg->soa); in mDNSCoreReceiveNoUnicastAnswers()
8676 …MakeNegativeCacheRecord(m, &m->rec.r, name, hash, q.qtype, q.qclass, negttl, mDNSInterface_Any, uD… in mDNSCoreReceiveNoUnicastAnswers()
8678 …MakeNegativeCacheRecord(m, &m->rec.r, name, hash, q.qtype, q.qclass, negttl, mDNSInterface_Any, qp… in mDNSCoreReceiveNoUnicastAnswers()
8680 m->rec.r.responseFlags = response->h.flags; in mDNSCoreReceiveNoUnicastAnswers()
8686 cg = CacheGroupForName(m, hash, name); in mDNSCoreReceiveNoUnicastAnswers()
8688 … negcr = CreateNewCacheEntry(m, HashSlotFromNameHash(hash), cg, 1, mDNStrue, mDNSNULL); in mDNSCoreReceiveNoUnicastAnswers()
8705 ReleaseCacheRecord(m, negcr->soa); in mDNSCoreReceiveNoUnicastAnswers()
8709 CacheRecordDeferredAdd(m, negcr); in mDNSCoreReceiveNoUnicastAnswers()
8711 m->rec.r.responseFlags = zeroID; in mDNSCoreReceiveNoUnicastAnswers()
8712m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it in mDNSCoreReceiveNoUnicastAnswers()
8725 ReleaseCacheRecord(m, SOARecord); in mDNSCoreReceiveNoUnicastAnswers()
8729 mDNSlocal void mDNSCorePrintStoredProxyRecords(mDNS *const m) in mDNSCorePrintStoredProxyRecords() argument
8732 if (!m->SPSRRSet) return; in mDNSCorePrintStoredProxyRecords()
8734 for (rrPtr = m->SPSRRSet; rrPtr; rrPtr = rrPtr->next) in mDNSCorePrintStoredProxyRecords()
8736 LogSPS("%s", ARDisplayString(m, rrPtr)); in mDNSCorePrintStoredProxyRecords()
8740 mDNSlocal mDNSBool mDNSCoreRegisteredProxyRecord(mDNS *const m, AuthRecord *rr) in mDNSCoreRegisteredProxyRecord() argument
8744 for (rrPtr = m->SPSRRSet; rrPtr; rrPtr = rrPtr->next) in mDNSCoreRegisteredProxyRecord()
8748 …RegisteredProxyRecord: Ignoring packet registered with sleep proxy : %s ", ARDisplayString(m, rr)); in mDNSCoreRegisteredProxyRecord()
8752 mDNSCorePrintStoredProxyRecords(m); in mDNSCoreRegisteredProxyRecord()
8756 mDNSexport CacheRecord* mDNSCoreReceiveCacheCheck(mDNS *const m, const DNSMessage *const response, … in mDNSCoreReceiveCacheCheck() argument
8769 match = (cr->resrec.dnsservice == m->rec.r.resrec.dnsservice) ? mDNStrue : mDNSfalse; in mDNSCoreReceiveCacheCheck()
8772 … const mDNSu32 id2 = (m->rec.r.resrec.rDNSServer ? m->rec.r.resrec.rDNSServer->resGroupID : 0); in mDNSCoreReceiveCacheCheck()
8781 if (IdenticalSameNameRecord(&m->rec.r.resrec, &cr->resrec)) in mDNSCoreReceiveCacheCheck()
8783 if (m->rec.r.resrec.rdlength > InlineCacheRDSize) in mDNSCoreReceiveCacheCheck()
8785m->rec.r.resrec.rdlength, InterfaceID, CRDisplayString(m, &m->rec.r)); in mDNSCoreReceiveCacheCheck()
8787 if (m->rec.r.resrec.RecordType & kDNSRecordTypePacketUniqueMask) in mDNSCoreReceiveCacheCheck()
8802 for (q = m->Questions; q; q=q->next) in mDNSCoreReceiveCacheCheck()
8807 cr->resrec.RecordType = m->rec.r.resrec.RecordType; in mDNSCoreReceiveCacheCheck()
8811 if (!SameRDataBody(&m->rec.r.resrec, &cr->resrec.rdata->u, SameDomainNameCS)) in mDNSCoreReceiveCacheCheck()
8818 cr->TimeRcvd = m->timenow; in mDNSCoreReceiveCacheCheck()
8820 SetNextCacheCheckTimeForRecord(m, cr); in mDNSCoreReceiveCacheCheck()
8821 …eReceiveCacheCheck: Discarding due to domainname case change old: " PRI_S, CRDisplayString(m, cr)); in mDNSCoreReceiveCacheCheck()
8822 …eCacheCheck: Discarding due to domainname case change new: " PRI_S, CRDisplayString(m, &m->rec.r)); in mDNSCoreReceiveCacheCheck()
8824 …NextCacheCheckEvent(cr) - m->timenow, slot, m->rrcache_nextcheck[slot] - m->timenow, m->NextCacheC… in mDNSCoreReceiveCacheCheck()
8827 else if (m->rec.r.resrec.rroriginalttl > 0) in mDNSCoreReceiveCacheCheck()
8831 m->mDNSStats.CacheRefreshed++; in mDNSCoreReceiveCacheCheck()
8835 cr->DelayDelivery = NonZeroTime(m->timenow); in mDNSCoreReceiveCacheCheck()
8836 …t DelayDelivery for mortalityExpired EXP:%d RR %s", m->timenow - RRExpireTime(cr), CRDisplayString… in mDNSCoreReceiveCacheCheck()
8839 … if (cr->resrec.rroriginalttl == 0) debugf("uDNS rescuing %s", CRDisplayString(m, cr)); in mDNSCoreReceiveCacheCheck()
8840 RefreshCacheRecord(m, cr, m->rec.r.resrec.rroriginalttl); in mDNSCoreReceiveCacheCheck()
8855 …Y_DEFAULT, MDNS_LOG_INFO, "mDNSCoreReceiveCacheCheck: rescuing RR " PRI_S, CRDisplayString(m, cr)); in mDNSCoreReceiveCacheCheck()
8867 for (q = m->Questions; q; q=q->next) in mDNSCoreReceiveCacheCheck()
8872 ResetQuestionState(m, q); in mDNSCoreReceiveCacheCheck()
8890 debugf("DE for %s", CRDisplayString(m, cr)); in mDNSCoreReceiveCacheCheck()
8891 if (RRExpireTime(cr) - m->timenow > mDNSPlatformOneSecond) in mDNSCoreReceiveCacheCheck()
8894 cr->TimeRcvd = m->timenow; in mDNSCoreReceiveCacheCheck()
8896 SetNextCacheCheckTimeForRecord(m, cr); in mDNSCoreReceiveCacheCheck()
8902 m->rec.r.resrec.rrclass == cr->resrec.rrclass && in mDNSCoreReceiveCacheCheck()
8903 (m->rec.r.resrec.rrtype != cr->resrec.rrtype && in mDNSCoreReceiveCacheCheck()
8904 … (m->rec.r.resrec.rrtype == kDNSType_CNAME || cr->resrec.rrtype == kDNSType_CNAME))) in mDNSCoreReceiveCacheCheck()
8908 …playString(cr->resrec.mortality), CRDisplayString(m, cr), DNSTypeName(cr->resrec.rrtype), DNSTypeN… in mDNSCoreReceiveCacheCheck()
8909 mDNS_PurgeCacheResourceRecord(m, cr); in mDNSCoreReceiveCacheCheck()
8917 mDNSlocal void mDNSCoreResetRecord(mDNS *const m) in mDNSCoreResetRecord() argument
8919 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it in mDNSCoreResetRecord()
8928 mDNSlocal void mDNSCoreReceiveResponse(mDNS *const m, const DNSMessage *const response, const mDNSu… in mDNSCoreReceiveResponse() argument
8937 … const mDNSBool ResponseSrcLocal = !srcaddr || mDNS_AddressIsLocalSubnet(m, InterfaceID, srcaddr); in mDNSCoreReceiveResponse()
8939 uDNS_LLQType LLQType = uDNS_recvLLQResponse(m, response, end, srcaddr, srcport, &llqMatch); in mDNSCoreReceiveResponse()
8946 NetworkInterfaceInfo *llintf = FirstIPv4LLInterfaceForID(m, InterfaceID); in mDNSCoreReceiveResponse()
9072 … qptr = ExpectingUnicastResponseForQuestion(m, dstport, response->h.id, &q, !dstaddr); in mDNSCoreReceiveResponse()
9082 CacheGroup *cg = CacheGroupForName(m, q.qnamehash, &q.qname); in mDNSCoreReceiveResponse()
9099 cr->resrec.InterfaceID, CRDisplayString(m, cr)); in mDNSCoreReceiveResponse()
9101 cr->TimeRcvd = m->timenow - TicksTTL(cr) - 1; in mDNSCoreReceiveResponse()
9113 PenalizeDNSServer(m, qptr, response->h.flags); in mDNSCoreReceiveResponse()
9149 ptr = GetLargeResourceRecord(m, response, ptr, end, InterfaceID, RecordType, &m->rec); in mDNSCoreReceiveResponse()
9152 if (m->rec.r.resrec.RecordType == kDNSRecordTypePacketNegative) in mDNSCoreReceiveResponse()
9154 mDNSCoreResetRecord(m); in mDNSCoreReceiveResponse()
9159 if (m->rec.r.resrec.rrtype == kDNSType_TSIG) in mDNSCoreReceiveResponse()
9161 mDNSCoreResetRecord(m); in mDNSCoreReceiveResponse()
9164 if (m->rec.r.resrec.rrtype == kDNSType_OPT) in mDNSCoreReceiveResponse()
9167 …const rdataOPT *const e = (const rdataOPT *)&m->rec.r.resrec.rdata->u.data[m->rec.r.resrec.rdlengt… in mDNSCoreReceiveResponse()
9170 for (opt = &m->rec.r.resrec.rdata->u.opt[0]; opt < e; opt++) in mDNSCoreReceiveResponse()
9173 ClearProxyRecords(m, &opt->u.owner, m->DuplicateRecords); in mDNSCoreReceiveResponse()
9174 ClearProxyRecords(m, &opt->u.owner, m->ResourceRecords); in mDNSCoreReceiveResponse()
9176 mDNSCoreResetRecord(m); in mDNSCoreReceiveResponse()
9180 …if ((m->rec.r.resrec.rrtype == kDNSType_CNAME) && SameDomainName(m->rec.r.resrec.name, &m->rec.r.r… in mDNSCoreReceiveResponse()
9182 … LogInfo("mDNSCoreReceiveResponse: CNAME loop domain name %##s", m->rec.r.resrec.name->c); in mDNSCoreReceiveResponse()
9183 mDNSCoreResetRecord(m); in mDNSCoreReceiveResponse()
9192 m->rec.r.resrec.rroriginalttl = GetEffectiveTTL(LLQType, m->rec.r.resrec.rroriginalttl); in mDNSCoreReceiveResponse()
9210 mdns_replace(&m->rec.r.resrec.dnsservice, uDNSService); in mDNSCoreReceiveResponse()
9213 … if (llqMatch != mDNSNULL) m->rec.r.resrec.rDNSServer = uDNSServer = llqMatch->qDNSServer; in mDNSCoreReceiveResponse()
9225 ResourceRecord *const rr = &m->rec.r.resrec; in mDNSCoreReceiveResponse()
9254 …q = ExpectingUnicastResponseForRecord(m, srcaddr, ResponseSrcLocal, dstport, response->h.id, &m->r… in mDNSCoreReceiveResponse()
9262 m->rec.r.resrec.rDNSServer = uDNSServer = q->qDNSServer; in mDNSCoreReceiveResponse()
9280 …debugf("mDNSCoreReceiveResponse: Can't find question for record name %##s", m->rec.r.resrec.name->… in mDNSCoreReceiveResponse()
9287 else if (llintf && llintf->IgnoreIPv4LL && m->rec.r.resrec.rrtype == kDNSType_A) in mDNSCoreReceiveResponse()
9314 const CacheRecord *const rr = &m->rec.r; in mDNSCoreReceiveResponse()
9318 … LogInfo("mDNSResponder: Dropping LinkLocal packet %s", CRDisplayString(m, &m->rec.r)); in mDNSCoreReceiveResponse()
9319 mDNSCoreResetRecord(m); in mDNSCoreReceiveResponse()
9325 if (ResponseIsMDNS && m->rec.r.resrec.rrtype != kDNSType_NSEC) in mDNSCoreReceiveResponse()
9327 if (m->CurrentRecord) in mDNSCoreReceiveResponse()
9328 …SCoreReceiveResponse ERROR m->CurrentRecord already set %s", ARDisplayString(m, m->CurrentRecord)); in mDNSCoreReceiveResponse()
9329 m->CurrentRecord = m->ResourceRecords; in mDNSCoreReceiveResponse()
9330 while (m->CurrentRecord) in mDNSCoreReceiveResponse()
9332 AuthRecord *rr = m->CurrentRecord; in mDNSCoreReceiveResponse()
9333 m->CurrentRecord = rr->next; 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()
9352 …Answer == mDNSNULL) { rr->ImmedAnswer = InterfaceID; m->NextScheduledResponse = m->timeno… in mDNSCoreReceiveResponse()
9353 …Answer != InterfaceID) { rr->ImmedAnswer = mDNSInterfaceMark; m->NextScheduledResponse = m->timeno… in mDNSCoreReceiveResponse()
9357 … else if (m->rec.r.resrec.rroriginalttl > 0 && PacketRRConflict(m, rr, &m->rec.r)) in mDNSCoreReceiveResponse()
9360m->rec.r.resrec.rdatahash, CRDisplayString(m, &m->rec.r), IIDPrintable(InterfaceID)); in mDNSCoreReceiveResponse()
9361 …nfo("mDNSCoreReceiveResponse: Our Record: %08lX %s", rr->resrec.rdatahash, ARDisplayString(m, rr)); in mDNSCoreReceiveResponse()
9368 …nfo("mDNSCoreReceiveResponse: Dep Record: %08lX %s", rr->resrec.rdatahash, ARDisplayString(m, rr)); in mDNSCoreReceiveResponse()
9373 … LogInfo("mDNSCoreReceiveResponse: Already reset to Probing: %s", ARDisplayString(m, rr)); in mDNSCoreReceiveResponse()
9375 …iveResponse: Ignoring response received before we even began probing: %s", ARDisplayString(m, rr)); in mDNSCoreReceiveResponse()
9378 …iveResponse: Received from %#a:%d %s", srcaddr, mDNSVal16(srcport), CRDisplayString(m, &m->rec.r)); in mDNSCoreReceiveResponse()
9382 … LogMsg("mDNSCoreReceiveResponse: Resetting to Probing: %s", ARDisplayString(m, rr)); 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()
9400 if (!mDNSCoreRegisteredProxyRecord(m, rr)) in mDNSCoreReceiveResponse()
9402 … if ((rr->ProbingConflictCount == 0) || (m->MPktNum != rr->LastConflictPktNum)) in mDNSCoreReceiveResponse()
9404 … const NetworkInterfaceInfo *const intf = FirstInterfaceForID(m, InterfaceID); in mDNSCoreReceiveResponse()
9406 rr->LastConflictPktNum = m->MPktNum; in mDNSCoreReceiveResponse()
9413 … kMaxAllowedMCastProbingConflicts, IIDPrintable(InterfaceID), ARDisplayString(m, rr)); in mDNSCoreReceiveResponse()
9415 … rr->LastAPTime = m->timenow + kProbingConflictPauseDuration - rr->ThisAPInterval; in mDNSCoreReceiveResponse()
9416 SetNextAnnounceProbeTime(m, rr); in mDNSCoreReceiveResponse()
9421 …rr->ProbeCount, ARDisplayString(m, rr), ResponseMCast ? "multi" : "uni", IIDPrintable(InterfaceID)… in mDNSCoreReceiveResponse()
9422 m->mDNSStats.NameConflicts++; in mDNSCoreReceiveResponse()
9427 mDNS_Deregister_internal(m, rr, mDNS_Dereg_conflict); in mDNSCoreReceiveResponse()
9439 … LogMsg("mDNSCoreReceiveResponse: Unexpected conflict discarding %s", ARDisplayString(m, rr)); in mDNSCoreReceiveResponse()
9440 m->mDNSStats.KnownUniqueNameConflicts++; in mDNSCoreReceiveResponse()
9444 mDNS_Deregister_internal(m, rr, mDNS_Dereg_conflict); in mDNSCoreReceiveResponse()
9447 …CoreReceiveResponse: 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()
9455 (m->rec.r.resrec.RecordType & kDNSRecordTypePacketUniqueMask) && in mDNSCoreReceiveResponse()
9456 … ((mDNSu32)(m->timenow - rr->LastMCTime) > (mDNSu32)mDNSPlatformOneSecond/2) && in mDNSCoreReceiveResponse()
9460 m->NextScheduledResponse = m->timenow; in mDNSCoreReceiveResponse()
9470 … not_answer_but_required_for_dnssec = adds_denial_records_in_cache_record(&m->rec.r.resrec, in mDNSCoreReceiveResponse()
9476 AcceptableResponse = IsResponseAcceptable(m, CacheFlushRecords); in mDNSCoreReceiveResponse()
9479 if (AcceptableResponse) mdns_replace(&m->rec.r.resrec.dnsservice, uDNSService); in mDNSCoreReceiveResponse()
9481 if (AcceptableResponse) m->rec.r.resrec.rDNSServer = uDNSServer; in mDNSCoreReceiveResponse()
9494 mDNSVal16(response->h.id), CRDisplayString(m, &m->rec.r), savedString); in mDNSCoreReceiveResponse()
9497 if (m->rrcache_size && AcceptableResponse) in mDNSCoreReceiveResponse()
9499 const mDNSu32 slot = HashSlotFromNameHash(m->rec.r.resrec.namehash); in mDNSCoreReceiveResponse()
9500 CacheGroup *cg = CacheGroupForRecord(m, &m->rec.r.resrec); in mDNSCoreReceiveResponse()
9504 rr = mDNSCoreReceiveCacheCheck(m, response, LLQType, slot, cg, &cfp, InterfaceID); in mDNSCoreReceiveResponse()
9508 if (!rr && m->rec.r.resrec.rroriginalttl > 0) in mDNSCoreReceiveResponse()
9510 …const mDNSBool AddToCFList = (m->rec.r.resrec.RecordType & kDNSRecordTypePacketUniqueMask) && (LLQ… in mDNSCoreReceiveResponse()
9514 delay = NonZeroTime(m->timenow + mDNSPlatformOneSecond); in mDNSCoreReceiveResponse()
9516 … delay = CheckForSoonToExpireRecords(m, m->rec.r.resrec.name, m->rec.r.resrec.namehash); in mDNSCoreReceiveResponse()
9522 rr = CreateNewCacheEntry(m, slot, cg, delay, mDNStrue, srcaddr); in mDNSCoreReceiveResponse()
9539 ScheduleNextCacheCheckTime(m, slot, rr->DelayDelivery); in mDNSCoreReceiveResponse()
9544 mDNSCoreResetRecord(m); in mDNSCoreReceiveResponse()
9548 mDNSCoreResetRecord(m); in mDNSCoreReceiveResponse()
9556 const CacheGroup *cg = CacheGroupForRecord(m, &r1->resrec); in mDNSCoreReceiveResponse()
9622 …if (m->timenow - r2->TimeRcvd < mDNSPlatformOneSecond && RRExpireTime(r2) - m->timenow > mDNSPlatf… in mDNSCoreReceiveResponse()
9647 … r2->resrec.rroriginalttl, r1->resrec.rroriginalttl, CRDisplayString(m, r2)); in mDNSCoreReceiveResponse()
9650 r2->TimeRcvd = m->timenow; in mDNSCoreReceiveResponse()
9651 SetNextCacheCheckTimeForRecord(m, r2); in mDNSCoreReceiveResponse()
9655 …sh new %p age %d expire in %d %s", r1, m->timenow - r1->TimeRcvd, RRExpireTime(r1) - m->timenow, C… in mDNSCoreReceiveResponse()
9656 …sh old %p age %d expire in %d %s", r2, m->timenow - r2->TimeRcvd, RRExpireTime(r2) - m->timenow, C… in mDNSCoreReceiveResponse()
9676 …if (r2->TimeRcvd == m->timenow && r2->resrec.rroriginalttl == 1 && r2->UnansweredQueries == MaxUna… in mDNSCoreReceiveResponse()
9678 LogInfo("Cache flush for DE record %s", CRDisplayString(m, r2)); in mDNSCoreReceiveResponse()
9681 else if (RRExpireTime(r2) - m->timenow > mDNSPlatformOneSecond) in mDNSCoreReceiveResponse()
9687 r2->TimeRcvd = m->timenow - 1; in mDNSCoreReceiveResponse()
9691 SetNextCacheCheckTimeForRecord(m, r2); in mDNSCoreReceiveResponse()
9699 for (q = m->Questions; q; q=q->next) in mDNSCoreReceiveResponse()
9711 mDNS_PurgeCacheResourceRecord(m, r2); in mDNSCoreReceiveResponse()
9721 … r1->DelayDelivery = CheckForSoonToExpireRecords(m, r1->resrec.name, r1->resrec.namehash); in mDNSCoreReceiveResponse()
9727 r1->DelayDelivery = purgedRecords ? NonZeroTime(m->timenow) : 0; in mDNSCoreReceiveResponse()
9730 if (!r1->DelayDelivery) CacheRecordDeferredAdd(m, r1); in mDNSCoreReceiveResponse()
9731 else ScheduleNextCacheCheckTime(m, slot, r1->DelayDelivery); in mDNSCoreReceiveResponse()
9736 mDNSCoreReceiveNoUnicastAnswers(m, response, end, dstaddr, dstport, InterfaceID, in mDNSCoreReceiveResponse()
9756 mDNSlocal void ScheduleWakeupForList(mDNS *const m, mDNSInterfaceID InterfaceID, mDNSEthAddr *e, Au… in ScheduleWakeupForList() argument
9767 m->CurrentRecord = thelist; in ScheduleWakeupForList()
9768 while (m->CurrentRecord) in ScheduleWakeupForList()
9770 AuthRecord *const rr = m->CurrentRecord; 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()
9781 mDNSlocal void ScheduleWakeup(mDNS *const m, mDNSInterfaceID InterfaceID, mDNSEthAddr *e) in ScheduleWakeup() argument
9784 ScheduleWakeupForList(m, InterfaceID, e, m->DuplicateRecords); in ScheduleWakeup()
9785 ScheduleWakeupForList(m, InterfaceID, e, m->ResourceRecords); in ScheduleWakeup()
9788 mDNSlocal void SPSRecordCallback(mDNS *const m, AuthRecord *const ar, mStatus result) in SPSRecordCallback() argument
9791 LogInfo("SPS Callback %d %s", result, ARDisplayString(m, ar)); in SPSRecordCallback()
9795 mDNS_Lock(m); in SPSRecordCallback()
9796 … mDNS -- waking %.6a %s", InterfaceNameForID(m, ar->resrec.InterfaceID), &ar->WakeUp.HMAC, ARDispl… in SPSRecordCallback()
9799 …SendWakeup(m, ar->resrec.InterfaceID, &ar->WakeUp.IMAC, &ar->WakeUp.password, mDNSfalse); // Send… in SPSRecordCallback()
9800 …ScheduleWakeup(m, ar->resrec.InterfaceID, &ar->WakeUp.HMAC); // Sche… in SPSRecordCallback()
9802 mDNS_Unlock(m); in SPSRecordCallback()
9807 m->ProxyRecords--; in SPSRecordCallback()
9809 mDNS_UpdateAllowSleep(m); in SPSRecordCallback()
10135 mDNSlocal AuthRecord* mDNS_MatchKeepaliveInfo(mDNS *const m, const mDNSAddr* pladdr, const mDNSAddr… in mDNS_MatchKeepaliveInfo() argument
10145 for (ar = m->ResourceRecords; ar; ar=ar->next) in mDNS_MatchKeepaliveInfo()
10159 … debugf("mDNS_MatchKeepaliveInfo: not a valid record %s for keepalive", ARDisplayString(m, ar)); in mDNS_MatchKeepaliveInfo()
10178 mDNSlocal void mDNS_SendKeepalives(mDNS *const m) in mDNS_SendKeepalives() argument
10182 for (ar = m->ResourceRecords; ar; ar=ar->next) in mDNS_SendKeepalives()
10202 … debugf("mDNS_SendKeepalives: not a valid record %s for keepalive", ARDisplayString(m, ar)); in mDNS_SendKeepalives()
10209 if (!ar->KATimeExpire || (m->timenow - ar->KATimeExpire >= 0)) in mDNS_SendKeepalives()
10212 ar->KATimeExpire = NonZeroTime(m->timenow + timeout * mDNSPlatformOneSecond); in mDNS_SendKeepalives()
10214 if (m->NextScheduledKA - ar->KATimeExpire > 0) in mDNS_SendKeepalives()
10215 m->NextScheduledKA = ar->KATimeExpire; in mDNS_SendKeepalives()
10219 mDNSlocal void mDNS_SendKeepaliveACK(mDNS *const m, AuthRecord *ar) in mDNS_SendKeepaliveACK() argument
10244 … LogInfo("mDNS_SendKeepaliveACK: not a valid record %s for keepalive", ARDisplayString(m, ar)); in mDNS_SendKeepaliveACK()
10262 mDNSlocal void mDNSCoreReceiveUpdate(mDNS *const m, in mDNSCoreReceiveUpdate() argument
10269 mDNSu8 *p = m->omsg.data; in mDNSCoreReceiveUpdate()
10282 if (!InterfaceID || !m->SPSSocket || !mDNSSameIPPort(dstport, m->SPSSocket->port)) return; in mDNSCoreReceiveUpdate()
10290 ptr = GetLargeResourceRecord(m, msg, ptr, end, 0, kDNSRecordTypePacketAdd, &m->rec); in mDNSCoreReceiveUpdate()
10291 …if (ptr && m->rec.r.resrec.RecordType != kDNSRecordTypePacketNegative && m->rec.r.resrec.rrtype ==… in mDNSCoreReceiveUpdate()
10294 …const rdataOPT *const e = (const rdataOPT *)&m->rec.r.resrec.rdata->u.data[m->rec.r.resrec.rdlengt… in mDNSCoreReceiveUpdate()
10295 for (o = &m->rec.r.resrec.rdata->u.opt[0]; o < e; o++) in mDNSCoreReceiveUpdate()
10301 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it in mDNSCoreReceiveUpdate()
10304 InitializeDNSMessage(&m->omsg.h, msg->h.id, UpdateRespFlags); in mDNSCoreReceiveUpdate()
10315 m->omsg.h.flags.b[1] |= kDNSFlag1_RC_FormErr; in mDNSCoreReceiveUpdate()
10317 else if (m->ProxyRecords + msg->h.mDNS_numUpdates > MAX_PROXY_RECORDS) in mDNSCoreReceiveUpdate()
10324m->ProxyRecords, msg->h.mDNS_numUpdates, m->ProxyRecords + msg->h.mDNS_numUpdates, MAX_PROXY_RECOR… in mDNSCoreReceiveUpdate()
10326 m->omsg.h.flags.b[1] |= kDNSFlag1_RC_Refused; in mDNSCoreReceiveUpdate()
10341 ClearKeepaliveProxyRecords(m, &owner, m->DuplicateRecords, InterfaceID); in mDNSCoreReceiveUpdate()
10342 ClearKeepaliveProxyRecords(m, &owner, m->ResourceRecords, InterfaceID); in mDNSCoreReceiveUpdate()
10346 … ptr = GetLargeResourceRecord(m, msg, ptr, end, InterfaceID, kDNSRecordTypePacketAuth, &m->rec); in mDNSCoreReceiveUpdate()
10347 if (ptr && m->rec.r.resrec.RecordType != kDNSRecordTypePacketNegative) in mDNSCoreReceiveUpdate()
10349 mDNSu16 RDLengthMem = GetRDLengthMem(&m->rec.r.resrec); in mDNSCoreReceiveUpdate()
10353 m->omsg.h.flags.b[1] |= kDNSFlag1_RC_Refused; in mDNSCoreReceiveUpdate()
10358 …mDNSu8 RecordType = m->rec.r.resrec.RecordType & kDNSRecordTypePacketUniqueMask ? kDNSRecordTypeUn… in mDNSCoreReceiveUpdate()
10359 m->rec.r.resrec.rrclass &= ~kDNSClass_UniqueRRSet; in mDNSCoreReceiveUpdate()
10361 if (!mDNS_KeepaliveRecord(&m->rec.r.resrec)) in mDNSCoreReceiveUpdate()
10363 …ClearIdenticalProxyRecords(m, &owner, m->DuplicateRecords); // Make sure we don't have any old sta… in mDNSCoreReceiveUpdate()
10364 ClearIdenticalProxyRecords(m, &owner, m->ResourceRecords); in mDNSCoreReceiveUpdate()
10366 …mDNS_SetupResourceRecord(ar, mDNSNULL, InterfaceID, m->rec.r.resrec.rrtype, m->rec.r.resrec.rrorig… in mDNSCoreReceiveUpdate()
10367 AssignDomainName(&ar->namestorage, m->rec.r.resrec.name); in mDNSCoreReceiveUpdate()
10368 ar->resrec.rdlength = GetRDLength(&m->rec.r.resrec, mDNSfalse); in mDNSCoreReceiveUpdate()
10370 … mDNSPlatformMemCopy(ar->resrec.rdata->u.data, m->rec.r.resrec.rdata->u.data, RDLengthMem); in mDNSCoreReceiveUpdate()
10373 if (m->rec.r.resrec.rrtype == kDNSType_PTR) in mDNSCoreReceiveUpdate()
10375 mDNSs32 t = ReverseMapDomainType(m->rec.r.resrec.name); in mDNSCoreReceiveUpdate()
10376 … if (t == mDNSAddrType_IPv4) GetIPv4FromName(&ar->AddressProxy, m->rec.r.resrec.name); in mDNSCoreReceiveUpdate()
10377 … else if (t == mDNSAddrType_IPv6) GetIPv6FromName(&ar->AddressProxy, m->rec.r.resrec.name); in mDNSCoreReceiveUpdate()
10378 …iveUpdate: PTR %d %d %#a %s", t, ar->AddressProxy.type, &ar->AddressProxy, ARDisplayString(m, ar)); in mDNSCoreReceiveUpdate()
10381 ar->TimeRcvd = m->timenow; in mDNSCoreReceiveUpdate()
10382 ar->TimeExpire = m->timenow + updatelease * mDNSPlatformOneSecond; in mDNSCoreReceiveUpdate()
10383 if (m->NextScheduledSPS - ar->TimeExpire > 0) in mDNSCoreReceiveUpdate()
10384 m->NextScheduledSPS = ar->TimeExpire; in mDNSCoreReceiveUpdate()
10386 mDNS_Register_internal(m, ar); in mDNSCoreReceiveUpdate()
10388 m->ProxyRecords++; in mDNSCoreReceiveUpdate()
10389 mDNS_UpdateAllowSleep(m); in mDNSCoreReceiveUpdate()
10390 … LogSPS("SPS Registered %4d %X %s", m->ProxyRecords, RecordType, ARDisplayString(m,ar)); in mDNSCoreReceiveUpdate()
10393 m->rec.r.resrec.RecordType = 0; // Clear RecordType to show we're not still using it in mDNSCoreReceiveUpdate()
10396 if (m->omsg.h.flags.b[1] & kDNSFlag1_RC_Mask) in mDNSCoreReceiveUpdate()
10399 ClearProxyRecords(m, &owner, m->DuplicateRecords); in mDNSCoreReceiveUpdate()
10400 ClearProxyRecords(m, &owner, m->ResourceRecords); in mDNSCoreReceiveUpdate()
10410 …p = PutResourceRecordTTLWithLimit(&m->omsg, p, &m->omsg.h.numAdditionals, &opt.resrec, opt.resrec.… in mDNSCoreReceiveUpdate()
10414 …if (p) mDNSSendDNSMessage(m, &m->omsg, p, InterfaceID, mDNSNULL, m->SPSSocket, srcaddr, srcport, m… in mDNSCoreReceiveUpdate()
10415 mDNS_SendKeepalives(m); in mDNSCoreReceiveUpdate()
10418 mDNSlocal mDNSu32 mDNSGenerateOwnerOptForInterface(mDNS *const m, const mDNSInterfaceID InterfaceID… in mDNSGenerateOwnerOptForInterface() argument
10431 intf = FirstInterfaceForID(m, InterfaceID); in mDNSGenerateOwnerOptForInterface()
10432 SetupOwnerOpt(m, intf, &opt.resrec.rdata->u.opt[0]); in mDNSGenerateOwnerOptForInterface()
10434 LogSPS("Generated OPT record : %s", ARDisplayString(m, &opt)); in mDNSGenerateOwnerOptForInterface()
10452 mDNSlocal void mDNSCoreReceiveUpdateR(mDNS *const m, const DNSMessage *const msg, const mDNSu8 *end… in mDNSCoreReceiveUpdateR() argument
10457 const mDNSBool gotlease = GetPktLease(m, msg, end, &pktlease); in mDNSCoreReceiveUpdateR()
10461 if (m->CurrentRecord) in mDNSCoreReceiveUpdateR()
10462 …NSCoreReceiveUpdateR ERROR m->CurrentRecord already set %s", ARDisplayString(m, m->CurrentRecord)); in mDNSCoreReceiveUpdateR()
10463 m->CurrentRecord = m->ResourceRecords; in mDNSCoreReceiveUpdateR()
10464 while (m->CurrentRecord) in mDNSCoreReceiveUpdateR()
10466 AuthRecord *const rr = m->CurrentRecord; in mDNSCoreReceiveUpdateR()
10472 … mDNSu32 scopeid = mDNSPlatformInterfaceIndexfromInterfaceID(m, InterfaceID, mDNStrue); in mDNSCoreReceiveUpdateR()
10477 rr->expire = NonZeroTime(m->timenow + updatelease * mDNSPlatformOneSecond); in mDNSCoreReceiveUpdateR()
10479 …lease, rr->updateIntID.l[1], rr->updateIntID.l[0], mDNSVal16(rr->updateid), ARDisplayString(m,rr)); 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()
10499 ifname = InterfaceNameForID(m, InterfaceID); in mDNSCoreReceiveUpdateR()
10506 length = mDNSGenerateOwnerOptForInterface(m, InterfaceID, &optMsg); in mDNSCoreReceiveUpdateR()
10516 if (m->SleepLimit) m->NextScheduledSPRetry = m->timenow; in mDNSCoreReceiveUpdateR()
10519 mDNSexport void MakeNegativeCacheRecord(mDNS *const m, CacheRecord *const cr, const domainname *con… in MakeNegativeCacheRecord() argument
10527 if (cr == &m->rec.r && m->rec.r.resrec.RecordType) in MakeNegativeCacheRecord()
10528 …keNegativeCacheRecord: m->rec appears to be already in use for %s", CRDisplayString(m, &m->rec.r)); in MakeNegativeCacheRecord()
10550 cr->TimeRcvd = m->timenow; in MakeNegativeCacheRecord()
10552 cr->NextRequiredQuery = m->timenow; in MakeNegativeCacheRecord()
10567 mDNSexport void mDNSCoreReceiveForQuerier(mDNS *const m, DNSMessage *const msg, const mDNSu8 *const… in mDNSCoreReceiveForQuerier() argument
10571 mDNS_Lock(m); in mDNSCoreReceiveForQuerier()
10572 …mDNSCoreReceiveResponse(m, msg, end, mDNSNULL, zeroIPPort, mDNSNULL, zeroIPPort, querier, dnsservi… in mDNSCoreReceiveForQuerier()
10573 mDNS_Unlock(m); in mDNSCoreReceiveForQuerier()
10577 mDNSexport void mDNSCoreReceive(mDNS *const m, DNSMessage *const msg, const mDNSu8 *const end, in mDNSCoreReceive() argument
10593 if (mDNSSameAddress(srcaddr, &m->Router)) in mDNSCoreReceive()
10596 …if (mDNSSameIPPort(srcport, SSDPPort) || (m->SSDPSocket && mDNSSameIPPort(dstport, m->SSDPSocket->… in mDNSCoreReceive()
10598 mDNS_Lock(m); in mDNSCoreReceive()
10599 LNT_ConfigureRouterInfo(m, InterfaceID, (mDNSu8 *)msg, (mDNSu16)(end - pkt)); in mDNSCoreReceive()
10600 mDNS_Unlock(m); in mDNSCoreReceive()
10606 mDNS_Lock(m); in mDNSCoreReceive()
10607 uDNS_ReceiveNATPacket(m, InterfaceID, (mDNSu8 *)msg, (mDNSu16)(end - pkt)); in mDNSCoreReceive()
10608 mDNS_Unlock(m); in mDNSCoreReceive()
10613 …else if (m->SSDPSocket && mDNSSameIPPort(dstport, m->SSDPSocket->port)) { debugf("Ignoring SSDP re… in mDNSCoreReceive()
10630 if (!m) { LogMsg("mDNSCoreReceive ERROR m is NULL"); return; } in mDNSCoreReceive()
10636 mDNS_Lock(m); in mDNSCoreReceive()
10637 m->PktNum++; in mDNSCoreReceive()
10640 m->MPktNum++; in mDNSCoreReceive()
10645 if (!mDNS_AddressIsLocalSubnet(m, InterfaceID, srcaddr) && dstaddr && in mDNSCoreReceive()
10648 m->RemoteSubnet++; in mDNSCoreReceive()
10660 uDNS_ReceiveMsg(m, msg, end, srcaddr, srcport); in mDNSCoreReceive()
10664 …if (QR_OP == StdQ) mDNSCoreReceiveQuery (m, msg, end, srcaddr, srcport, dstaddr, dstport, i… in mDNSCoreReceive()
10666 …else if (QR_OP == StdR) mDNSCoreReceiveResponse(m, msg, end, srcaddr, srcport, dstaddr, dstport, m… in mDNSCoreReceive()
10668 …else if (QR_OP == StdR) mDNSCoreReceiveResponse(m, msg, end, srcaddr, srcport, dstaddr, dstport, i… in mDNSCoreReceive()
10670 …else if (QR_OP == UpdQ) mDNSCoreReceiveUpdate (m, msg, end, srcaddr, srcport, dstaddr, dstport, I… in mDNSCoreReceive()
10671 …else if (QR_OP == UpdR) mDNSCoreReceiveUpdateR (m, msg, end, srcaddr, I… in mDNSCoreReceive()
10697 mDNS_Unlock(m); in mDNSCoreReceive()
10729 mDNSlocal DNSQuestion *FindDuplicateQuestion(const mDNS *const m, const DNSQuestion *const question) in FindDuplicateQuestion() argument
10736 for (q = m->Questions; q && (q != question); q = q->next) in FindDuplicateQuestion()
10758 mDNSlocal void UpdateQuestionDuplicates(mDNS *const m, DNSQuestion *const question) in UpdateQuestionDuplicates() argument
10775 for (q = m->Questions; q; q=q->next) // Scan our list of questions in UpdateQuestionDuplicates()
10847 SetNextQueryTime(m,q); in UpdateQuestionDuplicates()
10852 mDNSexport McastResolver *mDNS_AddMcastResolver(mDNS *const m, const domainname *d, const mDNSInter… in mDNS_AddMcastResolver() argument
10854 McastResolver **p = &m->McastResolvers; in mDNS_AddMcastResolver()
10862 mDNS_CheckLock(m); in mDNS_AddMcastResolver()
10897 mDNSinline mDNSs32 PenaltyTimeForServer(mDNS *m, DNSServer *server) in PenaltyTimeForServer() argument
10902 ptime = server->penaltyTime - m->timenow; in PenaltyTimeForServer()
10909 ptime, server->penaltyTime, m->timenow); in PenaltyTimeForServer()
10953 mDNSlocal mDNSu32 GetTimeoutForMcastQuestion(mDNS *m, DNSQuestion *question) in GetTimeoutForMcastQuestion() argument
10959 for (curr = m->McastResolvers; curr; curr = curr->next) in GetTimeoutForMcastQuestion()
11064 mDNSexport mDNSu32 SetValidDNSServers(mDNS *m, DNSQuestion *question) in SetValidDNSServers() argument
11075 for (curr = m->DNSServers; curr; curr = curr->next) in SetValidDNSServers()
11141 mDNSlocal DNSServer *GetBestServer(mDNS *m, const domainname *name, mDNSInterfaceID InterfaceID, mD… in GetBestServer() argument
11154 for (curr = m->DNSServers; curr; curr = curr->next) in GetBestServer()
11172 currPenaltyTime = PenaltyTimeForServer(m, curr); in GetBestServer()
11216 mDNSlocal DNSServer *GetServerForName(mDNS *m, const domainname *name, mDNSInterfaceID InterfaceID,… in GetServerForName() argument
11225 if (InterfaceID) ifname = InterfaceNameForID(m, InterfaceID); in GetServerForName()
11230 curmatch = GetBestServer(m, name, InterfaceID, ServiceID, allValid, mDNSNULL, mDNStrue); in GetServerForName()
11234 …mDNSVal16(curmatch->port), (curmatch->penaltyTime ? (curmatch->penaltyTime - m->timenow) : 0), ifn… in GetServerForName()
11243 mDNSexport DNSServer *GetServerForQuestion(mDNS *m, DNSQuestion *question) in GetServerForQuestion() argument
11255 ifname = InterfaceNameForID(m, InterfaceID); in GetServerForQuestion()
11259 …curmatch = GetBestServer(m, name, InterfaceID, question->ServiceID, question->validDNSServers, &cu… in GetServerForQuestion()
11269 … mDNSVal16(curmatch->port), (curmatch->penaltyTime ? (curmatch->penaltyTime - m->timenow) : 0), in GetServerForQuestion()
11285 mDNSlocal void LLQNATCallback(mDNS *m, NATTraversalInfo *n) in LLQNATCallback() argument
11288 mDNS_Lock(m); in LLQNATCallback()
11291 for (q = m->Questions; q; q=q->next) in LLQNATCallback()
11293 startLLQHandshake(m, q); // If ExternalPort is zero, will do StartLLQPolling instead in LLQNATCallback()
11294 mDNS_Unlock(m); in LLQNATCallback()
11427 mDNSlocal void CacheRecordRmvEventsForCurrentQuestion(mDNS *const m, DNSQuestion *q) in CacheRecordRmvEventsForCurrentQuestion() argument
11432 cg = CacheGroupForName(m, q->qnamehash, &q->qname); in CacheRecordRmvEventsForCurrentQuestion()
11440 …q->request_id, mDNSVal16(q->TargetQID), CRDisplayString(m, cr), q, DM_NAME_PARAM(&q->qname), DNSTy… in CacheRecordRmvEventsForCurrentQuestion()
11447 q->qname.c, CRDisplayString(m, cr), q->LOAddressAnswers); in CacheRecordRmvEventsForCurrentQuestion()
11452 AnswerCurrentQuestionWithResourceRecord(m, cr, QC_rmv); in CacheRecordRmvEventsForCurrentQuestion()
11453 … if (m->CurrentQuestion != q) break; // If callback deleted q, then we're finished here in CacheRecordRmvEventsForCurrentQuestion()
11458 mDNSlocal mDNSBool IsQuestionNew(mDNS *const m, DNSQuestion *question) in IsQuestionNew() argument
11461 for (q = m->NewQuestions; q; q = q->next) in IsQuestionNew()
11467 mDNSexport mDNSBool LocalRecordRmvEventsForQuestion(mDNS *const m, DNSQuestion *q) in LocalRecordRmvEventsForQuestion() argument
11469 mDNSlocal mDNSBool LocalRecordRmvEventsForQuestion(mDNS *const m, DNSQuestion *q) in LocalRecordRmvEventsForQuestion()
11475 if (m->CurrentQuestion) in LocalRecordRmvEventsForQuestion()
11477 m->CurrentQuestion->qname.c, DNSTypeName(m->CurrentQuestion->qtype)); in LocalRecordRmvEventsForQuestion()
11479 if (IsQuestionNew(m, q)) in LocalRecordRmvEventsForQuestion()
11484 m->CurrentQuestion = q; in LocalRecordRmvEventsForQuestion()
11485 ag = AuthGroupForName(&m->rrauth, q->qnamehash, &q->qname); in LocalRecordRmvEventsForQuestion()
11493 ARDisplayString(m, rr)); in LocalRecordRmvEventsForQuestion()
11501 … AnswerLocalQuestionWithLocalAuthRecord(m, rr, QC_rmv); // MUST NOT dereference q again in LocalRecordRmvEventsForQuestion()
11502 if (m->CurrentQuestion != q) { m->CurrentQuestion = mDNSNULL; return mDNSfalse; } in LocalRecordRmvEventsForQuestion()
11505 m->CurrentQuestion = mDNSNULL; in LocalRecordRmvEventsForQuestion()
11511 mDNSexport mDNSBool CacheRecordRmvEventsForQuestion(mDNS *const m, DNSQuestion *q) in CacheRecordRmvEventsForQuestion() argument
11513 if (m->CurrentQuestion) in CacheRecordRmvEventsForQuestion()
11515 m->CurrentQuestion->qname.c, DNSTypeName(m->CurrentQuestion->qtype)); in CacheRecordRmvEventsForQuestion()
11519 if (!IsQuestionNew(m, q) && !q->LOAddressAnswers) in CacheRecordRmvEventsForQuestion()
11521 m->CurrentQuestion = q; in CacheRecordRmvEventsForQuestion()
11522 CacheRecordRmvEventsForCurrentQuestion(m, q); in CacheRecordRmvEventsForQuestion()
11523 if (m->CurrentQuestion != q) { m->CurrentQuestion = mDNSNULL; return mDNSfalse; } in CacheRecordRmvEventsForQuestion()
11524 m->CurrentQuestion = mDNSNULL; in CacheRecordRmvEventsForQuestion()
11530 mDNSlocal void SuppressStatusChanged(mDNS *const m, DNSQuestion *q, DNSQuestion **restart) in SuppressStatusChanged() argument
11538 if (!CacheRecordRmvEventsForQuestion(m, q)) in SuppressStatusChanged()
11552 if (!LocalRecordRmvEventsForQuestion(m, q)) in SuppressStatusChanged()
11590 mDNS_StopQuery_internal(m, q); in SuppressStatusChanged()
11596 mDNSexport void CheckSuppressUnusableQuestions(mDNS *const m) in CheckSuppressUnusableQuestions() argument
11612 if (m->RestartQuestion) in CheckSuppressUnusableQuestions()
11614 m->RestartQuestion->qname.c, DNSTypeName(m->RestartQuestion->qtype)); in CheckSuppressUnusableQuestions()
11615 m->RestartQuestion = m->Questions; in CheckSuppressUnusableQuestions()
11616 while (m->RestartQuestion) in CheckSuppressUnusableQuestions()
11618 q = m->RestartQuestion; in CheckSuppressUnusableQuestions()
11619 m->RestartQuestion = q->next; in CheckSuppressUnusableQuestions()
11629 SuppressStatusChanged(m, q, &restart); in CheckSuppressUnusableQuestions()
11639 mDNS_StartQuery_internal(m, q); in CheckSuppressUnusableQuestions()
11644 mDNSlocal void RestartUnicastQuestions(mDNS *const m) in RestartUnicastQuestions() argument
11649 if (m->RestartQuestion) in RestartUnicastQuestions()
11651 m->RestartQuestion->qname.c, DNSTypeName(m->RestartQuestion->qtype)); in RestartUnicastQuestions()
11652 m->RestartQuestion = m->Questions; in RestartUnicastQuestions()
11653 while (m->RestartQuestion) in RestartUnicastQuestions()
11655 q = m->RestartQuestion; in RestartUnicastQuestions()
11656 m->RestartQuestion = q->next; in RestartUnicastQuestions()
11663 SuppressStatusChanged(m, q, &restartList); in RestartUnicastQuestions()
11673 mDNS_StartQuery_internal(m, q); in RestartUnicastQuestions()
11680 mDNSlocal mStatus ValidateParameters(mDNS *const m, DNSQuestion *const question) in ValidateParameters() argument
11691 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, question->InterfaceID); in ValidateParameters()
11702 mDNSlocal void InitDNSConfig(mDNS *const m, DNSQuestion *const question) in InitDNSConfig() argument
11728 mDNSu32 timeout = SetValidDNSServers(m, question); in InitDNSConfig()
11736 question->StopTime = NonZeroTime(m->timenow + timeout * mDNSPlatformOneSecond); in InitDNSConfig()
11745 question->qDNSServer = GetServerForQuestion(m, question); in InitDNSConfig()
11758 DEFAULT_LO_OR_P2P_TIMEOUT : GetTimeoutForMcastQuestion(m, question); in InitDNSConfig()
11759 question->StopTime = NonZeroTime(m->timenow + timeout * mDNSPlatformOneSecond); in InitDNSConfig()
11766 SetNextQueryStopTime(m, question); in InitDNSConfig()
11770 SetNextQueryTime(m,question); in InitDNSConfig()
11775 mDNSlocal void InitCommonState(mDNS *const m, DNSQuestion *const question) in InitCommonState() argument
11794 … = mDNSOpaque16IsZero(question->TargetQID) ? CheckForSoonToExpireRecords(m, &question->qname, q… in InitCommonState()
11795 question->LastQTime = m->timenow; in InitCommonState()
11797 question->LastAnswerPktNum = m->PktNum; in InitCommonState()
11852 InitDNSConfig(m, question); in InitCommonState()
11853 question->AuthInfo = GetAuthInfoForQuestion(m, question); in InitCommonState()
11870 question->LastQTxTime = m->timenow; in InitCommonState()
11887 question->qname.c, DNSTypeName(question->qtype), question->InterfaceID, m->timenow, in InitCommonState()
11888 NextQSendTime(question) - m->timenow, in InitCommonState()
11889 question->DelayAnswering ? question->DelayAnswering - m->timenow : 0, in InitCommonState()
11894 … question->DelayAnswering - m->timenow, question->qname.c, DNSTypeName(question->qtype)); in InitCommonState()
11917 mDNSlocal void InitLLQNATState(mDNS *const m) in InitLLQNATState() argument
11920 if (!m->LLQNAT.clientCallback) in InitLLQNATState()
11922 m->LLQNAT.Protocol = NATOp_MapUDP; in InitLLQNATState()
11923 m->LLQNAT.IntPort = m->UnicastPort4; in InitLLQNATState()
11924 m->LLQNAT.RequestedPort = m->UnicastPort4; in InitLLQNATState()
11925 m->LLQNAT.clientCallback = LLQNATCallback; in InitLLQNATState()
11926 m->LLQNAT.clientContext = (void*)1; // Means LLQ NAT Traversal just started in InitLLQNATState()
11927 mDNS_StartNATOperation_internal(m, &m->LLQNAT); in InitLLQNATState()
11942 mDNSlocal void InitDNSSECProxyState(mDNS *const m, DNSQuestion *const question) in InitDNSSECProxyState() argument
11944 (void) m; in InitDNSSECProxyState()
11951 mDNSlocal void FinalizeUnicastQuestion(mDNS *const m, DNSQuestion *question) in FinalizeUnicastQuestion() argument
11989 ActivateUnicastQuery(m, question, mDNSfalse); in FinalizeUnicastQuestion()
11998 InitLLQNATState(m); in FinalizeUnicastQuestion()
12002 mDNSexport mStatus mDNS_StartQuery_internal(mDNS *const m, DNSQuestion *const question) in mDNS_StartQuery_internal() argument
12008 if (m->rrcache_size == 0) in mDNS_StartQuery_internal()
12011 vStatus = ValidateParameters(m, question); in mDNS_StartQuery_internal()
12029 question->TargetQID = Question_uDNS(question) ? mDNS_NewMessageID(m) : zeroID; in mDNS_StartQuery_internal()
12036 q = &m->Questions; in mDNS_StartQuery_internal()
12038 q = &m->LocalOnlyQuestions; in mDNS_StartQuery_internal()
12055 InitCommonState(m, question); in mDNS_StartQuery_internal()
12058 InitDNSSECProxyState(m, question); in mDNS_StartQuery_internal()
12063 question->DuplicateOf = FindDuplicateQuestion(m, question); in mDNS_StartQuery_internal()
12069 if (!m->NewLocalOnlyQuestions) in mDNS_StartQuery_internal()
12070 m->NewLocalOnlyQuestions = question; in mDNS_StartQuery_internal()
12074 if (!m->NewQuestions) in mDNS_StartQuery_internal()
12075 m->NewQuestions = question; in mDNS_StartQuery_internal()
12085 FinalizeUnicastQuestion(m, question); in mDNS_StartQuery_internal()
12090 m->NumAllInterfaceQuestions++; in mDNS_StartQuery_internal()
12093m->NumAllInterfaceRecords, m->NumAllInterfaceQuestions, DM_NAME_PARAM(&question->qname), DNSTypeNa… in mDNS_StartQuery_internal()
12094 if (m->NumAllInterfaceRecords + m->NumAllInterfaceQuestions == 1) in mDNS_StartQuery_internal()
12096 m->NextBonjourDisableTime = 0; in mDNS_StartQuery_internal()
12097 if (m->BonjourEnabled == 0) in mDNS_StartQuery_internal()
12101 m->BonjourEnabled = 1; in mDNS_StartQuery_internal()
12102 m->NetworkChanged = m->timenow; in mDNS_StartQuery_internal()
12109 mDNS_PurgeBeforeResolve(m, question); in mDNS_StartQuery_internal()
12118 mDNSexport void CancelGetZoneData(mDNS *const m, ZoneData *nta) in CancelGetZoneData() argument
12126 mDNS_StopQuery_internal(m, &nta->question); in CancelGetZoneData()
12133 mDNSexport mStatus mDNS_StopQuery_internal(mDNS *const m, DNSQuestion *const question) in mDNS_StopQuery_internal() argument
12135 CacheGroup *cg = CacheGroupForName(m, question->qnamehash, &question->qname); in mDNS_StopQuery_internal()
12137 DNSQuestion **qp = &m->Questions; in mDNS_StopQuery_internal()
12142 qp = &m->LocalOnlyQuestions; in mDNS_StopQuery_internal()
12157 if (m->NumAllInterfaceRecords + m->NumAllInterfaceQuestions == 1) in mDNS_StopQuery_internal()
12158m->NextBonjourDisableTime = NonZeroTime(m->timenow + (BONJOUR_DISABLE_DELAY * mDNSPlatformOneSecon… in mDNS_StopQuery_internal()
12159 m->NumAllInterfaceQuestions--; in mDNS_StopQuery_internal()
12162m->NumAllInterfaceRecords, m->NumAllInterfaceQuestions, DM_NAME_PARAM(&question->qname), DNSTypeNa… in mDNS_StopQuery_internal()
12188 … durationMs = ((m->timenow - question->metrics.firstQueryTime) * 1000) / mDNSPlatformOneSecond; in mDNS_StopQuery_internal()
12195 UpdateQuestionDuplicates(m, question); in mDNS_StopQuery_internal()
12211 for (q = m->Questions; q && (q != m->NewQuestions); q = q->next) in mDNS_StopQuery_internal()
12228 …"CurrentAnswers %d, Suppressed %d", replacement, CRDisplayString(m,cr), question->CurrentAnswers, … in mDNS_StopQuery_internal()
12230 … if (!replacement) m->rrcache_active--; // If no longer active, decrement rrcache_active count in mDNS_StopQuery_internal()
12236 if (m->CurrentQuestion == question) in mDNS_StopQuery_internal()
12240 m->CurrentQuestion = question->next; in mDNS_StopQuery_internal()
12243 if (m->NewQuestions == question) in mDNS_StopQuery_internal()
12247 m->NewQuestions = question->next; in mDNS_StopQuery_internal()
12250 if (m->NewLocalOnlyQuestions == question) m->NewLocalOnlyQuestions = question->next; in mDNS_StopQuery_internal()
12252 if (m->RestartQuestion == question) in mDNS_StopQuery_internal()
12256 m->RestartQuestion = question->next; in mDNS_StopQuery_internal()
12278 for (q = m->Questions; q; q=q->next) in mDNS_StopQuery_internal()
12282 if (!m->LLQNAT.clientCallback) // Should never happen, but just in case... in mDNS_StopQuery_internal()
12289 mDNS_StopNATOperation_internal(m, &m->LLQNAT); in mDNS_StopQuery_internal()
12290 m->LLQNAT.clientCallback = mDNSNULL; // Means LLQ NAT Traversal not running in mDNS_StopQuery_internal()
12298 sendLLQRefresh(m, question); in mDNS_StopQuery_internal()
12312 UnSubscribeToDNSPushNotificationServer(m, question); in mDNS_StopQuery_internal()
12317 if (question->nta) { CancelGetZoneData(m, question->nta); question->nta = mDNSNULL; } in mDNS_StopQuery_internal()
12330 mDNSexport mStatus mDNS_StartQuery(mDNS *const m, DNSQuestion *const question) in mDNS_StartQuery() argument
12333 mDNS_Lock(m); in mDNS_StartQuery()
12334 status = mDNS_StartQuery_internal(m, question); in mDNS_StartQuery()
12335 mDNS_Unlock(m); in mDNS_StartQuery()
12339 mDNSexport mStatus mDNS_StopQuery(mDNS *const m, DNSQuestion *const question) in mDNS_StopQuery() argument
12342 mDNS_Lock(m); in mDNS_StopQuery()
12343 status = mDNS_StopQuery_internal(m, question); in mDNS_StopQuery()
12344 mDNS_Unlock(m); in mDNS_StopQuery()
12352 mDNSexport mStatus mDNS_StopQueryWithRemoves(mDNS *const m, DNSQuestion *const question) in mDNS_StopQueryWithRemoves() argument
12356 mDNS_Lock(m); in mDNS_StopQueryWithRemoves()
12359 for (qq = m->NewQuestions; qq; qq=qq->next) if (qq == question) break; in mDNS_StopQueryWithRemoves()
12361 status = mDNS_StopQuery_internal(m, question); in mDNS_StopQueryWithRemoves()
12365 CacheGroup *const cg = CacheGroupForName(m, question->qnamehash, &question->qname); in mDNS_StopQueryWithRemoves()
12373 question->QuestionCallback(m, question, &cr->resrec, QC_rmv); in mDNS_StopQueryWithRemoves()
12377 mDNS_Unlock(m); in mDNS_StopQueryWithRemoves()
12381 mDNSexport mStatus mDNS_Reconfirm(mDNS *const m, CacheRecord *const cr) in mDNS_Reconfirm() argument
12384 mDNS_Lock(m); in mDNS_Reconfirm()
12385 status = mDNS_Reconfirm_internal(m, cr, kDefaultReconfirmTimeForNoAnswer); in mDNS_Reconfirm()
12386 …if (status == mStatus_NoError) ReconfirmAntecedents(m, cr->resrec.name, cr->resrec.namehash, cr->r… in mDNS_Reconfirm()
12387 mDNS_Unlock(m); in mDNS_Reconfirm()
12391 mDNSexport mStatus mDNS_ReconfirmByValue(mDNS *const m, ResourceRecord *const rr) in mDNS_ReconfirmByValue() argument
12395 mDNS_Lock(m); in mDNS_ReconfirmByValue()
12396 cr = FindIdenticalRecordInCache(m, rr); in mDNS_ReconfirmByValue()
12397 debugf("mDNS_ReconfirmByValue: %p %s", cr, RRDisplayString(m, rr)); in mDNS_ReconfirmByValue()
12398 if (cr) status = mDNS_Reconfirm_internal(m, cr, kDefaultReconfirmTimeForNoAnswer); in mDNS_ReconfirmByValue()
12399 …if (status == mStatus_NoError) ReconfirmAntecedents(m, cr->resrec.name, cr->resrec.namehash, cr->r… in mDNS_ReconfirmByValue()
12400 mDNS_Unlock(m); in mDNS_ReconfirmByValue()
12404 mDNSlocal mStatus mDNS_StartBrowse_internal(mDNS *const m, DNSQuestion *const question, in mDNS_StartBrowse_internal() argument
12430 return(mDNS_StartQuery_internal(m, question)); in mDNS_StartBrowse_internal()
12433 mDNSexport mStatus mDNS_StartBrowse(mDNS *const m, DNSQuestion *const question, in mDNS_StartBrowse() argument
12440 mDNS_Lock(m); in mDNS_StartBrowse()
12441 …status = mDNS_StartBrowse_internal(m, question, srv, domain, InterfaceID, flags, ForceMCast, useBa… in mDNS_StartBrowse()
12442 mDNS_Unlock(m); in mDNS_StartBrowse()
12447 mDNSexport mStatus mDNS_GetDomains(mDNS *const m, DNSQuestion *const question, mDNS_DomainType Doma… in mDNS_GetDomains() argument
12472 return(mDNS_StartQuery(m, question)); in mDNS_GetDomains()
12481 mDNSexport mStatus mDNS_Register(mDNS *const m, AuthRecord *const rr) in mDNS_Register() argument
12484 mDNS_Lock(m); in mDNS_Register()
12485 status = mDNS_Register_internal(m, rr); in mDNS_Register()
12486 mDNS_Unlock(m); in mDNS_Register()
12490 mDNSexport mStatus mDNS_Update(mDNS *const m, AuthRecord *const rr, mDNSu32 newttl, in mDNS_Update() argument
12495 …e record with invalid rdata: %s", GetRRDisplayString_rdb(&rr->resrec, &newrdata->u, m->MsgBuffer)); in mDNS_Update()
12499 mDNS_Lock(m); in mDNS_Update()
12510 …rr->UpdateCallback(m, rr, n, rr->newrdlength); // ...and let the client free this memory, if nece… in mDNS_Update()
12520 mStatus status = uDNS_UpdateRecord(m, rr); in mDNS_Update()
12523 mDNS_Unlock(m); in mDNS_Update()
12530 CompleteRDataUpdate(m, rr); in mDNS_Update()
12534 InitializeLastAPTime(m, rr); in mDNS_Update()
12535 … while (rr->NextUpdateCredit && m->timenow - rr->NextUpdateCredit >= 0) GrantUpdateCredit(rr); in mDNS_Update()
12537 …if (!rr->NextUpdateCredit) rr->NextUpdateCredit = NonZeroTime(m->timenow + kUpdateCreditRefreshInt… in mDNS_Update()
12542 …if (!rr->UpdateBlocked) rr->UpdateBlocked = NonZeroTime(m->timenow + (mDNSs32)delay * mDNSPlatform… in mDNS_Update()
12551 mDNS_Unlock(m); in mDNS_Update()
12558 mDNSexport mStatus mDNS_Deregister(mDNS *const m, AuthRecord *const rr) in mDNS_Deregister() argument
12561 mDNS_Lock(m); in mDNS_Deregister()
12562 status = mDNS_Deregister_internal(m, rr, mDNS_Dereg_normal); in mDNS_Deregister()
12563 mDNS_Unlock(m); 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);
12583 mDNSlocal AuthRecord *GetFirstAddressRecordEx(const mDNS *const m, const mDNSBool forRandHostname) in GetFirstAddressRecordEx() argument
12586 for (intf = m->HostInterfaces; intf; intf = intf->next) in GetFirstAddressRecordEx()
12601 mDNSlocal void AdvertiseInterface(mDNS *const m, NetworkInterfaceInfo *set, mDNSBool useRandomizedH… in AdvertiseInterface() argument
12603 mDNSlocal void AdvertiseInterface(mDNS *const m, NetworkInterfaceInfo *set) in AdvertiseInterface()
12619 hostname = &m->RandomizedHostname; in AdvertiseInterface()
12625 hostname = &m->MulticastHostname; in AdvertiseInterface()
12645 if (hostname == &m->RandomizedHostname) addrRecordType = kDNSRecordTypeKnownUnique; in AdvertiseInterface()
12648 (hostname == &m->RandomizedHostname) ? "randomized" : "normal", set->ifname); in AdvertiseInterface()
12696 addrAR->RRSet = interfaceIsAWDL ? addrAR : GetFirstAddressRecordEx(m, useRandomizedHostname); in AdvertiseInterface()
12698 addrAR->RRSet = GetFirstAddressRecord(m); in AdvertiseInterface()
12701 mDNS_Register_internal(m, addrAR); in AdvertiseInterface()
12702 …_LOG_CATEGORY_DEFAULT, MDNS_LOG_DEBUG, "Initialized RRSet for " PRI_S, ARDisplayString(m, addrAR)); in AdvertiseInterface()
12703 …TEGORY_DEFAULT, MDNS_LOG_DEBUG, "RRSet: " PRI_S, ARDisplayString(m, addrAR->RRSet)); in AdvertiseInterface()
12704 if (ptrAR) mDNS_Register_internal(m, ptrAR); in AdvertiseInterface()
12712 mDNSlocal void AdvertiseInterfaceIfNeeded(mDNS *const m, NetworkInterfaceInfo *set) in AdvertiseInterfaceIfNeeded() argument
12717 if ((m->AutoTargetAWDLIncludedCount > 0) || (m->AutoTargetAWDLOnlyCount > 0)) in AdvertiseInterfaceIfNeeded()
12719 AdvertiseInterface(m, set, mDNSfalse); in AdvertiseInterfaceIfNeeded()
12724 if (m->AutoTargetServices > 0) AdvertiseInterface(m, set, mDNSfalse); in AdvertiseInterfaceIfNeeded()
12725 if (m->AutoTargetAWDLIncludedCount > 0) AdvertiseInterface(m, set, mDNStrue); in AdvertiseInterfaceIfNeeded()
12728 if (m->AutoTargetServices > 0) AdvertiseInterface(m, set); in AdvertiseInterfaceIfNeeded()
12732 mDNSlocal void DeadvertiseInterface(mDNS *const m, NetworkInterfaceInfo *set, DeadvertiseFlags flag… in DeadvertiseInterface() argument
12756 … if (set->RR_A.resrec.RecordType) mDNS_Deregister_internal(m, &set->RR_A, mDNS_Dereg_normal); in DeadvertiseInterface()
12757 … if (set->RR_PTR.resrec.RecordType) mDNS_Deregister_internal(m, &set->RR_PTR, mDNS_Dereg_normal); in DeadvertiseInterface()
12765 if (ar->resrec.RecordType) mDNS_Deregister_internal(m, ar, mDNS_Dereg_normal); in DeadvertiseInterface()
12771 mDNSlocal void UpdateTargetHostName(mDNS *const m, AuthRecord *const rr) in UpdateTargetHostName() argument
12779 SetTargetToHostName(m, rr); in UpdateTargetHostName()
12787 mDNSlocal void DeadvertiseAllInterfaceRecords(mDNS *const m, DeadvertiseFlags flags) in DeadvertiseAllInterfaceRecords() argument
12790 for (intf = m->HostInterfaces; intf; intf = intf->next) in DeadvertiseAllInterfaceRecords()
12792 if (intf->Advertise) DeadvertiseInterface(m, intf, flags); in DeadvertiseAllInterfaceRecords()
12796 mDNSexport void mDNS_SetFQDN(mDNS *const m) in mDNS_SetFQDN() argument
12802 …if (!AppendDomainLabel(&newmname, &m->hostlabel)) { LogMsg("ERROR: mDNS_SetFQDN: Cannot create Mu… in mDNS_SetFQDN()
12805 mDNS_Lock(m); in mDNS_SetFQDN()
12807 …if (SameDomainNameCS(&m->MulticastHostname, &newmname)) debugf("mDNS_SetFQDN - hostname unchanged"… in mDNS_SetFQDN()
12810 AssignDomainName(&m->MulticastHostname, &newmname); in mDNS_SetFQDN()
12811 DeadvertiseAllInterfaceRecords(m, kDeadvertiseFlag_NormalHostname); in mDNS_SetFQDN()
12812 AdvertiseNecessaryInterfaceRecords(m); in mDNS_SetFQDN()
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()
12819 mDNS_Unlock(m); in mDNS_SetFQDN()
12822 mDNSlocal void mDNS_HostNameCallback(mDNS *const m, AuthRecord *const rr, mStatus result) in mDNS_HostNameCallback() argument
12838 if (m->MainCallback) in mDNS_HostNameCallback()
12839 m->MainCallback(m, mStatus_NoError); in mDNS_HostNameCallback()
12843 domainlabel oldlabel = m->hostlabel; in mDNS_HostNameCallback()
12846 if (m->MainCallback) in mDNS_HostNameCallback()
12847 m->MainCallback(m, mStatus_NameConflict); in mDNS_HostNameCallback()
12852 if (SameDomainLabel(m->hostlabel.c, oldlabel.c)) in mDNS_HostNameCallback()
12853 IncrementLabelSuffix(&m->hostlabel, mDNSfalse); in mDNS_HostNameCallback()
12857 mDNS_SetFQDN(m); in mDNS_HostNameCallback()
12858 …LogMsg("Local Hostname %#s.local already in use; will try %#s.local instead", oldlabel.c, m->hostl… in mDNS_HostNameCallback()
12871 mDNSlocal void mDNS_RandomizedHostNameCallback(mDNS *const m, AuthRecord *const addrRecord, const m… in mDNS_RandomizedHostNameCallback() argument
12881 if (SameDomainLabel(newUUIDLabel.c, m->RandomizedHostname.c)) in mDNS_RandomizedHostNameCallback()
12886 mDNS_Lock(m); in mDNS_RandomizedHostNameCallback()
12888 m->RandomizedHostname.c[0] = 0; in mDNS_RandomizedHostNameCallback()
12889 AppendDomainLabel(&m->RandomizedHostname, &newUUIDLabel); in mDNS_RandomizedHostNameCallback()
12890 AppendLiteralLabelString(&m->RandomizedHostname, "local"); in mDNS_RandomizedHostNameCallback()
12892 DeadvertiseAllInterfaceRecords(m, kDeadvertiseFlag_RandHostname); in mDNS_RandomizedHostNameCallback()
12893 AdvertiseNecessaryInterfaceRecords(m); in mDNS_RandomizedHostNameCallback()
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()
12903 mDNS_Unlock(m); in mDNS_RandomizedHostNameCallback()
12908 mDNSlocal void UpdateInterfaceProtocols(mDNS *const m, NetworkInterfaceInfo *active) in UpdateInterfaceProtocols() argument
12913 for (intf = m->HostInterfaces; intf; intf = intf->next) in UpdateInterfaceProtocols()
12921 mDNSlocal void RestartRecordGetZoneData(mDNS * const m) in RestartRecordGetZoneData() argument
12925 for (rr = m->ResourceRecords; rr; rr=rr->next) in RestartRecordGetZoneData()
12931 if (rr->nta) { rr->updateid = zeroID; CancelGetZoneData(m, rr->nta); } in RestartRecordGetZoneData()
12932 …rr->nta = StartGetZoneData(m, rr->resrec.name, ZoneServiceUpdate, RecordRegistrationGotZoneData, r… in RestartRecordGetZoneData()
12936 mDNSlocal void InitializeNetWakeState(mDNS *const m, NetworkInterfaceInfo *set) in InitializeNetWakeState() argument
12952 set->NextSPSAttemptTime = m->timenow; in InitializeNetWakeState()
12955 mDNSexport void mDNS_ActivateNetWake_internal(mDNS *const m, NetworkInterfaceInfo *set) in mDNS_ActivateNetWake_internal() argument
12957 NetworkInterfaceInfo *p = m->HostInterfaces; in mDNS_ActivateNetWake_internal()
12964 …S_StartBrowse_internal(m, &set->NetWakeBrowse, &SleepProxyServiceType, &localdomain, set->Interfac… in mDNS_ActivateNetWake_internal()
12968 mDNSexport void mDNS_DeactivateNetWake_internal(mDNS *const m, NetworkInterfaceInfo *set) in mDNS_DeactivateNetWake_internal() argument
12970 NetworkInterfaceInfo *p = m->HostInterfaces; in mDNS_DeactivateNetWake_internal()
12984 mDNS_StopQuery_internal(m, &set->NetWakeBrowse); in mDNS_DeactivateNetWake_internal()
12985 …i++) if (set->NetWakeResolve[i].ThisQInterval >= 0) mDNS_StopQuery_internal(m, &set->NetWakeResolv… in mDNS_DeactivateNetWake_internal()
12988 if (m->SPSBrowseCallback) in mDNS_DeactivateNetWake_internal()
12991 m->SPSBrowseCallback(m, &set->NetWakeBrowse, mDNSNULL, QC_rmv); in mDNS_DeactivateNetWake_internal()
12997 InitializeNetWakeState(m, set); in mDNS_DeactivateNetWake_internal()
13001 mDNSexport mStatus mDNS_RegisterInterface(mDNS *const m, NetworkInterfaceInfo *set, InterfaceActiva… in mDNS_RegisterInterface() argument
13005 NetworkInterfaceInfo **p = &m->HostInterfaces; in mDNS_RegisterInterface()
13022 mDNS_Lock(m); in mDNS_RegisterInterface()
13029 InitializeNetWakeState(m, set); in mDNS_RegisterInterface()
13039 mDNS_Unlock(m); in mDNS_RegisterInterface()
13058 if (set->Advertise) AdvertiseInterfaceIfNeeded(m, set); in mDNS_RegisterInterface()
13073 if (set->NetWake) mDNS_ActivateNetWake_internal(m, set); in mDNS_RegisterInterface()
13108 m->mDNSStats.InterfaceUpFlap++; in mDNS_RegisterInterface()
13126 m->SuppressSending = 0; in mDNS_RegisterInterface()
13127 m->SuppressProbes = 0; in mDNS_RegisterInterface()
13141 …if (!m->SuppressSending) m->SuppressSending = m->timenow + (mDNSs32)mDNSRandom((mDNSu32)InitialQue… in mDNS_RegisterInterface()
13143 if (m->SuppressProbes == 0 || in mDNS_RegisterInterface()
13144 m->SuppressProbes - NonZeroTime(m->timenow + probedelay) < 0) in mDNS_RegisterInterface()
13145 m->SuppressProbes = NonZeroTime(m->timenow + probedelay); in mDNS_RegisterInterface()
13152 m->AnnounceOwner = NonZeroTime(m->timenow + 60 * mDNSPlatformOneSecond); in mDNS_RegisterInterface()
13155 m->mDNSStats.InterfaceUp++; in mDNS_RegisterInterface()
13156 … for (q = m->Questions; q; q=q->next) // Scan our list of questions in mDNS_RegisterInterface()
13183 q->LastQTime = m->timenow - q->ThisQInterval + qdelay; in mDNS_RegisterInterface()
13185 SetNextQueryTime(m,q); in mDNS_RegisterInterface()
13192 for (rr = m->ResourceRecords; rr; rr=rr->next) in mDNS_RegisterInterface()
13196 mDNSCoreRestartRegistration(m, rr, numannounce); in mDNS_RegisterInterface()
13201 RestartRecordGetZoneData(m); in mDNS_RegisterInterface()
13203 mDNS_UpdateAllowSleep(m); in mDNS_RegisterInterface()
13205 mDNS_Unlock(m); in mDNS_RegisterInterface()
13209 mDNSlocal void AdjustAddressRecordSetsEx(mDNS *const m, NetworkInterfaceInfo *removedIntf, mDNSBool… in AdjustAddressRecordSetsEx() argument
13218 newAR = GetFirstAddressRecordEx(m, forRandHostname); in AdjustAddressRecordSetsEx()
13219 for (intf = m->HostInterfaces; intf; intf = intf->next) in AdjustAddressRecordSetsEx()
13229 …act(MDNS_LOG_CATEGORY_DEFAULT, MDNS_LOG_DEBUG, "Changed RRSet for " PRI_S, ARDisplayString(m, ar)); in AdjustAddressRecordSetsEx()
13230 …S_LOG_CATEGORY_DEFAULT, MDNS_LOG_DEBUG, "New RRSet: " PRI_S, ARDisplayString(m, ar->RRSet)); in AdjustAddressRecordSetsEx()
13242 mDNSexport void mDNS_DeregisterInterface(mDNS *const m, NetworkInterfaceInfo *set, InterfaceActivat… in mDNS_DeregisterInterface() argument
13247 NetworkInterfaceInfo **p = &m->HostInterfaces; in mDNS_DeregisterInterface()
13251 mDNS_Lock(m); in mDNS_DeregisterInterface()
13258 mDNS_Unlock(m); in mDNS_DeregisterInterface()
13262 mDNS_DeactivateNetWake_internal(m, set); in mDNS_DeregisterInterface()
13271 for (intf = m->HostInterfaces; intf; intf = intf->next) in mDNS_DeregisterInterface()
13273 UpdateInterfaceProtocols(m, intf); in mDNS_DeregisterInterface()
13277 intf = FirstInterfaceForID(m, set->InterfaceID); in mDNS_DeregisterInterface()
13290 UpdateInterfaceProtocols(m, intf); in mDNS_DeregisterInterface()
13292 if (intf->NetWake) mDNS_ActivateNetWake_internal(m, intf); in mDNS_DeregisterInterface()
13296 for (intf = m->HostInterfaces; intf; intf = intf->next) in mDNS_DeregisterInterface()
13318 m->mDNSStats.InterfaceDown++; in mDNS_DeregisterInterface()
13326 m->mDNSStats.InterfaceDownFlap++; in mDNS_DeregisterInterface()
13332 for (q = m->Questions; q; q=q->next) in mDNS_DeregisterInterface()
13358 mDNS_Reconfirm_internal(m, rr, kDefaultReconfirmTimeForFlappingInterface); in mDNS_DeregisterInterface()
13386 mDNS_PurgeCacheResourceRecord(m, rr); in mDNS_DeregisterInterface()
13399 AdjustAddressRecordSets(m, set); in mDNS_DeregisterInterface()
13401 AdjustAddressRecordSetsForRandHostname(m, set); in mDNS_DeregisterInterface()
13405 if (set->Advertise) DeadvertiseInterface(m, set, kDeadvertiseFlag_All); in mDNS_DeregisterInterface()
13411 if (revalidate && !m->ShutdownTime) in mDNS_DeregisterInterface()
13418 mDNS_Reconfirm_internal(m, rr, kDefaultReconfirmTimeForFlappingInterface); in mDNS_DeregisterInterface()
13421 mDNS_UpdateAllowSleep(m); in mDNS_DeregisterInterface()
13423 mDNS_Unlock(m); in mDNS_DeregisterInterface()
13426 mDNSlocal void ServiceCallback(mDNS *const m, AuthRecord *const rr, mStatus result) in ServiceCallback() argument
13429 (void)m; // Unused parameter in ServiceCallback()
13448 mDNS_DeregisterService(m, sr); // Unlink the records from our list in ServiceCallback()
13482 sr->ServiceCallback(m, sr, result); in ServiceCallback()
13485 mDNSlocal void NSSCallback(mDNS *const m, AuthRecord *const rr, mStatus result) in NSSCallback() argument
13489 sr->ServiceCallback(m, sr, result); in NSSCallback()
13524 mDNSexport mStatus mDNS_RegisterService(mDNS *const m, ServiceRecordSet *sr, in mDNS_RegisterService() argument
13561 …return(mDNS_RegisterNoSuchService(m, &sr->RR_SRV, name, type, domain, mDNSNULL, InterfaceID, NSSCa… in mDNS_RegisterService()
13624 mDNS_Lock(m); in mDNS_RegisterService()
13628 err = mDNS_Register_internal(m, &sr->RR_SRV); in mDNS_RegisterService()
13634 mDNS_Unlock(m); in mDNS_RegisterService()
13637 if (!err) err = mDNS_Register_internal(m, &sr->RR_TXT); in mDNS_RegisterService()
13643 if (!err) err = mDNS_Register_internal(m, &sr->RR_ADV); in mDNS_RegisterService()
13644 for (i=0; i<NumSubTypes; i++) if (!err) err = mDNS_Register_internal(m, &sr->SubTypes[i]); in mDNS_RegisterService()
13645 if (!err) err = mDNS_Register_internal(m, &sr->RR_PTR); in mDNS_RegisterService()
13647 mDNS_Unlock(m); in mDNS_RegisterService()
13649 if (err) mDNS_DeregisterService(m, sr); in mDNS_RegisterService()
13653 mDNSexport mStatus mDNS_AddRecordToService(mDNS *const m, ServiceRecordSet *sr, in mDNS_AddRecordToService() argument
13669 mDNS_Lock(m); in mDNS_AddRecordToService()
13697 extra->r.resrec.rroriginalttl, rr->rroriginalttl, RRDisplayString(m, &extra->r.resrec)); in mDNS_AddRecordToService()
13709 status = mDNS_Register_internal(m, &extra->r); in mDNS_AddRecordToService()
13712 mDNS_Unlock(m); in mDNS_AddRecordToService()
13716 mDNSexport mStatus mDNS_RemoveRecordFromService(mDNS *const m, ServiceRecordSet *sr, ExtraResourceR… in mDNS_RemoveRecordFromService() argument
13722 mDNS_Lock(m); in mDNS_RemoveRecordFromService()
13736 status = mDNS_Deregister_internal(m, &extra->r, mDNS_Dereg_normal); in mDNS_RemoveRecordFromService()
13738 mDNS_Unlock(m); in mDNS_RemoveRecordFromService()
13742 mDNSexport mStatus mDNS_RenameAndReregisterService(mDNS *const m, ServiceRecordSet *const sr, const… in mDNS_RenameAndReregisterService() argument
13766 if (sr->RR_TXT.NewRData) CompleteRDataUpdate(m, &sr->RR_TXT); in mDNS_RenameAndReregisterService()
13767 err = mDNS_RegisterService(m, sr, newname, &type, &domain, in mDNS_RenameAndReregisterService()
13781 err = mDNS_AddRecordToService(m, sr, e, e->r.resrec.rdata, e->r.resrec.rroriginalttl, 0); in mDNS_RenameAndReregisterService()
13790 mDNSexport mStatus mDNS_DeregisterService_drt(mDNS *const m, ServiceRecordSet *sr, mDNS_Dereg_type … in mDNS_DeregisterService_drt() argument
13793 …tIsZero(sr->RR_SRV.resrec.rdata->u.srv.port)) return(mDNS_DeregisterNoSuchService(m, &sr->RR_SRV)); in mDNS_DeregisterService_drt()
13822 mDNS_Lock(m); in mDNS_DeregisterService_drt()
13827 mDNS_Deregister_internal(m, &sr->RR_SRV, mDNS_Dereg_repeat); in mDNS_DeregisterService_drt()
13828 mDNS_Deregister_internal(m, &sr->RR_TXT, mDNS_Dereg_repeat); in mDNS_DeregisterService_drt()
13829 mDNS_Deregister_internal(m, &sr->RR_ADV, drt); in mDNS_DeregisterService_drt()
13835 mDNS_Deregister_internal(m, &e->r, mDNS_Dereg_repeat); in mDNS_DeregisterService_drt()
13840 mDNS_Deregister_internal(m, &sr->SubTypes[i], drt); in mDNS_DeregisterService_drt()
13842 status = mDNS_Deregister_internal(m, &sr->RR_PTR, drt); in mDNS_DeregisterService_drt()
13843 mDNS_Unlock(m); in mDNS_DeregisterService_drt()
13854 mDNSexport mStatus mDNS_RegisterNoSuchService(mDNS *const m, AuthRecord *const rr, in mDNS_RegisterNoSuchService() argument
13870 return(mDNS_Register(m, rr)); in mDNS_RegisterNoSuchService()
13873 mDNSexport mStatus mDNS_AdvertiseDomains(mDNS *const m, AuthRecord *rr, in mDNS_AdvertiseDomains() argument
13887 return(mDNS_Register(m, rr)); in mDNS_AdvertiseDomains()
13890 mDNSlocal mDNSBool mDNS_IdUsedInResourceRecordsList(mDNS * const m, mDNSOpaque16 id) in mDNS_IdUsedInResourceRecordsList() argument
13893 … for (r = m->ResourceRecords; r; r=r->next) if (mDNSSameOpaque16(id, r->updateid)) return mDNStrue; in mDNS_IdUsedInResourceRecordsList()
13897 mDNSlocal mDNSBool mDNS_IdUsedInQuestionsList(mDNS * const m, mDNSOpaque16 id) in mDNS_IdUsedInQuestionsList() argument
13900 for (q = m->Questions; q; q=q->next) if (mDNSSameOpaque16(id, q->TargetQID)) return mDNStrue; in mDNS_IdUsedInQuestionsList()
13904 mDNSexport mDNSOpaque16 mDNS_NewMessageID(mDNS * const m) in mDNS_NewMessageID() argument
13912 if (!mDNS_IdUsedInResourceRecordsList(m, id) && !mDNS_IdUsedInQuestionsList(m, id)) break; in mDNS_NewMessageID()
13926 mDNSlocal void RestartARPProbing(mDNS *const m, AuthRecord *const rr) in RestartARPProbing() argument
13948 if (rr->AnnounceCount == InitialAnnounceCount && m->timenow - rr->LastAPTime >= 0) in RestartARPProbing()
13949 InitializeLastAPTime(m, rr); in RestartARPProbing()
13954 …rr->LastAPTime = m->timenow + mDNSPlatformOneSecond * 9; // Send first packet at rr->LastAP… in RestartARPProbing()
13955 SetNextAnnounceProbeTime(m, rr); in RestartARPProbing()
13959 mDNSlocal void mDNSCoreReceiveRawARP(mDNS *const m, const ARP_EthIP *const arp, const mDNSInterface… in mDNSCoreReceiveRawARP() argument
13963 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, InterfaceID); in mDNSCoreReceiveRawARP()
13966 mDNS_Lock(m); in mDNSCoreReceiveRawARP()
13978 for (rr = m->ResourceRecords; rr; rr=rr->next) in mDNSCoreReceiveRawARP()
13991 &rr->WakeUp.HMAC, &rr->WakeUp.IMAC, ARDisplayString(m, rr)); in mDNSCoreReceiveRawARP()
13995 RestartARPProbing(m, rr); in mDNSCoreReceiveRawARP()
13997 … LogSPS("Reached maximum number of restarts for probing - %s", ARDisplayString(m,rr)); 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()
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()
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()
14053 mDNS_Unlock(m); in mDNSCoreReceiveRawARP()
14072 mDNSlocal void mDNSCoreReceiveRawND(mDNS *const m, const mDNSEthAddr *const sha, const mDNSv6Addr *… in mDNSCoreReceiveRawND() argument
14076 NetworkInterfaceInfo *intf = FirstInterfaceForID(m, InterfaceID); in mDNSCoreReceiveRawND()
14079 mDNS_Lock(m); in mDNSCoreReceiveRawND()
14086 for (rr = m->ResourceRecords; rr; rr=rr->next) in mDNSCoreReceiveRawND()
14100 …->ifname, msg, sha, spa, &ndp->target, &rr->WakeUp.HMAC, &rr->WakeUp.IMAC, ARDisplayString(m, rr)); in mDNSCoreReceiveRawND()
14104 RestartARPProbing(m, rr); in mDNSCoreReceiveRawND()
14106 … LogSPS("Reached maximum number of restarts for probing - %s", ARDisplayString(m,rr)); 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()
14135 … sha, spa, &ndp->target, &rr->WakeUp.HMAC, &rr->WakeUp.IMAC, ARDisplayString(m, rr)); in mDNSCoreReceiveRawND()
14139 RestartARPProbing(m, rr); 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()
14155 mDNS_Unlock(m); in mDNSCoreReceiveRawND()
14158 mDNSlocal void mDNSCoreReceiveRawTransportPacket(mDNS *const m, const mDNSEthAddr *const sha, const… in mDNSCoreReceiveRawTransportPacket() argument
14179 kr = mDNS_MatchKeepaliveInfo(m, dst, src, port, t->tcp.src, &seq, &ack); in mDNSCoreReceiveRawTransportPacket()
14224 mDNS_SendKeepaliveACK(m, kr); in mDNSCoreReceiveRawTransportPacket()
14298 … if (!checksum) mDNSCoreReceiveRawND(m, sha, &src->ip.v6, &t->ndp, &t->bytes[len], InterfaceID); in mDNSCoreReceiveRawTransportPacket()
14311 mDNS_Lock(m); in mDNSCoreReceiveRawTransportPacket()
14312 for (rr = m->ResourceRecords; rr; rr=rr->next) in mDNSCoreReceiveRawTransportPacket()
14318 for (r2 = m->ResourceRecords; r2; r2=r2->next) 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()
14336 mDNS_Unlock(m); in mDNSCoreReceiveRawTransportPacket()
14340 mDNSexport void mDNSCoreReceiveRawPacket(mDNS *const m, const mDNSu8 *const p, const mDNSu8 *const … in mDNSCoreReceiveRawPacket() argument
14359 mDNSCoreReceiveRawARP(m, &pkt->arp, InterfaceID); in mDNSCoreReceiveRawPacket()
14370 …mDNSCoreReceiveRawTransportPacket(m, &eth->src, &src, &dst, pkt->v4.protocol, p, (TransportLayerPa… in mDNSCoreReceiveRawPacket()
14380 …mDNSCoreReceiveRawTransportPacket(m, &eth->src, &src, &dst, pkt->v6.pro, p, (TransportLayerPacket*… in mDNSCoreReceiveRawPacket()
14385 mDNSlocal void ConstructSleepProxyServerName(mDNS *const m, domainlabel *name) in ConstructSleepProxyServerName() argument
14388m->SPSType, m->SPSPortability, m->SPSMarginalPower, m->SPSTotalPower, m->SPSFeatureFlags, &m->nice… in ConstructSleepProxyServerName()
14392 mDNSlocal void SleepProxyServerCallback(mDNS *const m, ServiceRecordSet *const srs, mStatus result) in SleepProxyServerCallback() argument
14395 mDNS_RenameAndReregisterService(m, srs, mDNSNULL); in SleepProxyServerCallback()
14398 if (m->SleepState) in SleepProxyServerCallback()
14399 m->SPSState = 3; in SleepProxyServerCallback()
14402 m->SPSState = (mDNSu8)(m->SPSSocket != mDNSNULL); in SleepProxyServerCallback()
14403 if (m->SPSState) in SleepProxyServerCallback()
14406 ConstructSleepProxyServerName(m, &name); in SleepProxyServerCallback()
14407 mDNS_RegisterService(m, srs, in SleepProxyServerCallback()
14409 mDNSNULL, m->SPSSocket->port, // Host, port in SleepProxyServerCallback()
14416 …LogSPS("Sleep Proxy Server %#s %s", srs->RR_SRV.resrec.name->c, m->SPSState ? "started" : "stopped… in SleepProxyServerCallback()
14423 mDNSexport void mDNSCoreBeSleepProxyServer_internal(mDNS *const m, mDNSu8 sps, mDNSu8 port, mDNSu8 … in mDNSCoreBeSleepProxyServer_internal() argument
14430 if (!sps && m->SPSSocket) { mDNSPlatformUDPClose(m->SPSSocket); m->SPSSocket = mDNSNULL; } in mDNSCoreBeSleepProxyServer_internal()
14434 if (m->SPSState == 1 && sps != m->SPSType) in mDNSCoreBeSleepProxyServer_internal()
14435 …{ m->SPSState = 2; mDNS_DeregisterService_drt(m, &m->SPSRecords, sps ? mDNS_Dereg_rapid : mDNS_Der… in mDNSCoreBeSleepProxyServer_internal()
14439 m->SPSType = sps; in mDNSCoreBeSleepProxyServer_internal()
14440 m->SPSPortability = port; in mDNSCoreBeSleepProxyServer_internal()
14441 m->SPSMarginalPower = marginalpower; in mDNSCoreBeSleepProxyServer_internal()
14442 m->SPSTotalPower = totpower; in mDNSCoreBeSleepProxyServer_internal()
14443 m->SPSFeatureFlags = features; in mDNSCoreBeSleepProxyServer_internal()
14447 if (!m->SPSSocket) in mDNSCoreBeSleepProxyServer_internal()
14449 m->SPSSocket = mDNSPlatformUDPSocket(zeroIPPort); in mDNSCoreBeSleepProxyServer_internal()
14450 …if (!m->SPSSocket) { LogMsg("mDNSCoreBeSleepProxyServer: Failed to allocate SPSSocket"); goto fail… in mDNSCoreBeSleepProxyServer_internal()
14453 if (m->SPSState == 0) SleepProxyServerCallback(m, &m->SPSRecords, mStatus_MemFree); in mDNSCoreBeSleepProxyServer_internal()
14456 else if (m->SPSState) in mDNSCoreBeSleepProxyServer_internal()
14458 … LogSPS("mDNSCoreBeSleepProxyServer turning off from state %d; will wake clients", m->SPSState); in mDNSCoreBeSleepProxyServer_internal()
14459 m->NextScheduledSPS = m->timenow; in mDNSCoreBeSleepProxyServer_internal()
14471 mDNSlocal void mDNS_GrowCache_internal(mDNS *const m, CacheEntity *storage, mDNSu32 numrecords) in mDNS_GrowCache_internal() argument
14478 storage[numrecords-1].next = m->rrcache_free; in mDNS_GrowCache_internal()
14479 m->rrcache_free = storage; in mDNS_GrowCache_internal()
14480 m->rrcache_size += numrecords; in mDNS_GrowCache_internal()
14484 mDNSexport void mDNS_GrowCache(mDNS *const m, CacheEntity *storage, mDNSu32 numrecords) in mDNS_GrowCache() argument
14486 mDNS_Lock(m); in mDNS_GrowCache()
14487 mDNS_GrowCache_internal(m, storage, numrecords); in mDNS_GrowCache()
14488 mDNS_Unlock(m); in mDNS_GrowCache()
14491 mDNSlocal mStatus mDNS_InitStorage(mDNS *const m, mDNS_PlatformSupport *const p, in mDNS_InitStorage() argument
14501 m->p = p; in mDNS_InitStorage()
14502 m->NetworkChanged = 0; in mDNS_InitStorage()
14503m->CanReceiveUnicastOn5353 = mDNSfalse; // Assume we can't receive unicasts on 5353, unless … in mDNS_InitStorage()
14504 m->AdvertiseLocalAddresses = AdvertiseLocalAddresses; in mDNS_InitStorage()
14505 m->DivertMulticastAdvertisements = mDNSfalse; in mDNS_InitStorage()
14506 m->mDNSPlatformStatus = mStatus_Waiting; in mDNS_InitStorage()
14507 m->UnicastPort4 = zeroIPPort; in mDNS_InitStorage()
14508 m->UnicastPort6 = zeroIPPort; in mDNS_InitStorage()
14509 m->PrimaryMAC = zeroEthAddr; in mDNS_InitStorage()
14510 m->MainCallback = Callback; in mDNS_InitStorage()
14511 m->MainContext = Context; in mDNS_InitStorage()
14512 m->rec.r.resrec.RecordType = 0; in mDNS_InitStorage()
14515 m->mDNS_busy = 0; in mDNS_InitStorage()
14516 m->mDNS_reentrancy = 0; in mDNS_InitStorage()
14517 m->ShutdownTime = 0; in mDNS_InitStorage()
14518 m->lock_rrcache = 0; in mDNS_InitStorage()
14519 m->lock_Questions = 0; in mDNS_InitStorage()
14520 m->lock_Records = 0; in mDNS_InitStorage()
14525 m->timenow_adjust = (mDNSs32)mDNSRandom(0xFFFFFFFF); in mDNS_InitStorage()
14526 timenow = mDNS_TimeNow_NoLock(m); in mDNS_InitStorage()
14528 m->timenow = 0; // MUST only be set within mDNS_Lock/mDNS_Unlock section in mDNS_InitStorage()
14529 m->timenow_last = timenow; in mDNS_InitStorage()
14530 m->NextScheduledEvent = timenow; in mDNS_InitStorage()
14531 m->SuppressSending = timenow; in mDNS_InitStorage()
14532 m->NextCacheCheck = timenow + FutureTime; in mDNS_InitStorage()
14533 m->NextScheduledQuery = timenow + FutureTime; in mDNS_InitStorage()
14534 m->NextScheduledProbe = timenow + FutureTime; in mDNS_InitStorage()
14535 m->NextScheduledResponse = timenow + FutureTime; in mDNS_InitStorage()
14536 m->NextScheduledNATOp = timenow + FutureTime; in mDNS_InitStorage()
14537 m->NextScheduledSPS = timenow + FutureTime; in mDNS_InitStorage()
14538 m->NextScheduledKA = timenow + FutureTime; in mDNS_InitStorage()
14539 m->NextScheduledStopTime = timenow + FutureTime; in mDNS_InitStorage()
14540 m->NextBLEServiceTime = 0; // zero indicates inactive in mDNS_InitStorage()
14543 m->NextBonjourDisableTime = 0; // Timer active when non zero. in mDNS_InitStorage()
14544m->BonjourEnabled = 0; // Set when Bonjour on Demand is enabled and Bonjour is currently … in mDNS_InitStorage()
14547 m->RandomQueryDelay = 0; in mDNS_InitStorage()
14548 m->RandomReconfirmDelay = 0; in mDNS_InitStorage()
14549 m->PktNum = 0; in mDNS_InitStorage()
14550 m->MPktNum = 0; in mDNS_InitStorage()
14551 m->LocalRemoveEvents = mDNSfalse; in mDNS_InitStorage()
14552 m->SleepState = SleepState_Awake; in mDNS_InitStorage()
14553 m->SleepSeqNum = 0; in mDNS_InitStorage()
14554 m->SystemWakeOnLANEnabled = mDNSfalse; in mDNS_InitStorage()
14555 m->AnnounceOwner = NonZeroTime(timenow + 60 * mDNSPlatformOneSecond); in mDNS_InitStorage()
14556 m->DelaySleep = 0; in mDNS_InitStorage()
14557 m->SleepLimit = 0; in mDNS_InitStorage()
14560 m->UnicastPacketsSent = 0; in mDNS_InitStorage()
14561 m->MulticastPacketsSent = 0; in mDNS_InitStorage()
14562 m->RemoteSubnet = 0; in mDNS_InitStorage()
14566 m->Questions = mDNSNULL; in mDNS_InitStorage()
14567 m->NewQuestions = mDNSNULL; in mDNS_InitStorage()
14568 m->CurrentQuestion = mDNSNULL; in mDNS_InitStorage()
14569 m->LocalOnlyQuestions = mDNSNULL; in mDNS_InitStorage()
14570 m->NewLocalOnlyQuestions = mDNSNULL; in mDNS_InitStorage()
14571 m->RestartQuestion = mDNSNULL; in mDNS_InitStorage()
14572 m->rrcache_size = 0; in mDNS_InitStorage()
14573 m->rrcache_totalused = 0; in mDNS_InitStorage()
14574 m->rrcache_active = 0; in mDNS_InitStorage()
14575 m->rrcache_report = 10; in mDNS_InitStorage()
14576 m->rrcache_free = mDNSNULL; in mDNS_InitStorage()
14580 m->rrcache_hash[slot] = mDNSNULL; in mDNS_InitStorage()
14581 m->rrcache_nextcheck[slot] = timenow + FutureTime;; in mDNS_InitStorage()
14584 mDNS_GrowCache_internal(m, rrcachestorage, rrcachesize); in mDNS_InitStorage()
14585 m->rrauth.rrauth_free = mDNSNULL; in mDNS_InitStorage()
14588 m->rrauth.rrauth_hash[slot] = mDNSNULL; in mDNS_InitStorage()
14591 m->hostlabel.c[0] = 0; in mDNS_InitStorage()
14592 m->nicelabel.c[0] = 0; in mDNS_InitStorage()
14593 m->MulticastHostname.c[0] = 0; in mDNS_InitStorage()
14595 m->RandomizedHostname.c[0] = 0; in mDNS_InitStorage()
14597 m->HIHardware.c[0] = 0; in mDNS_InitStorage()
14598 m->HISoftware.c[0] = 0; in mDNS_InitStorage()
14599 m->ResourceRecords = mDNSNULL; in mDNS_InitStorage()
14600 m->DuplicateRecords = mDNSNULL; in mDNS_InitStorage()
14601 m->NewLocalRecords = mDNSNULL; in mDNS_InitStorage()
14602 m->NewLocalOnlyRecords = mDNSfalse; in mDNS_InitStorage()
14603 m->CurrentRecord = mDNSNULL; in mDNS_InitStorage()
14604 m->HostInterfaces = mDNSNULL; in mDNS_InitStorage()
14605 m->ProbeFailTime = 0; in mDNS_InitStorage()
14606 m->NumFailedProbes = 0; in mDNS_InitStorage()
14607 m->SuppressProbes = 0; in mDNS_InitStorage()
14610 m->NextuDNSEvent = timenow + FutureTime; in mDNS_InitStorage()
14611 m->NextSRVUpdate = timenow + FutureTime; in mDNS_InitStorage()
14614 m->DNSServers = mDNSNULL; in mDNS_InitStorage()
14617 m->Router = zeroAddr; in mDNS_InitStorage()
14618 m->AdvertisedV4 = zeroAddr; in mDNS_InitStorage()
14619 m->AdvertisedV6 = zeroAddr; in mDNS_InitStorage()
14621 m->AuthInfoList = mDNSNULL; in mDNS_InitStorage()
14623 m->ReverseMap.ThisQInterval = -1; in mDNS_InitStorage()
14624 m->StaticHostname.c[0] = 0; in mDNS_InitStorage()
14625 m->FQDN.c[0] = 0; in mDNS_InitStorage()
14626 m->Hostnames = mDNSNULL; in mDNS_InitStorage()
14628 m->WABBrowseQueriesCount = 0; in mDNS_InitStorage()
14629 m->WABLBrowseQueriesCount = 0; in mDNS_InitStorage()
14630 m->WABRegQueriesCount = 0; in mDNS_InitStorage()
14631 m->AutoTargetServices = 1; in mDNS_InitStorage()
14634 m->NumAllInterfaceRecords = 0; in mDNS_InitStorage()
14635 m->NumAllInterfaceQuestions = 0; in mDNS_InitStorage()
14638 m->LLQNAT.clientCallback = mDNSNULL; in mDNS_InitStorage()
14639 m->LLQNAT.clientContext = mDNSNULL; in mDNS_InitStorage()
14640 m->NATTraversals = mDNSNULL; in mDNS_InitStorage()
14641 m->CurrentNATTraversal = mDNSNULL; in mDNS_InitStorage()
14642 m->retryIntervalGetAddr = 0; // delta between time sent and retry in mDNS_InitStorage()
14643 m->retryGetAddr = timenow + FutureTime; // absolute time when we retry in mDNS_InitStorage()
14644 m->ExtAddress = zerov4Addr; in mDNS_InitStorage()
14645 m->PCPNonce[0] = mDNSRandom(-1); in mDNS_InitStorage()
14646 m->PCPNonce[1] = mDNSRandom(-1); in mDNS_InitStorage()
14647 m->PCPNonce[2] = mDNSRandom(-1); in mDNS_InitStorage()
14649 m->NATMcastRecvskt = mDNSNULL; in mDNS_InitStorage()
14650 m->LastNATupseconds = 0; in mDNS_InitStorage()
14651 m->LastNATReplyLocalTime = timenow; in mDNS_InitStorage()
14652 m->LastNATMapResultCode = NATErr_None; in mDNS_InitStorage()
14654 m->UPnPInterfaceID = 0; in mDNS_InitStorage()
14655 m->SSDPSocket = mDNSNULL; in mDNS_InitStorage()
14656 m->SSDPWANPPPConnection = mDNSfalse; in mDNS_InitStorage()
14657 m->UPnPRouterPort = zeroIPPort; in mDNS_InitStorage()
14658 m->UPnPSOAPPort = zeroIPPort; in mDNS_InitStorage()
14659 m->UPnPRouterURL = mDNSNULL; in mDNS_InitStorage()
14660 m->UPnPWANPPPConnection = mDNSfalse; in mDNS_InitStorage()
14661 m->UPnPSOAPURL = mDNSNULL; in mDNS_InitStorage()
14662 m->UPnPRouterAddressString = mDNSNULL; in mDNS_InitStorage()
14663 m->UPnPSOAPAddressString = mDNSNULL; in mDNS_InitStorage()
14664 m->SPSType = 0; in mDNS_InitStorage()
14665 m->SPSPortability = 0; in mDNS_InitStorage()
14666 m->SPSMarginalPower = 0; in mDNS_InitStorage()
14667 m->SPSTotalPower = 0; in mDNS_InitStorage()
14668 m->SPSFeatureFlags = 0; in mDNS_InitStorage()
14669 m->SPSState = 0; in mDNS_InitStorage()
14670 m->SPSProxyListChanged = mDNSNULL; in mDNS_InitStorage()
14671 m->SPSSocket = mDNSNULL; in mDNS_InitStorage()
14672 m->SPSBrowseCallback = mDNSNULL; in mDNS_InitStorage()
14673 m->ProxyRecords = 0; in mDNS_InitStorage()
14675 m->DNSPushServers = mDNSNULL; in mDNS_InitStorage()
14676 m->DNSPushZones = mDNSNULL; in mDNS_InitStorage()
14682 m->WCF = WCFConnectionNew(); in mDNS_InitStorage()
14683 if (!m->WCF) { LogMsg("WCFConnectionNew failed"); return -1; } in mDNS_InitStorage()
14695 mDNSexport mStatus mDNS_Init(mDNS *const m, mDNS_PlatformSupport *const p, in mDNS_Init() argument
14699 …mStatus result = mDNS_InitStorage(m, p, rrcachestorage, rrcachesize, AdvertiseLocalAddresses, Call… in mDNS_Init()
14705 mDNSPlatformAddListValidator(&lv, mDNS_ValidateLists, "mDNS_ValidateLists", m); in mDNS_Init()
14707 result = mDNSPlatformInit(m); in mDNS_Init()
14712 uDNS_SetupDNSConfig(m); // Get initial DNS configuration in mDNS_Init()
14718 mDNSexport void mDNS_ConfigChanged(mDNS *const m) in mDNS_ConfigChanged() argument
14720 if (m->SPSState == 1) in mDNS_ConfigChanged()
14725 DeconstructServiceName(m->SPSRecords.RR_SRV.resrec.name, &name, &type, &domain); in mDNS_ConfigChanged()
14727 ConstructSleepProxyServerName(m, &newname); in mDNS_ConfigChanged()
14733 m->SPSState = 2; in mDNS_ConfigChanged()
14735 mDNS_DeregisterService_drt(m, &m->SPSRecords, mDNS_Dereg_rapid); in mDNS_ConfigChanged()
14740 if (m->MainCallback) in mDNS_ConfigChanged()
14741 m->MainCallback(m, mStatus_ConfigChanged); in mDNS_ConfigChanged()
14744 mDNSlocal void DynDNSHostNameCallback(mDNS *const m, AuthRecord *const rr, mStatus result) in DynDNSHostNameCallback() argument
14746 (void)m; // unused in DynDNSHostNameCallback()
14752 mDNSlocal void PurgeOrReconfirmCacheRecord(mDNS *const m, CacheRecord *cr) in PurgeOrReconfirmCacheRecord() argument
14764 … cr->resrec.rDNSServer ? cr->resrec.rDNSServer->domain.c : mDNSNULL, CRDisplayString(m, cr)); in PurgeOrReconfirmCacheRecord()
14768 …firmCacheRecord: Purging Resourcerecord %s, RecordType %x", CRDisplayString(m, cr), cr->resrec.Rec… in PurgeOrReconfirmCacheRecord()
14769 mDNS_PurgeCacheResourceRecord(m, cr); in PurgeOrReconfirmCacheRecord()
14773 …acheRecord: Reconfirming Resourcerecord %s, RecordType %x", CRDisplayString(m, cr), cr->resrec.Rec… in PurgeOrReconfirmCacheRecord()
14774 mDNS_Reconfirm_internal(m, cr, kDefaultReconfirmTimeForNoAnswer); in PurgeOrReconfirmCacheRecord()
14779 mDNSlocal void mDNS_PurgeBeforeResolve(mDNS *const m, DNSQuestion *q) in mDNS_PurgeBeforeResolve() argument
14781 CacheGroup *const cg = CacheGroupForName(m, q->qnamehash, &q->qname); in mDNS_PurgeBeforeResolve()
14787 LogInfo("mDNS_PurgeBeforeResolve: Flushing %s", CRDisplayString(m, rp)); in mDNS_PurgeBeforeResolve()
14788 mDNS_PurgeCacheResourceRecord(m, rp); in mDNS_PurgeBeforeResolve()
14794 mDNSexport void DNSServerChangeForQuestion(mDNS *const m, DNSQuestion *q, DNSServer *new) in DNSServerChangeForQuestion() argument
14798 (void) m; in DNSServerChangeForQuestion()
14814 mDNSlocal void SetConfigState(mDNS *const m, mDNSBool delete) in SetConfigState() argument
14824 for (ptr = m->DNSServers; ptr; ptr = ptr->next) in SetConfigState()
14837 for (mr = m->McastResolvers; mr; mr = mr->next) in SetConfigState()
14843 for (ptr = m->DNSServers; ptr; ptr = ptr->next) in SetConfigState()
14853 for (mr = m->McastResolvers; mr; mr = mr->next) in SetConfigState()
14858 mDNSlocal void SetDynDNSHostNameIfChanged(mDNS *const m, domainname *const fqdn) in SetDynDNSHostNameIfChanged() argument
14861 if (!SameDomainName(fqdn, &m->FQDN)) in SetDynDNSHostNameIfChanged()
14863 if (m->FQDN.c[0]) mDNS_RemoveDynDNSHostName(m, &m->FQDN); in SetDynDNSHostNameIfChanged()
14865 AssignDomainName(&m->FQDN, fqdn); in SetDynDNSHostNameIfChanged()
14867 if (m->FQDN.c[0]) in SetDynDNSHostNameIfChanged()
14869 mDNSPlatformDynDNSHostNameStatusChanged(&m->FQDN, 1); in SetDynDNSHostNameIfChanged()
14870 mDNS_AddDynDNSHostName(m, &m->FQDN, DynDNSHostNameCallback, mDNSNULL); in SetDynDNSHostNameIfChanged()
14877 mDNSexport mStatus uDNS_SetupDNSConfig(mDNS *const m) in uDNS_SetupDNSConfig() argument
14887 DNSServer *ptr, **p = &m->DNSServers; in uDNS_SetupDNSConfig()
14888 const DNSServer *oldServers = m->DNSServers; in uDNS_SetupDNSConfig()
14891 McastResolver *mr, **mres = &m->McastResolvers; in uDNS_SetupDNSConfig()
14899 uDNS_SetupWABQueries(m); in uDNS_SetupDNSConfig()
14901 mDNS_Lock(m); in uDNS_SetupDNSConfig()
14910 SetConfigState(m, mDNStrue); in uDNS_SetupDNSConfig()
14913 SetDynDNSHostNameIfChanged(m, &fqdn); in uDNS_SetupDNSConfig()
14914 SetConfigState(m, mDNSfalse); in uDNS_SetupDNSConfig()
14915 mDNS_Unlock(m); in uDNS_SetupDNSConfig()
14971 DNS64RestartQuestions(m); in uDNS_SetupDNSConfig()
14979 for (q = m->Questions; q; q = q->next) in uDNS_SetupDNSConfig()
14987 SetValidDNSServers(m, q); in uDNS_SetupDNSConfig()
14989 s = GetServerForQuestion(m, q); in uDNS_SetupDNSConfig()
15012 DNSPushReconcileConnection(m, q); in uDNS_SetupDNSConfig()
15021 RestartUnicastQuestions(m); in uDNS_SetupDNSConfig()
15025 for (q = m->Questions; q; q = q->next) in uDNS_SetupDNSConfig()
15032 SetValidDNSServers(m, q); in uDNS_SetupDNSConfig()
15034 s = GetServerForQuestion(m, q); in uDNS_SetupDNSConfig()
15036 DNSServerChangeForQuestion(m, q, s); in uDNS_SetupDNSConfig()
15041 q->TargetQID = mDNS_NewMessageID(m); in uDNS_SetupDNSConfig()
15042 if (!q->Suppressed) ActivateUnicastQuery(m, q, mDNStrue); in uDNS_SetupDNSConfig()
15049 for (psp = &m->DNSPushServers; *psp != mDNSNULL; ) in uDNS_SetupDNSConfig()
15102 …ptr = GetServerForName(m, cr->resrec.name, cr->CRActiveQuestion->InterfaceID, cr->CRActiveQuestion… in uDNS_SetupDNSConfig()
15106 CRDisplayString(m, cr), &ptr->addr, in uDNS_SetupDNSConfig()
15108 PurgeOrReconfirmCacheRecord(m, cr); in uDNS_SetupDNSConfig()
15114 … server %#a for cache record %s", &cr->CRActiveQuestion->qDNSServer->addr, CRDisplayString(m, cr)); in uDNS_SetupDNSConfig()
15125 " to be freed", CRDisplayString(m, cr), in uDNS_SetupDNSConfig()
15135 … " resetting to question's DNSServer Address %#a", CRDisplayString(m, cr), in uDNS_SetupDNSConfig()
15141 PurgeOrReconfirmCacheRecord(m, cr); in uDNS_SetupDNSConfig()
15148 CRDisplayString(m, cr), !cr->resrec.rDNSServer ? "(to be deleted)" : "", in uDNS_SetupDNSConfig()
15152 mDNS_PurgeCacheResourceRecord(m, cr); in uDNS_SetupDNSConfig()
15171 LogInfo("uDNS_SetupDNSConfig: CountOfUnicastDNSServers %d", CountOfUnicastDNSServers(m)); in uDNS_SetupDNSConfig()
15177 if ((m->DNSServers != mDNSNULL) != (oldServers != mDNSNULL)) in uDNS_SetupDNSConfig()
15184 mDNS_PurgeCacheResourceRecord(m, cr); in uDNS_SetupDNSConfig()
15189 m->DNSServers ? "DNS server became" : "No DNS servers", count); in uDNS_SetupDNSConfig()
15192 RestartRecordGetZoneData(m); in uDNS_SetupDNSConfig()
15196 SetDynDNSHostNameIfChanged(m, &fqdn); in uDNS_SetupDNSConfig()
15198 mDNS_Unlock(m); in uDNS_SetupDNSConfig()
15206 mDNS_SetPrimaryInterfaceInfo(m, in uDNS_SetupDNSConfig()
15213 mDNS_SetPrimaryInterfaceInfo(m, mDNSNULL, mDNSNULL, mDNSNULL); in uDNS_SetupDNSConfig()
15214 …if (m->FQDN.c[0]) mDNSPlatformDynDNSHostNameStatusChanged(&m->FQDN, 1); // Set status to 1 to indi… in uDNS_SetupDNSConfig()
15217 debugf("uDNS_SetupDNSConfig: number of unicast DNS servers %d", CountOfUnicastDNSServers(m)); in uDNS_SetupDNSConfig()
15221 mDNSexport void mDNSCoreInitComplete(mDNS *const m, mStatus result) in mDNSCoreInitComplete() argument
15223 m->mDNSPlatformStatus = result; in mDNSCoreInitComplete()
15224 if (m->MainCallback) in mDNSCoreInitComplete()
15226 mDNS_Lock(m); in mDNSCoreInitComplete()
15228 m->MainCallback(m, mStatus_NoError); in mDNSCoreInitComplete()
15230 mDNS_Unlock(m); in mDNSCoreInitComplete()
15234 mDNSlocal void DeregLoop(mDNS *const m, AuthRecord *const start) in DeregLoop() argument
15236 m->CurrentRecord = start; in DeregLoop()
15237 while (m->CurrentRecord) in DeregLoop()
15239 AuthRecord *rr = m->CurrentRecord; in DeregLoop()
15242 rr, rr->resrec.RecordType, ARDisplayString(m, rr)); in DeregLoop()
15244 mDNS_Deregister_internal(m, rr, mDNS_Dereg_rapid); 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()
15257 mDNSexport void mDNS_StartExit(mDNS *const m) in mDNS_StartExit() argument
15261 mDNS_Lock(m); in mDNS_StartExit()
15264 m->ShutdownTime = NonZeroTime(m->timenow + mDNSPlatformOneSecond * 5); in mDNS_StartExit()
15266 mDNSCoreBeSleepProxyServer_internal(m, 0, 0, 0, 0, 0); in mDNS_StartExit()
15271 if (m->WCF) in mDNS_StartExit()
15273 WCFConnectionDealloc(m->WCF); in mDNS_StartExit()
15274 m->WCF = mDNSNULL; in mDNS_StartExit()
15282 SuspendLLQs(m); in mDNS_StartExit()
15285 while (m->Hostnames) mDNS_RemoveDynDNSHostName(m, &m->Hostnames->fqdn); in mDNS_StartExit()
15295 …mDNS_Deregister_internal(m, &dereg->ar, mDNS_Dereg_normal); // Memory will be freed in the FreeARE… in mDNS_StartExit()
15300 DeadvertiseAllInterfaceRecords(m, kDeadvertiseFlag_All); in mDNS_StartExit()
15303 while (m->NATTraversals) in mDNS_StartExit()
15305 NATTraversalInfo *t = m->NATTraversals; in mDNS_StartExit()
15306 …mDNS_StopNATOperation_internal(m, t); // This will cut 't' from the list, thereby advancing … in mDNS_StartExit()
15323 if (m->CurrentRecord) in mDNS_StartExit()
15326 …"mDNS_StartExit: ERROR m->CurrentRecord already set " PRI_S, ARDisplayString(m, m->CurrentRecord)); in mDNS_StartExit()
15334 DeregLoop(m, m->DuplicateRecords); in mDNS_StartExit()
15336 DeregLoop(m, m->ResourceRecords); in mDNS_StartExit()
15340 if (m->NextScheduledResponse - m->timenow < mDNSPlatformOneSecond) in mDNS_StartExit()
15342 m->NextScheduledResponse = m->timenow; in mDNS_StartExit()
15343 m->SuppressSending = 0; in mDNS_StartExit()
15346 if (m->ResourceRecords) in mDNS_StartExit()
15355 for (rr = m->DuplicateRecords; rr; rr = rr->next) in mDNS_StartExit()
15359 rr->resrec.RecordType, ARDisplayString(m, rr)); in mDNS_StartExit()
15363 if (m->mDNSPlatformStatus != mStatus_NoError) DiscardDeregistrations(m); in mDNS_StartExit()
15365 mDNS_Unlock(m); in mDNS_StartExit()
15370 mDNSexport void mDNS_FinalExit(mDNS *const m) in mDNS_FinalExit() argument
15373 mDNSu32 rrcache_totalused = m->rrcache_totalused; in mDNS_FinalExit()
15378 mDNSPlatformClose(m); in mDNS_FinalExit()
15382 while (m->rrcache_hash[slot]) in mDNS_FinalExit()
15384 CacheGroup *cg = m->rrcache_hash[slot]; in mDNS_FinalExit()
15390 ReleaseCacheRecord(m, cr); in mDNS_FinalExit()
15393 ReleaseCacheGroup(m, &m->rrcache_hash[slot]); in mDNS_FinalExit()
15397 if (rrcache_active != m->rrcache_active) in mDNS_FinalExit()
15398 …rcache_active %lu != m->rrcache_active %lu", rrcache_totalused, rrcache_active, m->rrcache_active); in mDNS_FinalExit()
15400 for (rr = m->ResourceRecords; rr; rr = rr->next) in mDNS_FinalExit()
15401 …alExit failed to send goodbye for: %p %02X %s", rr, rr->resrec.RecordType, ARDisplayString(m, rr)); in mDNS_FinalExit()