Index: third_party/twisted_8_1/twisted/protocols/socks.py |
diff --git a/third_party/twisted_8_1/twisted/protocols/socks.py b/third_party/twisted_8_1/twisted/protocols/socks.py |
deleted file mode 100644 |
index eda2e972357687db558d48159aa51a5c5b479e24..0000000000000000000000000000000000000000 |
--- a/third_party/twisted_8_1/twisted/protocols/socks.py |
+++ /dev/null |
@@ -1,173 +0,0 @@ |
-# Copyright (c) 2001-2004 Twisted Matrix Laboratories. |
-# See LICENSE for details. |
- |
- |
-""" |
-Implementation of the SOCKSv4 protocol. |
-""" |
- |
-# twisted imports |
-from twisted.internet import reactor, protocol, defer |
-from twisted.python import log |
- |
-# python imports |
-import struct |
-import string |
-import socket |
-import time |
- |
- |
-class SOCKSv4Outgoing(protocol.Protocol): |
- |
- def __init__(self,socks): |
- self.socks=socks |
- |
- def connectionMade(self): |
- peer = self.transport.getPeer() |
- self.socks.makeReply(90, 0, port=peer.port, ip=peer.host) |
- self.socks.otherConn=self |
- |
- def connectionLost(self, reason): |
- self.socks.transport.loseConnection() |
- |
- def dataReceived(self,data): |
- self.socks.write(data) |
- |
- def write(self,data): |
- self.socks.log(self,data) |
- self.transport.write(data) |
- |
- |
-class SOCKSv4Incoming(protocol.Protocol): |
- |
- def __init__(self,socks): |
- self.socks=socks |
- self.socks.otherConn=self |
- |
- def connectionLost(self, reason): |
- self.socks.transport.loseConnection() |
- |
- def dataReceived(self,data): |
- self.socks.write(data) |
- |
- def write(self,data): |
- self.socks.log(self,data) |
- self.transport.write(data) |
- |
- |
-class SOCKSv4(protocol.Protocol): |
- |
- def __init__(self,logging=None): |
- self.logging=logging |
- |
- def connectionMade(self): |
- self.buf="" |
- self.otherConn=None |
- |
- def dataReceived(self,data): |
- if self.otherConn: |
- self.otherConn.write(data) |
- return |
- self.buf=self.buf+data |
- if '\000' in self.buf[8:]: |
- head,self.buf=self.buf[:8],self.buf[8:] |
- try: |
- version,code,port=struct.unpack("!BBH",head[:4]) |
- except struct.error: |
- raise RuntimeError, "struct error with head='%s' and buf='%s'"%(repr(head),repr(self.buf)) |
- user,self.buf=string.split(self.buf,"\000",1) |
- if head[4:7]=="\000\000\000": # domain is after |
- server,self.buf=string.split(self.buf,'\000',1) |
- #server=gethostbyname(server) |
- else: |
- server=socket.inet_ntoa(head[4:8]) |
- assert version==4, "Bad version code: %s"%version |
- if not self.authorize(code,server,port,user): |
- self.makeReply(91) |
- return |
- if code==1: # CONNECT |
- d = self.connectClass(server, port, SOCKSv4Outgoing, self) |
- d.addErrback(lambda result, self=self: self.makeReply(91)) |
- elif code==2: # BIND |
- ip = socket.gethostbyname(server) |
- d = self.listenClass(0, SOCKSv4IncomingFactory, self, ip) |
- d.addCallback(lambda (h, p), self=self: self.makeReply(90, 0, p, h)) |
- else: |
- raise RuntimeError, "Bad Connect Code: %s" % code |
- assert self.buf=="","hmm, still stuff in buffer... %s" % repr(self.buf) |
- |
- def connectionLost(self, reason): |
- if self.otherConn: |
- self.otherConn.transport.loseConnection() |
- |
- def authorize(self,code,server,port,user): |
- log.msg("code %s connection to %s:%s (user %s) authorized" % (code,server,port,user)) |
- return 1 |
- |
- def connectClass(self, host, port, klass, *args): |
- return protocol.ClientCreator(reactor, klass, *args).connectTCP(host,port) |
- |
- def listenClass(self, port, klass, *args): |
- serv = reactor.listenTCP(port, klass(*args)) |
- return defer.succeed(serv.getHost()[1:]) |
- |
- def makeReply(self,reply,version=0,port=0,ip="0.0.0.0"): |
- self.transport.write(struct.pack("!BBH",version,reply,port)+socket.inet_aton(ip)) |
- if reply!=90: self.transport.loseConnection() |
- |
- def write(self,data): |
- self.log(self,data) |
- self.transport.write(data) |
- |
- def log(self,proto,data): |
- if not self.logging: return |
- peer = self.transport.getPeer() |
- their_peer = self.otherConn.transport.getPeer() |
- f=open(self.logging,"a") |
- f.write("%s\t%s:%d %s %s:%d\n"%(time.ctime(), |
- peer.host,peer.port, |
- ((proto==self and '<') or '>'), |
- their_peer.host,their_peer.port)) |
- while data: |
- p,data=data[:16],data[16:] |
- f.write(string.join(map(lambda x:'%02X'%ord(x),p),' ')+' ') |
- f.write((16-len(p))*3*' ') |
- for c in p: |
- if len(repr(c))>3: f.write('.') |
- else: f.write(c) |
- f.write('\n') |
- f.write('\n') |
- f.close() |
- |
- |
-class SOCKSv4Factory(protocol.Factory): |
- """A factory for a SOCKSv4 proxy. |
- |
- Constructor accepts one argument, a log file name. |
- """ |
- |
- def __init__(self, log): |
- self.logging = log |
- |
- def buildProtocol(self, addr): |
- return SOCKSv4(self.logging) |
- |
- |
-class SOCKSv4IncomingFactory(protocol.Factory): |
- """A utility class for building protocols for incoming connections.""" |
- |
- def __init__(self, socks, ip): |
- self.socks = socks |
- self.ip = ip |
- |
- def buildProtocol(self, addr): |
- if addr[0] == self.ip: |
- self.ip = "" |
- self.socks.makeReply(90, 0) |
- return SOCKSv4Incoming(self.socks) |
- elif self.ip == "": |
- return None |
- else: |
- self.socks.makeReply(91, 0) |
- self.ip = "" |
- return None |