40 advertisements.
Apply ([] ([[maybe_unused]]
const auto& a) { Require (not a.fTarget.empty ()); });
50 s.
Bind (
SocketAddress{Network::V4::kAddrAny, UPnP::SSDP::V4::kSocketAddress.
GetPort ()}, Socket::BindFlags{.fSO_REUSEADDR =
true});
51 sockets += make_pair (s, UPnP::SSDP::V4::kSocketAddress);
55 s.
Bind (
SocketAddress{Network::V6::kAddrAny, UPnP::SSDP::V6::kSocketAddress.
GetPort ()}, Socket::BindFlags{.fSO_REUSEADDR =
true});
56 sockets += make_pair (s, UPnP::SSDP::V6::kSocketAddress);
60 if constexpr (qStroika_Foundation_Debug_DefaultTracingOn) {
62 for ([[maybe_unused]]
const auto& a : advertisements) {
63 DbgTrace (
"(alive,loc={},usn={},...)"_f, a.fLocation, a.fUSN);
68#if USE_NOISY_TRACE_IN_THIS_MODULE_
70 for ([[maybe_unused]]
const auto& a : advertisements) {
71#if USE_NOISY_TRACE_IN_THIS_MODULE_
74 msg +=
"location=" sz + a.fLocation +
", " sz;
75 msg +=
"ST=" sz + a.fST +
", " sz;
76 msg +=
"USN=" sz + a.fUSN;
82 for (
auto a : advertisements) {
84 Memory::BLOB data = SSDP::Serialize (
"NOTIFY * HTTP/1.1"sv, SearchOrNotify::Notify, a);
85 for (pair<ConnectionlessSocket::Ptr, SocketAddress> s : sockets) {
86 s.first.SendTo (data, s.second);
90 catch (
const Execution::Thread::AbortException&) {
94 DbgTrace (
"Ignoring inability to send SSDP notify packets: {} (try again later)"_f, current_exception ());
97 fIntervalTimerAdder_ = make_unique<Execution::IntervalTimer::Adder> (callback,
Time::Duration{fi.fRepeatInterval},