def open(self): if not is_open_compat(self._trans): self._trans.open() if self.sasl is not None: raise TTransportException( type=TTransportException.NOT_OPEN, message="Already open!") self.sasl = self.sasl_client_factory() ret, chosen_mech, initial_response = self.sasl.start(self.mechanism) if not ret: raise TTransportException(type=TTransportException.NOT_OPEN, message=("Could not start SASL: %s" % self.sasl.getError())) # Send initial response self._send_message(self.START, chosen_mech) self._send_message(self.OK, initial_response) # SASL negotiation loop while True: status, payload = self._recv_sasl_message() if status not in (self.OK, self.COMPLETE): raise TTransportException(type=TTransportException.NOT_OPEN, message=("Bad status: %d (%s)" % (status, payload))) if status == self.COMPLETE: break ret, response = self.sasl.step(payload) if not ret: raise TTransportException(type=TTransportException.NOT_OPEN, message=("Bad SASL result: %s" % (self.sasl.getError()))) self._send_message(self.OK, response)
def isOpen(self): return is_open_compat(self._trans)