def handle_read(self): self.read_blocked_on_read = False self.read_blocked_on_write = False try: HTTPChannel.handle_read(self) except ESSLWantWrite,error: self.want_write = True self.read_blocked_on_write = True self.log_debug("handle-read retry: want-write.", level=2)
def handle_write_event(self): self.want_write = False if not self.ssl: self.log_debug("write-event ignored: no socket.", level=2) elif self.read_blocked_on_write: self.log_debug("write-event invoking handle-read", level=1) self.handle_read() elif self.read_blocked_on_read: self.log_debug("read-event ignored: read blocked.", level=2) elif self.write_blocked_on_read and self.want_read: self.log_debug("write-event ignored: write wait read.", level=2) else: self.log_debug("write-event propagating.", level=3) HTTPChannel.handle_write_event(self)
def __init__(self, server, conn, addr): self._fileno = None self.ssl = None self.want_read = False self.want_write = False self.read_blocked = False self.write_blocked = False self.pending_write_buffer = "" self.read_blocked_on_read = False self.read_blocked_on_write = False self.write_blocked_on_read = False self.write_blocked_on_write = False self.watching_readable = False self.watching_writable = False self.error_occurred = False self.context = server.get_context() HTTPChannel.__init__(self, server, conn, addr)
def __getattr__(self, name): self.log_debug("__getattr__(%r)", name) if self.ssl: try: attribute = getattr(self.ssl, name) except AttributeError: msglog.warn("Failed attribute lookup: %r." % name) else: return attribute return HTTPChannel.__getattr__(self, name)
def close(self): if self.error_occurred: self.log_debug("closing SSL connection after error.") else: self.log_debug("closing SSL connection", level=3) if self.ssl: try: self.ssl.close() except: msglog.exception(prefix="handled") self.ssl = None self.context = None if self._current_request: try: self._current_request.handle_close() except: msglog.exception(prefix = 'handled') HTTPChannel.close(self) self.socket = None
def handle_close(self): self.log_debug("handle-close called.", level=2) HTTPChannel.handle_close(self)
def writable(self): self.watching_writable = self.want_write or HTTPChannel.writable(self) return self.watching_writable
def readable(self): self.watching_readable = self.want_read or HTTPChannel.readable(self) return self.watching_readable