mirror of
https://git.savannah.nongnu.org/git/lwip.git
synced 2025-12-13 10:16:40 +08:00
See below commit messages for more information mDNS: support for direct and delayed sends There are two ways to send a response, directly and after a delay. A probe or an announce msg are now send via the direct way and all responses are send via the delayed way. mDNS improved delay vs direct send behavior on questions All multicast answers are delayed at the moment. While all unicast answers are send out directly. A unicast answer is send when this is requested by the QU bit, when a unicast question was send or when the question originated from a legacy querier. mDNS: add probe query detection. If a probe query is detected a direct unicast respond is send. Independent of the QU/QM bit. mDNS split delayed multicast msgs into ipv4 and ipv6 buffers. We are implementing a two resolvers in one (IPv6 and IPv4 together). For directly send answers, this does not matter. But for delayed answers, we need to make a separate buffer for both. mDNS: addr bug, we should not clear full outmsg memset deleted also the dest_addr and dest_port, which should remain and is constant. This commit contains a function that resets only the needed parts of the outmsg struct. mDNS: do not multicast a rr within one second. RFC6762 section 6: prevent network flooding. When a multicast packet is send out, we start a timeout of 1s within this 1 second all multicast requests are ignored. We do not make a difference between the records, we set the delay for all records. mDNS: improved split for unicast vs multicast and direct vs delayed unicast delayed message are now possible and multicast direct msgs to. MDNS: changed printfs to lwip debug messages MDNS: change timeouts from max time to random time mDNS: send multicast response on QU questions if not multicasted recently. If a QU question is received, the responder should multicast the answer if it did not multicast that record within 25% of it's ttl. we implemented a stripped down version, meaning that we look at the records as one set and use one timer for all records. So if the responder multicasted a record within 30s of the QU question it will respond with a unicast answer. if not, it will respond multicast. mDNS: timeouts -> create function for mdns timeout handling mdns_set_timeout will check if the timer is running or not and will update the flag to running after starting the timer. Multicast timeouts were not set everywhere they needed to be. This is solved. mulit <-> multi typo fixed. mDNS: solve commenting and style issues mDNS: add #if LWIP_IPVx to new code LWIP_IPV4/6 can be enabled or disabled, all combination should work.