Ejemplo n.º 1
0
    def _transmit(self,uri,confirmable,code,options=[],payload=[]):
        assert code in d.METHOD_ALL
        if code in [d.METHOD_GET,d.METHOD_DELETE]:
            assert payload==[]
        assert type(uri)==str

        (destIp,destPort,uriOptions) = coapUri.uri2options(uri)

        with self.transmittersLock:
            self._cleanupTransmitter()
            messageId        = self._getMessageID(destIp,destPort)
            token            = self._getToken(destIp,destPort)
            newTransmitter   = coapTransmitter.coapTransmitter(
                sendFunc     = self.socketUdp.sendUdp,
                srcIp        = self.ipAddress,
                srcPort      = self.udpPort,
                destIp       = destIp,
                destPort     = destPort,
                confirmable  = confirmable,
                messageId    = messageId,
                code         = code,
                token        = token,
                options      = uriOptions+options,
                payload      = payload,
                ackTimeout   = self.ackTimeout,
                respTimeout  = self.respTimeout,
            )
            key              = (destIp,destPort,token,messageId)
            assert key not in self.transmitters.keys()
            self.transmitters[key] = newTransmitter

        return newTransmitter.transmit()
Ejemplo n.º 2
0
    def _transmit(self, uri, confirmable, code, options=[], payload=None):
        assert code in d.METHOD_ALL
        if code in [d.METHOD_GET, d.METHOD_DELETE]:
            assert payload == None
        assert type(uri) == str

        (destIp, destPort, uriOptions) = coapUri.uri2options(uri)

        with self.transmittersLock:
            self._cleanupTransmitter()
            messageId = self._getMessageID(destIp, destPort)
            token = self._getToken(destIp, destPort)
            newTransmitter = coapTransmitter.coapTransmitter(
                sendFunc=self.socketUdp.sendUdp,
                srcIp=self.ipAddress,
                srcPort=self.udpPort,
                destIp=destIp,
                destPort=destPort,
                confirmable=confirmable,
                messageId=messageId,
                code=code,
                token=token,
                options=uriOptions + options,
                payload=payload,
                respTimeout=self.respTimeout,
            )
            key = (destIp, destPort, token, messageId)
            assert key not in self.transmitters.keys()
            self.transmitters[key] = newTransmitter

        return newTransmitter.transmit()
Ejemplo n.º 3
0
    def _transmit(self, uri, confirmable, code, options=[], payload=[]):
        assert code in d.METHOD_ALL
        if code in [d.METHOD_GET, d.METHOD_DELETE]:
            assert payload == []
        assert type(uri) == str

        (host, destPort, uriOptions) = coapUri.uri2options(uri)
        destIp = socket.getaddrinfo(host, destPort)[0][4][0]
        (securityContext, sequenceNumber) = oscoap.getRequestSecurityParams(
            oscoap.objectSecurityOptionLookUp(options))

        with self.transmittersLock:
            self._cleanupTransmitter()
            messageId = self._getMessageID(destIp, destPort)
            token = self._getToken(destIp, destPort)
            newTransmitter = coapTransmitter.coapTransmitter(
                sendFunc=self.socketUdp.sendUdp,
                srcIp=self.ipAddress,
                srcPort=self.udpPort,
                destIp=destIp,
                destPort=destPort,
                confirmable=confirmable,
                messageId=messageId,
                code=code,
                token=token,
                options=uriOptions + options,
                payload=payload,
                securityContext=securityContext,
                requestSeq=sequenceNumber,
                ackTimeout=self.ackTimeout,
                respTimeout=self.respTimeout,
                maxRetransmit=self.maxRetransmit)
            key = (destIp, destPort, token, messageId)
            assert key not in self.transmitters.keys()
            self.transmitters[key] = newTransmitter

        response = newTransmitter.transmit()

        if securityContext:
            try:
                (innerOptions, plaintext) = oscoap.unprotectMessage(
                    securityContext,
                    version=response['version'],
                    code=response['code'],
                    options=response['options'],
                    ciphertext=response['ciphertext'],
                    partialIV=sequenceNumber,
                )
                response['options'] = response['options'] + innerOptions
                response['payload'] = plaintext
            except e.oscoapError:
                raise

        return response