| 2268 | } |
| 2269 | |
| 2270 | static void AdvanceServiceLifecycle(MDNS* mdns, uint64_t now) |
| 2271 | { |
| 2272 | for (uint32_t i = 0; i < mdns->m_Services.Size(); ++i) |
| 2273 | { |
| 2274 | RegisteredService& service = mdns->m_Services[i]; |
| 2275 | if (service.m_State == SERVICE_STATE_PROBING && now >= service.m_NextProbe) |
| 2276 | { |
| 2277 | if (service.m_ProbeCount >= MDNS_PROBE_COUNT) |
| 2278 | { |
| 2279 | service.m_State = SERVICE_STATE_ACTIVE; |
| 2280 | service.m_StartupAnnounceCount = MDNS_STARTUP_ANNOUNCEMENTS; |
| 2281 | service.m_NextAnnounce = now; |
| 2282 | } |
| 2283 | else |
| 2284 | { |
| 2285 | SendProbe(mdns, service); |
| 2286 | ++service.m_ProbeCount; |
| 2287 | service.m_NextProbe = now + SecondsToMicroSeconds(MDNS_PROBE_INTERVAL_MS) / 1000ULL; |
| 2288 | } |
| 2289 | } |
| 2290 | |
| 2291 | if (service.m_State == SERVICE_STATE_ACTIVE |
| 2292 | && service.m_StartupAnnounceCount > 0 |
| 2293 | && now >= service.m_NextAnnounce) |
| 2294 | { |
| 2295 | AnnounceService(mdns, service, service.m_Ttl); |
| 2296 | --service.m_StartupAnnounceCount; |
| 2297 | service.m_NextAnnounce = now + SecondsToMicroSeconds(MDNS_STARTUP_ANNOUNCE_INTERVAL); |
| 2298 | } |
| 2299 | } |
| 2300 | } |
| 2301 | |
| 2302 | Result New(const Params* params, HMDNS* mdns) |
| 2303 | { |
no test coverage detected