self.connect(arg)
else:
asyncore.dispatcher.__init__(self, arg)
+ self.init()
+
+ def init(self):
+ self.end = False
self.other = None
self.buffer = ""
def handle_error(self):
print >>sys.stderr, "Proxy error:", traceback.format_exc()
- self.handle_close()
+ self.close()
def handle_read(self):
data = self.recv(8192)
def handle_write(self):
sent = self.send(self.buffer)
self.buffer = self.buffer[sent:]
+ if len(self.buffer) == 0 and self.end:
+ self.close()
def writable(self):
return len(self.buffer) > 0
if not self.other:
return
print >>sys.stderr, "Proxy closed"
- self.other.close()
self.close()
+ self.other.end = True
self.other = None
class ConnectProxy(asyncore.dispatcher):
def handle_error(self):
print >>sys.stderr, "ConnectProxy error:", traceback.format_exc()
- self.handle_close()
+ self.close()
def handle_read(self):
self.buffer += self.recv(8192)
# Create server proxy
server = Proxy((host, port))
+ server.buffer = self.buffer
# Morph and connect
self.__class__ = Proxy
+ self.init()
server.meet(self)
- server.buffer = self.buffer
- self.buffer = ""
class BasicForwarder(asyncore.dispatcher):