GNOME Bugzilla – Bug 666639
Implement UDA 1.1 features
Last modified: 2021-05-17 17:04:23 UTC
GSSDP currently uses UDA 1.0. There are some new features available in the updated UDA 1.1 standard: http://upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf
*** Bug 666640 has been marked as a duplicate of this bug. ***
As far as I can tell these are the things that are different from 1.0 and 1.1 1 Multi-homed support 1.1 New Headers 1.2 Sensible IPv6 2 ssdp:update 3 mutlicast eventing NOTE: when talking about network interfaces bellow, I'm also referring to each IP assigned to an network interfaces as an independent network interface. 1: This is mostly rules dealing with the mess that uda/1.0 created attempting to specifying ipv6 support in appendix A. To implement multi-homed support the following things need adding: Support listening for multicast from multiple interfaces.This is a PITA in BSD world, don't know about windows. but pktinfo handling is required to figure out the source. For this to work under Linux, at least, you have to listen for multicast packets on any interface on the announcement ports and then marshal the packets based on the pktinfo that comes with the packet from recv_msg(). You can't listen on each interface individually (unless you are doing it from different processes) because linux will kindly make it look like all packets come from the default interface. Which is okay, unless you want to send a reply via the non-default interface. Treat a device with multiple advertisement addresses as a single device. This is where the new headers come in. BOOTID.UPNP.ORG is used to determine if a device's interfaces have changed. BOOTID is incremented every time a device has a change in it's network interfaces. (so an announcement or a byebye should not probably cause resource-available/resource-unavailable signals in this case, some new signals would work better). This also means that when a device sends a byebye gssdp shouldn't assume that the entire resource went away just that single instance. Support for multiple descriptor/control urls per resource. This requires pulling the DDD for each unique address to get controlURL, eventSubURL, etc... But the SCPDs can be resused. CONFIGID is changed whenever the content's of the device's SCPD or DDD changes. The OPT 01-NLS: header is a should. It's there to make things backward compatible with devices that implemented uda/1.0 multi-homed support. Should be same value as BOOTID. IPv6 support is fairly simple if all of the things above have been implemented. The biggest things is following the rules on which address scope should be preferred and using appropriate multicast address based on your scope. 2. ssdp:update is a new message that is used by devices to announce that they experienced an network interface change. It has to be sent for each device/service that is still on the network on each interface that the device is still connected to. 3. Mutlicast eventing This is probably the niftiest (and simplest) thing that comes out of 1.1. Just send out the events for each interface on the system to a multicast address. (239.255.255.246:7900) and that's pretty much it on the service side. From control point it's just another multicast address/port to listen on. I'll add code specific details later
-- GitLab Migration Automatic Message -- This bug has been migrated to GNOME's GitLab instance and has been closed from further activity. You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.gnome.org/GNOME/gssdp/-/issues/16.