home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2009 June / maximum-cd-2009-06.iso / DiscContents / digsby_setup.exe / lib / jabber / filetransfer / s5b_proxy_sender.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-02-26  |  3.4 KB  |  98 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. from struct import unpack
  5. from jabber.filetransfer.S5BFileXferHandler import SocketEventMixin
  6. import util
  7. from struct import pack
  8. from jabber.filetransfer.socketserver import ProxyFailure
  9. import common
  10. from functools import partial
  11. from logging import getLogger
  12. log = getLogger('S5B_proxyConnect')
  13.  
  14. class S5B_proxyConnect(common.socket, SocketEventMixin):
  15.     
  16.     def __init__(self, addr, hash, streamhost):
  17.         SocketEventMixin.__init__(self)
  18.         self.handle_expt = self.post_connect_expt
  19.         self.handle_error = self.post_connect_error
  20.         self.handle_close = self.post_connect_close
  21.         self.do_disconnect = self.post_connect_disconnect
  22.         self.addr = addr
  23.         self.hash = hash
  24.         self.streamhost = streamhost
  25.         self.data = None
  26.         common.socket.__init__(self)
  27.  
  28.     
  29.     def get_connect(self):
  30.         self.connect(self.addr)
  31.  
  32.     
  33.     def handle_connect(self):
  34.         log.info('connect to %s', self.addr)
  35.         self.proc(self.s5b_ok())
  36.  
  37.     
  38.     def collect_incoming_data(self, data):
  39.         pass
  40.  
  41.     
  42.     def s5b_ok(self):
  43.         yield (2, pack('BBB', 5, 1, 0))
  44.         ok = None
  45.         (_head, authmethod) = unpack('BB', ok)
  46.         if authmethod != 0:
  47.             raise ProxyFailure()
  48.         
  49.         out = pack('!BBBBB40sH', 5, 1, 0, 3, 40, self.hash, 0)
  50.         in_fmt = ('!BBBB', 's5head', 'status', 'reserved', 'addrtype')
  51.         yield (4, out)
  52.         in_ = None
  53.         head = util.unpack_named(*in_fmt + (in_,))
  54.         if head.addrtype == 3:
  55.             yield (1, '')
  56.             head.addrlen = None
  57.             head.addrlen = ord(head.addrlen)
  58.             if head.addrlen > 0:
  59.                 yield (head.addrlen, '')
  60.                 address = None
  61.             else:
  62.                 address = ''
  63.         
  64.         yield (2, '')
  65.         _port = None
  66.         if head.status != 0:
  67.             raise ProxyFailure()
  68.         
  69.         log.info('proxy ok, calling on_success')
  70.         self.event('connected')
  71.  
  72.     
  73.     def proc(self, gen):
  74.         
  75.         try:
  76.             (to_read, out_bytes) = gen.send(self.data)
  77.         except ProxyFailure:
  78.             self.close()
  79.             self.event('connection_failed')
  80.             return None
  81.         except StopIteration:
  82.             return None
  83.         except:
  84.             pass
  85.  
  86.         bytes = str(out_bytes)
  87.         if out_bytes:
  88.             self.push(bytes)
  89.         
  90.         self.data = ''
  91.         self.found_terminator = partial(self.proc, gen)
  92.         if isinstance(to_read, int):
  93.             self.set_terminator(to_read)
  94.         else:
  95.             self.set_terminator(to_read._size())
  96.  
  97.  
  98.