def _default(self): if not self.initialized: raise Exception() if self.state_variable.dataType == 'string': return str() if self.state_variable.dataType == 'boolean': return False if self.state_variable.dataType == 'ui4': return 0 Logr.warning(self.state_variable.dataType + "not implemented") raise NotImplementedError()
class SSDP_Listener(DatagramProtocol): def __init__(self, ssdp, interfaces, bind=None, responseExpire=900): self.ssdp = ssdp self.interfaces = interfaces self.responseExpire = responseExpire self.running = False self.rand = Random() self.bind = bind def listen(self): if self.running: raise Exception() Logr.debug("listen()") self.listen_port = reactor.listenMulticast(SSDP_PORT, self, listenMultiple=True) self.running = True def startProtocol(self): self.transport.setTTL(2) for interface in self.interfaces: self.transport.joinGroup(SSDP_ADDR_V4, interface) if interface == '': Logr.debug("joined on ANY") else: Logr.debug("joined on %s", interface) def stop(self): Logr.debug("stop()") if not self.running: return self.listen_port.stopListening() def datagramReceived(self, data, (address, port)): Logr.debug("datagramReceived() from %s:%s", address, port) method, path, version, headers = http_parse_raw(data) if method == 'M-SEARCH': self.received_MSEARCH(headers, (address, port)) elif method == 'NOTIFY': self.received_NOTIFY(headers, (address, port)) else: Logr.warning("Unhandled Method '%s'", method)
class SSDP_Client(DatagramProtocol): def __init__(self, ssdp, interface, bind=None, notifyInterval=1800): self.ssdp = ssdp self.interface = interface self.notifySequenceInterval = notifyInterval self.notifySequenceLoop = task.LoopingCall(self._notifySequenceCall) self.running = False self.bind = bind def listen(self): if self.running: raise Exception() Logr.debug("listen()") self.listen_port = reactor.listenUDP(0, self, self.interface) self.running = True Logr.debug("listening on %s", self.listen_port.socket.getsockname()) reactor.callLater(0, self._notifySequenceCall, True) self.notifySequenceLoop.start(self.notifySequenceInterval) def stop(self): Logr.debug("stop()") if not self.running: return self.notifySequenceLoop.stop() self.listen_port.stopListening() def respond(self, headers, (address, port)): Logr.debug("respond() %s %d", address, port) msg = 'HTTP/1.1 200 OK\r\n' msg += headers_join(headers) msg += '\r\n\r\n' try: self.transport.write(msg, (address, port)) except socket.error, e: Logr.warning("socket.error: %s", e)
try: self.transport.write(msg, (address, port)) except socket.error, e: Logr.warning("socket.error: %s", e) def send(self, method, headers, (address, port)): Logr.debug("send() %s:%s", address, port) msg = '%s * HTTP/1.1\r\n' % method msg += headers_join(headers) msg += '\r\n\r\n' try: self.transport.write(msg, (address, port)) except socket.error, e: Logr.warning("socket.error: %s", e) def send_NOTIFY(self, nt, uuid=None, nts='ssdp:alive'): if self.ssdp.device.bootID is None: self.ssdp.device.bootID = int(time.time()) if not self.bind: location = self.ssdp.device.getLocation(get_default_v4_address()) else: location = self.ssdp.device.getLocation(self.bind) if uuid is None: uuid = self.ssdp.device.uuid usn, nt = build_notification_type(uuid, nt)
def registerDevice(self, request): Logr.warning("RegisterDevice not implemented") return { 'RegistrationRespMsg': None }
def registerDevice(self, request): Logr.warning("RegisterDevice not implemented") return {'RegistrationRespMsg': None}
try: self.transport.write(msg, (address, port)) except socket.error, e: Logr.warning("socket.error: %s", e) def send(self, method, headers, (address, port)): Logr.debug("send() %s:%s", address, port) msg = '%s * HTTP/1.1\r\n' % method msg += headers_join(headers) msg += '\r\n\r\n' try: self.transport.write(msg, (address, port)) except socket.error, e: Logr.warning("socket.error: %s", e) def send_NOTIFY(self, nt, uuid=None, nts='ssdp:alive'): if self.ssdp.device.bootID is None: self.ssdp.device.bootID = int(time.time()) location = self.ssdp.device.getLocation(get_default_v4_address()) if uuid is None: uuid = self.ssdp.device.uuid usn, nt = build_notification_type(uuid, nt) Logr.debug("send_NOTIFY %s:%s", nts, usn) headers = {