Mercurial > bitten > bitten-test
view scripts/proxy.py @ 239:bc7b77236011
Add MD5-based integrity checks for the snapshot archives maintained by the build master. If an archive is corrupted (for example by interruption of the archive creation), the build master will detect this because the MD5 checksum file is either missing, or does not match. Closes #56.
Thanks to Chandler Carruth for the suggestion!
author | cmlenz |
---|---|
date | Sun, 02 Oct 2005 13:02:03 +0000 |
parents | 2269b705deb9 |
children |
line wrap: on
line source
# Based on the proxy module from the Medusa project # Used for inspecting the communication between two BEEP peers import asynchat import asyncore import socket import sys class proxy_server(asyncore.dispatcher): def __init__(self, host, port): asyncore.dispatcher.__init__ (self) self.create_socket(socket.AF_INET, socket.SOCK_STREAM) self.set_reuse_addr() self.there = (host, port) here = ('', port + 1) self.bind(here) self.listen(5) def handle_accept(self): proxy_receiver(self, self.accept()) class proxy_sender(asynchat.async_chat): def __init__(self, receiver, address): asynchat.async_chat.__init__(self) self.receiver = receiver self.set_terminator(None) self.create_socket(socket.AF_INET, socket.SOCK_STREAM) self.buffer = '' self.set_terminator('\r\n') self.connect(address) print 'L:', '<wait for incoming connections>' def handle_connect(self): print 'L:', '<open connection>' def collect_incoming_data(self, data): self.buffer = self.buffer + data def found_terminator(self): data = self.buffer self.buffer = '' for line in data.splitlines(): print 'L:', '\x1b[35m' + line + '\x1b[0m' self.receiver.push(data + '\r\n') def handle_close(self): self.receiver.close() self.close() class proxy_receiver(asynchat.async_chat): channel_counter = 0 def __init__(self, server, (conn, addr)): asynchat.async_chat.__init__(self, conn) self.set_terminator('\r\n') self.server = server self.id = self.channel_counter self.channel_counter = self.channel_counter + 1 self.sender = proxy_sender (self, server.there) self.sender.id = self.id self.buffer = '' def collect_incoming_data (self, data): self.buffer = self.buffer + data def found_terminator(self): data = self.buffer self.buffer = '' for line in data.splitlines(): print 'I:', '\x1b[34m' + line + '\x1b[0m' self.sender.push (data + '\r\n') def handle_connect(self): print 'I:', '<open connection>' def handle_close(self): print 'I:', '<close connection>' self.sender.close() self.close() if __name__ == '__main__': if len(sys.argv) < 3: print 'Usage: %s <server-host> <server-port>' % sys.argv[0] else: ps = proxy_server(sys.argv[1], int(sys.argv[2])) asyncore.loop()