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)
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)
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)
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)