diff options
author | Rob Austein <sra@hactrn.net> | 2009-07-18 07:14:49 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2009-07-18 07:14:49 +0000 |
commit | ad8c775eccee8f666087e63f3a13931eacb4c5dd (patch) | |
tree | 30caa275c9f6ff6c1d0a011b47355669e3d01c2f | |
parent | 4468d7e7e1d8a5411aa114e5a1e9d7c1b899174a (diff) |
Document a bunch of assertions. Fiddle with HTTPS timeouts.
svn path=/rpkid/rpki/async.py; revision=2643
-rw-r--r-- | rpkid/rpki/async.py | 2 | ||||
-rw-r--r-- | rpkid/rpki/https.py | 37 |
2 files changed, 24 insertions, 15 deletions
diff --git a/rpkid/rpki/async.py b/rpkid/rpki/async.py index a3847823..c7cd61b7 100644 --- a/rpkid/rpki/async.py +++ b/rpkid/rpki/async.py @@ -113,7 +113,7 @@ class timer(object): self.when = rpki.sundial.now() + when else: self.when = when - assert isinstance(self.when, rpki.sundial.datetime) + assert isinstance(self.when, rpki.sundial.datetime), "%r: Expecting a datetime, got %r" % (self, self.when) if self not in self.queue: self.queue.append(self) self.queue.sort() diff --git a/rpkid/rpki/https.py b/rpkid/rpki/https.py index 8de3695f..2494d2ac 100644 --- a/rpkid/rpki/https.py +++ b/rpkid/rpki/https.py @@ -46,17 +46,22 @@ rpki_content_type = "application/x-rpki" # ================================================================ # Chatter about TLS certificates -debug_tls_certs = True +debug_tls_certs = False # Verbose chatter about HTTP streams -debug = True +debug = False # Whether we want persistent HTTP streams, when peer also supports them want_persistent_client = True want_persistent_server = True -# Default HTTP connection timeout (set very short for initial testing) -default_timeout = rpki.sundial.timedelta(seconds = 90) +# Default HTTP connection timeouts (set very short for initial +# testing). Given our druthers, we'd prefer that the client close the +# connection, as this avoids the problem of client starting to reuse +# connection just as server decides to close it. + +default_client_timeout = rpki.sundial.timedelta(seconds = 90) +default_server_timeout = rpki.sundial.timedelta(seconds = 180) default_http_version = (1, 0) @@ -178,8 +183,6 @@ class http_stream(asynchat.async_chat): retry_read = None retry_write = None - timeout = default_timeout - def __init__(self, conn = None): asynchat.async_chat.__init__(self, conn = conn) self.buffer = [] @@ -250,13 +253,13 @@ class http_stream(asynchat.async_chat): def chunk_discard_crlf(self): self.log("Chunk CRLF") s = self.get_buffer() - assert s == "", "Expected chunk CRLF, got '%s'" % s + assert s == "", "%r: Expected chunk CRLF, got '%s'" % (self, s) self.chunk_handler = self.chunk_header def chunk_discard_trailer(self): self.log("Chunk trailer") s = self.get_buffer() - assert s == "", "Expected end of chunk trailers, got '%s'" % s + assert s == "", "%r: Expected end of chunk trailers, got '%s'" % (self, s) self.chunk_handler = None self.handle_message() @@ -283,11 +286,13 @@ class http_stream(asynchat.async_chat): self.timer.cancel() def send(self, data): - assert self.retry_read is None and self.retry_write is None, "TLS I/O already in progress, r %r w %r" % (self.retry_read, self.retry_write) + assert self.retry_read is None and self.retry_write is None, "%r: TLS I/O already in progress, r %r w %r" % (self, self.retry_read, self.retry_write) + assert self.tls is not None return self.tls.write(data) def recv(self, buffer_size): - assert self.retry_read is None and self.retry_write is None, "TLS I/O already in progress, r %r w %r" % (self.retry_read, self.retry_write) + assert self.retry_read is None and self.retry_write is None, "%r: TLS I/O already in progress, r %r w %r" % (self, self.retry_read, self.retry_write) + assert self.tls is not None return self.tls.read(buffer_size) def readable(self): @@ -297,7 +302,7 @@ class http_stream(asynchat.async_chat): return self.retry_write is not None or (self.retry_read is None and asynchat.async_chat.writeable(self)) def handle_read(self): - assert self.retry_write is None + assert self.retry_write is None, "%r: TLS I/O already in progress, w %r" % (self, self.retry_write) if self.retry_read is not None: thunk = self.retry_read self.retry_read = None @@ -318,7 +323,7 @@ class http_stream(asynchat.async_chat): self.close(force = True) def handle_write(self): - assert self.retry_read is None + assert self.retry_read is None, "%r: TLS I/O already in progress, r %r" % (self, self.retry_read) if self.retry_write is not None: thunk = self.retry_write self.retry_write = None @@ -328,7 +333,7 @@ class http_stream(asynchat.async_chat): asynchat.async_chat.handle_write(self) def initate_send(self): - assert self.retry_read is None and self.retry_write is None + assert self.retry_read is None and self.retry_write is None, "%r: TLS I/O already in progress, r %r w %r" % (self, self.retry_read, self.retry_write) try: asynchat.async_chat.initiate_send(self) except POW.WantReadError: @@ -344,7 +349,7 @@ class http_stream(asynchat.async_chat): def close(self, force = False): self.log("Close requested") - assert self.retry_read is None and self.retry_write is None + assert self.retry_read is None and self.retry_write is None, "%r: TLS I/O already in progress, r %r w %r" % (self, self.retry_read, self.retry_write) if self.tls is not None: try: ret = self.tls.shutdown() @@ -366,6 +371,8 @@ class http_server(http_stream): parse_type = http_request + timeout = default_server_timeout + def __init__(self, conn, handlers, cert = None, key = None, ta = (), dynamic_ta = None): self.log("Starting") self.handlers = handlers @@ -499,6 +506,8 @@ class http_client(http_stream): parse_type = http_response + timeout = default_client_timeout + def __init__(self, queue, hostport, cert = None, key = None, ta = ()): self.log("Creating new connection to %s" % repr(hostport)) self.log("cert %r key %r ta %r" % (cert, key, ta)) |