def handle(self): """Handle requests. WARNING! You must call prepare BEFORE calling handle. """ assert self.prepared, "You have to call prepare before handle" rset, wset, xset = self._select() for readable in rset: if readable == self._read.fileno(): # don't care i just need to clean readable flag self._read.recv(1024) elif readable in self.socket.handles: client_socket = self.socket.accept() connection = Connection(client_socket, self) self.clients[client_socket.fileno()] = connection else: connection = self.clients[readable] connection.read() if connection.status == WAIT_PROCESS: itransport = TTransport.TMemoryBuffer(connection.message) # Header protocol needs oprot == iprot. This implies the # input memory buffer is reused for output too. if isinstance(self.in_protocol, THeaderProtocolFactory): omembuf = itransport iprot = self.in_protocol.getProtocol(itransport) oprot = iprot else: # Otherwise, assume we need a TFramedTransport. omembuf = TTransport.TMemoryBuffer() itransport = TTransport.TFramedTransport(itransport) otransport = TTransport.TFramedTransport(omembuf) iprot = self.in_protocol.getProtocol(itransport) oprot = self.out_protocol.getProtocol(otransport) if self.max_queue_size == 0 or \ self.tasks.qsize() <= self.max_queue_size: self.tasks.put([ self.processor, iprot, oprot, omembuf, connection ]) else: logging.error( "Queue max size of %d exceeded. Request rejected.", self.max_queue_size) for writeable in wset: self.clients[writeable].write() for oob in xset: if oob in self.clients: connection = self.clients[oob] connection.close()
def _get_client(self, options): socket = TSocket.TSocket(unix_socket=options.path) if options.framed: transport = TTransport.TFramedTransport(socket) else: transport = TTransport.TBufferedTransport(socket) return self._get_client_by_transport(options, transport, socket=socket)
def _get_client(self, options): host, port = self._parse_host_port(options.host, self.default_port) socket = (TSSLSocket.TSSLSocket(host, port) if options.ssl else TSocket.TSocket(host, port)) if options.framed: transport = TTransport.TFramedTransport(socket) else: transport = TTransport.TBufferedTransport(socket) return self._get_client_by_transport(options, transport, socket=socket)
def _get_client_by_host(self): config = self.config host, port = self._parse_host_port(config.host, self.default_port) socket = (TSSLSocket.TSSLSocket(host, port) if config.ssl else TSocket.TSocket(host, port)) if config.framed: transport = TTransport.TFramedTransport(socket) else: transport = TTransport.TBufferedTransport(socket) return self._get_client_by_transport(config, transport, socket=socket)