diff -r 125f3c97071e -r 2c93636202a5 rest.py --- a/rest.py Sat Nov 29 05:07:41 2014 +0200 +++ b/rest.py Fri Nov 28 22:45:55 2014 -0500 @@ -7,7 +7,7 @@ import re import json import urllib -import irc +import irc as Irc from datetime import datetime, timedelta from configfile import Config @@ -24,15 +24,15 @@ while i < len (g_throttle): if g_throttle[i][1] <= datetime.utcnow(): - print 'Throttle of %s expired' % g_throttle[i][0][0] + print 'Throttle of %s expired' % g_throttle[i][0] item = g_throttle.pop (i) # expired - if item[0][0] == address[0]: + if item[0] == address: return False # this address expired continue - if g_throttle[i][0][0] == address[0]: + if g_throttle[i][0] == address: return True # is throttled i += 1 @@ -53,7 +53,7 @@ def handle_rest_http (data, address): global g_credentials - displayaddress = '%s:%s' % address + displayaddress = address authrex = re.compile (r'^authorization: Basic (.+)$') payloadrex = re.compile (r'^payload=(.+)$') authenticated = False @@ -66,7 +66,7 @@ for line in data: match = authrex.match (line) - if match and match.group (1) == g_credentials) + if match and match.group (1) == g_credentials: authenticated = True continue @@ -84,7 +84,7 @@ try: jsondata = json.loads (jsonstring) repodata = jsondata['repository'] - repopath = '%s/%s' % (repodata['owner'], repodata['name'] + repopath = '%s/%s' % (repodata['owner'], repodata['name']) if repopath not in valid_repos: raise ValueError ('unknown repository %s' % repopath) @@ -108,8 +108,8 @@ class RESTConnection (asyncore.dispatcher): httpdata = '' - address=None writebuffer = '' + address = None def __init__ (self, conn, address): asyncore.dispatcher.__init__ (self, conn) @@ -117,6 +117,7 @@ certfile='cert.pem', do_handshake_on_connect=False) self.socket.setblocking (0) self.address = address + print 'Initialized connection handler for %s' % type (address) while True: try: @@ -128,8 +129,8 @@ elif err.args[0] == ssl.SSL_ERROR_WANT_WRITE: select.select([], [self.socket], []) else: - Irc.broadcast ('%s:%s: SSL error: %s' % (self.address[0], self.address[1], err)) - throttle (self.address) + Irc.broadcast ('%s:%s: SSL error: %s' % (self.address[0], err)) + throttle (self.address[0]) self.close() return @@ -149,7 +150,7 @@ while 1: try: data = self.recv (4096) - except ssl.SSLError, err: + except: # EOF self.finish() return @@ -157,7 +158,7 @@ self.httpdata += data.replace ('\r', '') def finish (self): - handle_rest_http (self.httpdata.split ('\n'), self.address) + handle_rest_http (self.httpdata.split ('\n'), self.address[0]) self.close() def handle_write (self): @@ -176,6 +177,7 @@ asyncore.dispatcher.__init__ (self) self.create_socket (socket.AF_INET, socket.SOCK_STREAM) + self.setsockopt (socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.bind (('', g_portnumber)) self.listen (5) print 'REST server initialized' @@ -189,7 +191,10 @@ return Irc.broadcast ('REST connection from %s:%s' % address) - RESTConnection (sock, address) + conn = RESTConnection (sock, address) + + if conn.address == None: + conn.__init__ (sock, address) # eh? def handle_error (self): return