home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2012 January / maximum-cd-2012-01.iso / DiscContents / digsby_setup.exe / lib / jabber / filetransfer / s5b_proxy_sender.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2011-10-05  |  3.5 KB  |  98 lines

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