示例#1
0
    def _openLinks(self, conn):
        link = proton.pn_link_head(conn, proton.PN_LOCAL_UNINIT)
        while link:
            self.log.debug("Opening Link")
            proton.pn_terminus_copy(proton.pn_link_source(link),
                                    proton.pn_link_remote_source(link))
            proton.pn_terminus_copy(proton.pn_link_target(link),
                                    proton.pn_link_remote_target(link))

            ssn = proton.pn_link_session(link)
            client = proton.pn_session_get_context(ssn)
            if proton.pn_link_is_sender(link):
                if client.sender != link:
                    self.log.debug("Already have a sender opened for session")
                    proton.pn_link_close(link)
                else:
                    self.log.debug("Opening Link to send messages")
                    proton.pn_link_open(link)

            elif proton.pn_link_is_receiver(link):
                self.log.debug("Opening Link to recv messages")
                proton.pn_link_open(link)
                proton.pn_link_flow(link, MBUFF_SIZE)

            link = proton.pn_link_next(link, proton.PN_LOCAL_UNINIT)
示例#2
0
    def _openLinks(self, conn):
        link = proton.pn_link_head(conn, proton.PN_LOCAL_UNINIT)
        while link:
            self.log.debug("Opening Link")
            proton.pn_terminus_copy(proton.pn_link_source(link),
                                    proton.pn_link_remote_source(link))
            proton.pn_terminus_copy(proton.pn_link_target(link),
                                    proton.pn_link_remote_target(link))

            ssn = proton.pn_link_session(link)
            client = proton.pn_session_get_context(ssn)
            if proton.pn_link_is_sender(link):
                if client.sender != link:
                    self.log.debug("Already have a sender opened for session")
                    proton.pn_link_close(link)
                else:
                    self.log.debug("Opening Link to send messages")
                    proton.pn_link_open(link)

            elif proton.pn_link_is_receiver(link):
                self.log.debug("Opening Link to recv messages")
                proton.pn_link_open(link)
                proton.pn_link_flow(link, MBUFF_SIZE)

            link = proton.pn_link_next(link, proton.PN_LOCAL_UNINIT)
示例#3
0
    def _openClientSession(self):
        host, port = self._address
        amqpAddress = "ampq://%s:%d/vdsm" % (host, port)
        senderName = "jsonrpc.ProtonClient %s (%s)" % (
            str(uuid.uuid4()),
            amqpAddress,
        )
        self.log = logging.getLogger(senderName)

        self.connector = proton.pn_connector(self._reactor._driver, host,
                                             str(port), None)
        if self.connector is None:
            raise ProtonError("Could not create connector")

        self.connection = proton.pn_connection()
        proton.pn_connector_set_connection(self.connector, self.connection)

        sasl = proton.pn_connector_sasl(self.connector)
        proton.pn_sasl_mechanisms(sasl, "ANONYMOUS")
        proton.pn_sasl_client(sasl)

        proton.pn_connector_set_context(self.connector, CLIENT_AUTH)
        self.log.debug("Opening active connection")
        proton.pn_connection_open(self.connection)

        while True:
            # TODO: Handle connection being closed mid authentication
            if proton.pn_sasl_state(sasl) in (proton.PN_SASL_PASS, ):
                proton.pn_connector_set_context(self.connector, CONNECTED)
                break

            if proton.pn_sasl_state(sasl) == proton.PN_SASL_FAIL:
                yield Return(-1)

            yield

        self.session = proton.pn_session(self.connection)
        proton.pn_session_open(self.session)
        proton.pn_session_set_context(self.session, self)

        link = proton.pn_sender(self.session, senderName)
        dst = proton.pn_link_target(link)
        proton.pn_terminus_set_address(dst, amqpAddress)
        self.sender = link
        yield Return(1)
示例#4
0
    def _openClientSession(self):
        host, port = self._address
        amqpAddress = "ampq://%s:%d/vdsm" % (host, port)
        senderName = "jsonrpc.ProtonClient %s (%s)" % (str(uuid.uuid4()),
                                                       amqpAddress,)
        self.log = logging.getLogger(senderName)

        self.connector = proton.pn_connector(self._reactor._driver,
                                             host, str(port), None)
        if self.connector is None:
            raise ProtonError("Could not create connector")

        self.connection = proton.pn_connection()
        proton.pn_connector_set_connection(self.connector, self.connection)

        sasl = proton.pn_connector_sasl(self.connector)
        proton.pn_sasl_mechanisms(sasl, "ANONYMOUS")
        proton.pn_sasl_client(sasl)

        proton.pn_connector_set_context(self.connector, CLIENT_AUTH)
        self.log.debug("Opening active connection")
        proton.pn_connection_open(self.connection)

        while True:
            # TODO: Handle connection being closed mid authentication
            if proton.pn_sasl_state(sasl) in (proton.PN_SASL_PASS,):
                proton.pn_connector_set_context(self.connector, CONNECTED)
                break

            if proton.pn_sasl_state(sasl) == proton.PN_SASL_FAIL:
                yield Return(-1)

            yield

        self.session = proton.pn_session(self.connection)
        proton.pn_session_open(self.session)
        proton.pn_session_set_context(self.session, self)

        link = proton.pn_sender(self.session, senderName)
        dst = proton.pn_link_target(link)
        proton.pn_terminus_set_address(dst, amqpAddress)
        self.sender = link
        yield Return(1)
示例#5
0
    def _openLinks(self, conn):
        link = proton.pn_link_head(conn, proton.PN_LOCAL_UNINIT)
        while link:
            self.log.debug("Opening Link")
            proton.pn_terminus_copy(proton.pn_link_source(link),
                                    proton.pn_link_remote_source(link))
            proton.pn_terminus_copy(proton.pn_link_target(link),
                                    proton.pn_link_remote_target(link))

            ssn = proton.pn_link_session(link)
            if proton.pn_link_is_sender(link):
                for ctx in self._sessionContexts:
                    if ctx['session'] != ssn:
                        continue

                    ctx['links'].append(link)
                self.log.debug("Opening Link to send Events")

            if proton.pn_link_is_receiver(link):
                self.log.debug("Opening Link to recv messages")
                proton.pn_link_flow(link, 1)

            proton.pn_link_open(link)
            link = proton.pn_link_next(link, proton.PN_LOCAL_UNINIT)