Exemplo n.º 1
0
    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()
Exemplo n.º 2
0
    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()
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
        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)
Exemplo n.º 6
0
 def registerDevice(self, request):
     Logr.warning("RegisterDevice not implemented")
     return {
         'RegistrationRespMsg': None
     }
Exemplo n.º 7
0
 def registerDevice(self, request):
     Logr.warning("RegisterDevice not implemented")
     return {'RegistrationRespMsg': None}
Exemplo n.º 8
0
        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 = {