From 47c90c74bebaffb3ef1da5d9e62ed7641ddf2a57 Mon Sep 17 00:00:00 2001 From: John-Mark Gurney Date: Thu, 9 Feb 2006 16:00:32 -0800 Subject: [PATCH] add support for sending out byebye notifications... [git-p4: depot-paths = "//depot/": change = 726] --- SSDP.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/SSDP.py b/SSDP.py index 23490e9..62e1c55 100644 --- a/SSDP.py +++ b/SSDP.py @@ -35,6 +35,14 @@ class SSDPServer(DatagramProtocol): elements = {} known = {} + def doStop(self): + '''Make sure we send out the byebye notifications.''' + + self.transport.write('foobar', (SSDP_ADDR, SSDP_PORT)) + for st in self.known: + self.doByebye(st) + DatagramProtocol.doStop(self) + def datagramReceived(self, data, (host, port)): """Handle a received multicast datagram.""" @@ -104,6 +112,22 @@ class SSDPServer(DatagramProtocol): self.known[st]['CACHE-CONTROL'] = 'max-age=1800' self.doNotify(st) + def doByebye(self, st): + """Do byebye""" + + log.msg('Sending byebye notification for %s' % st) + + resp = [ 'NOTIFY * HTTP/1.1', + 'Host: %s:%d' % (SSDP_ADDR, SSDP_PORT), + 'NTS: ssdp:byebye', + ] + stcpy = dict(self.known[st].iteritems()) + stcpy['NT'] = stcpy['ST'] + del stcpy['ST'] + resp.extend(map(lambda x: ': '.join(x), stcpy.iteritems())) + resp.extend(('', '')) + self.transport.write('\r\n'.join(resp), (SSDP_ADDR, SSDP_PORT)) + def doNotify(self, st): """Do notification"""