"""
+ debuglevel = 0
server_version = "SimpleHTTP/" + __version__
def on_query(self, client, reqtype, *args):
self.client = client
self.hr = args[0]
- print "on_query", reqtype, repr(self.hr.headers), str(self.hr.headers)
+ if self.debuglevel > 0:
+ print "on_query", reqtype, repr(self.hr.headers), \
+ str(self.hr.headers)
session = self.client.session
p = self.proxies.get(session, None)
if not p:
proxy.connect()
self.proxies[session] = proxy
- multitask.add(self.proxy_relay(reqtype))
+ yield self.proxy_relay(reqtype)
- return True
+ #while p.serving:
+ # (yield multitask.sleep(0.01))
+
+ raise StopIteration
def onPOST(self, client, *args):
"""Serve a POST request."""
- return self.on_query(client, "POST", *args)
+ yield self.on_query(client, "POST", *args)
def onGET(self, client, *args):
"""Serve a GET request."""
- return self.on_query(client, "GET", *args)
+ yield self.on_query(client, "GET", *args)
def proxy_relay(self, reqtype):
session = self.client.session
p = self.proxies[session]
- #while p.serving:
- # (yield multitask.sleep(0.01))
p.serving = True
try:
# send command
req = "%s %s %s\n" % (reqtype, self.hr.path, "HTTP/1.1")
- print "req", req
+ if self.debuglevel > 0:
+ print "req", req
yield p.ss.write(req)
conntype = self.hr.headers.get('Connection', "")
# send headers
hdrs = str(self.hr.headers)
- print "hdrs", hdrs
+ if self.debuglevel > 0:
+ print "hdrs", hdrs
yield p.ss.write(hdrs)
yield p.ss.write('\r\n')
max_chunk_size = 10*1024*1024
size_remaining = int(self.hr.headers["content-length"])
L = []
- print "size_remaining", size_remaining
+ if self.debuglevel > 0:
+ print "size_remaining", size_remaining
while size_remaining:
chunk_size = min(size_remaining, max_chunk_size)
data = self.hr.rfile.read(chunk_size)
- print "proxy rfile read", repr(data)
+ if self.debuglevel > 0:
+ print "proxy rfile read", repr(data)
yield multitask.send(p.sock, data)
size_remaining -= len(data)
try:
while 1:
line = (yield p.ss.readline())
- print "reading from proxy", repr(line)
+ if self.debuglevel > 0:
+ print "reading from proxy", repr(line)
res += line
if line in ['\n', '\r\n']:
break
except StopIteration:
- if httpd._debug: print "proxy read stopiter"
+ if self.debuglevel > 0:
+ print "proxy read stopiter"
# TODO: close connection
except:
- if httpd._debug:
+ if self.debuglevel > 0:
print 'proxy read error', \
(traceback and traceback.print_exc() or None)
# TODO: close connection
# Examine the headers and look for a Connection directive
respheaders = mimetools.Message(f, 0)
- print "response headers", str(respheaders)
+ if self.debuglevel > 0:
+ print "response headers", str(respheaders)
remote = self.client.remote
rcooks = httpd.process_cookies(respheaders, remote, "Set-Cookie", False)
rcooks['session'] = self.hr.response_cookies['session'].value # nooo
rcooks['session']['expires'] = \
self.hr.response_cookies['session']['expires']
self.hr.response_cookies = rcooks
- print "rcooks", str(rcooks)
+ if self.debuglevel > 0:
+ print "rcooks", str(rcooks)
# override connection: keep-alive hack
#responseline = responseline.split(" ")
self.hr.close_connection = 0
# write rest of data
- print "writing to client body"
+ if self.debuglevel > 0:
+ print "writing to client body"
yield self.client.writeMessage("\r\n")
if respheaders.has_key('content-length'):
while size_remaining:
chunk_size = min(size_remaining, max_chunk_size)
data = (yield p.ss.read(chunk_size))
- print "reading from proxy expecting", size_remaining, repr(data)
+ if self.debuglevel > 0:
+ print "reading from proxy expecting", \
+ size_remaining, repr(data)
yield self.client.writeMessage(data)
size_remaining -= len(data)
else:
data = (yield p.ss.read(1024))
except httpd.ConnectionClosed:
break
- print "reading from proxy", repr(data)
+ if self.debuglevel > 0:
+ print "reading from proxy", repr(data)
if data == '':
break
yield self.client.writeMessage(data)
if not keepalive: #self.hr.close_connection:
- print 'proxy wants client to close_connection'
+ if self.debuglevel > 0:
+ print 'proxy wants client to close_connection'
try:
yield self.client.connectionClosed()
+ p.serving = False
raise httpd.ConnectionClosed
except httpd.ConnectionClosed:
- print 'close_connection done'
+ if self.debuglevel > 0:
+ print 'close_connection done'
pass
p.serving = False
# there's nothing there to talk to.
self.client.removeConnection()
self.proxies.pop(session)
+
except:
- print traceback.print_exc()
+ if self.debuglevel > 0:
+ print traceback.print_exc()
-
+ p.serving = False
raise StopIteration