Example #1
0
    def unsubscribe(self):
        if not self.isSubscribed:
            return

        soapEnvelope = Soap12Envelope(
            Prefix.partialMap(Prefix.S12, Prefix.WSA, Prefix.WSE))
        soapEnvelope.setAddress(
            WsAddress(
                action=
                'http://schemas.xmlsoap.org/ws/2004/08/eventing/Unsubscribe',
                to=urllib.parse.urlunparse(self._subscriptionManagerAddress)))
        self._add_device_references(soapEnvelope)
        soapEnvelope.addBodyElement(etree_.Element(wseTag('Unsubscribe')))
        resultSoapEnvelope = self.dpwsHosted.soapClient.postSoapEnvelopeTo(
            self._subscriptionManagerAddress.path,
            soapEnvelope,
            msg='unsubscribe')
        responseAction = resultSoapEnvelope.address.action
        # check response: response does not contain explicit status. If action== UnsubscribeResponse all is fine.
        if responseAction == 'http://schemas.xmlsoap.org/ws/2004/08/eventing/UnsubscribeResponse':
            self._logger.info(
                'unsubscribe: end of subscription {} was confirmed.',
                self._filter)
        else:
            self._logger.error('unsubscribe: unexpected response action: {}',
                               resultSoapEnvelope.as_xml(pretty=True))
            raise RuntimeError(
                'unsubscribe: unexpected response action: {}'.format(
                    resultSoapEnvelope.as_xml(pretty=True)))
Example #2
0
 def _mkGetStatusEnvelope(self):
     soapEnvelope = Soap12Envelope(Prefix.partialMap(Prefix.S12, Prefix.WSA, Prefix.WSE))
     soapEnvelope.setAddress(WsAddress(action='http://schemas.xmlsoap.org/ws/2004/08/eventing/GetStatus',
                                       to=urllib.parse.urlunparse(self._subscriptionManagerAddress)))
     self._add_device_references(soapEnvelope)
     bodyNode = etree_.Element(wseTag('GetStatus'))
     soapEnvelope.addBodyElement(bodyNode)
     return soapEnvelope
Example #3
0
 def _mkRenewEnvelope(self, expire_minutes):
     soapEnvelope = Soap12Envelope(Prefix.partialMap(Prefix.S12, Prefix.WSA, Prefix.WSE))
     soapEnvelope.setAddress(WsAddress(action='http://schemas.xmlsoap.org/ws/2004/08/eventing/Renew',
                                       to=urllib.parse.urlunparse(self._subscriptionManagerAddress)))
     self._add_device_references(soapEnvelope)
     renewNode = etree_.Element(wseTag('Renew'), nsmap=Prefix.partialMap(Prefix.WSE))
     expiresNode = etree_.SubElement(renewNode, wseTag('Expires'), nsmap=Prefix.partialMap(Prefix.WSE))
     expiresNode.text = isoduration.durationString(expire_minutes * 60)
     soapEnvelope.addBodyElement(renewNode)
     return soapEnvelope
Example #4
0
    def _mkSubscribeEnvelope(self, subscribe_epr, expire_minutes):
        soapEnvelope = Soap12Envelope(Prefix.partialMap(Prefix.S12, Prefix.WSA, Prefix.WSE))
        soapEnvelope.setAddress(WsAddress(action='http://schemas.xmlsoap.org/ws/2004/08/eventing/Subscribe',
                                          to=subscribe_epr))

        body = WsSubscribe(notifyTo=WsaEndpointReferenceType(self._notification_url,
                                                             referenceParametersNode=[self.notifyTo_identifier]),
                           endTo=WsaEndpointReferenceType(self._endTo_url,
                                                          referenceParametersNode=[self._endTo_identifier]),
                           expires=expire_minutes * 60,
                           filter_=self._filter)
        soapEnvelope.addBodyObject(body)
        return soapEnvelope
    def _mkGetRequest(self, sdcDevice, porttype, method, endpoint_reference):
        if sdcDevice is self.sdcDevice_final:
            ns = sdcDevice.mdib.sdc_definitions.DPWS_SDCNamespace
        else:
            ns = sdcDevice.mdib.sdc_definitions.MessageModelNamespace
        action = '{}/{}/{}'.format(ns, porttype, method)
        bodyNode = etree_.Element(msgTag(method))
        soapEnvelope = Soap12Envelope(
            Prefix.partialMap(Prefix.S12, Prefix.WSA, Prefix.MSG))
        identifier = uuid.uuid4().urn
        soapEnvelope.addHeaderObject(
            WsAddress(messageId=identifier,
                      action=action,
                      to=endpoint_reference))
        soapEnvelope.addBodyObject(GenericNode(bodyNode))

        soapEnvelope.validateBody(sdcDevice.mdib.bicepsSchema.bmmSchema)
        return soapEnvelope