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

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. import logging
  5. import struct
  6. import hooks
  7. import oscar
  8. import oscar.rendezvous as RDV
  9. log = logging.getLogger('oscar.rdv.icqrelay')
  10.  
  11. class IcqServerRelayer(RDV.peer.OscarPeer):
  12.     
  13.     def __init__(self, protocol, screenname, cookie):
  14.         RDV.peer.OscarPeer.__init__(self, protocol, screenname, cookie, oscar.capabilities.by_name['extended_msgs'])
  15.  
  16.     
  17.     def handle_request(self, reqtlvs):
  18.         log.info('request: %r', reqtlvs)
  19.         data = reqtlvs.extended_data
  20.         fmt = (('length1', 'H'), ('chunk1', 's', 'length1'), ('length2', 'H'), ('chunk2', 's', 'length2'))
  21.         (_, chunk1, _, chunk2, data) = oscar.unpack(fmt, data, byte_order = '<')
  22.         fmt = (('type', 'B'), ('flags', 'B'), ('status', 'H'), ('priority', 'H'), ('length', 'H'), ('message', 's', 'length'))
  23.         (type, flags, status, priority, _, message, data) = oscar.unpack(fmt, data, byte_order = '<')
  24.         if message:
  25.             message = message[:-1]
  26.             auto = flags & 2 == 2
  27.             if message:
  28.                 self.protocol.incoming_rtf_message(self.buddy, message)
  29.             
  30.             return None
  31.         fmt = (('length', 'H'), ('unknown', 's', 18), ('req_length', 'I'), ('request', 's', 'req_length'), ('phase', 'B'), ('unknown2', 's', 16), ('length2', 'I'), ('response_length', 'I'), ('response', 's', 'response_length'), ('enc_length', 'I'), ('encoding', 's', 'enc_length'))
  32.         
  33.         try:
  34.             (_, _, _, request, phase, _, _, _, response, _, content_type, data) = oscar.unpack(fmt, data, byte_order = '<')
  35.             log.info('request = %r, phase = %r, response = %r, encoding = %r, data = %r', request, phase, response, content_type, data)
  36.         except Exception:
  37.             message
  38.             message
  39.             import traceback
  40.             traceback.print_exc()
  41.         except:
  42.             message
  43.  
  44.         log.info('parsed request! %r', locals())
  45.         ex_data_header = struct.pack('<HH16sHIBHHH12sBBHHH', 27, 9, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 0, 0, 0, 100, 14, 100, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 26, 0, 0, 0, 0)
  46.         ex_data = self.build_ex_data(request, phase, response, content_type)
  47.         self.protocol.send_snac(*oscar.snac.send_x04_x0b(self.cookie, 2, self.screenname, 3, ex_data_header + ex_data))
  48.  
  49.     
  50.     def build_ex_data(self, request, phase, response, content_type):
  51.         if phase != 0:
  52.             return ''
  53.         if request:
  54.             response_data = self.build_response_data(request, content_type)
  55.         else:
  56.             response_data = ''
  57.         magic_header_bytes = '\x81\x1a\x18\xbc\x0el\x18G\xa5\x91o\x18\xdc\xc7o\x1a\x01\x00'
  58.         response_encoding_data = struct.pack('<I', len(response_data)) + response_data + struct.pack('<I', len(content_type)) + content_type
  59.         ex_data = magic_header_bytes + struct.pack('<I', len(request)) + request + '\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + struct.pack('<I', len(response_encoding_data)) + response_encoding_data
  60.         return struct.pack('<H', 39 + len(request)) + ex_data
  61.  
  62.     
  63.     def build_response_data(self, request, content_type):
  64.         if request != 'Away Status Message':
  65.             return ''
  66.         status_message = self.protocol.self_buddy.status_message
  67.         if status_message is None:
  68.             return ''
  69.         return status_message.encode('utf8')
  70.  
  71.  
  72.  
  73. def initialize():
  74.     log.info('\tloading rendezvous handler: extended messages')
  75.     import oscar.rendezvous.peer as peer
  76.     peer.register_rdv_factory('extended_msgs', IcqServerRelayer)
  77.  
  78. hooks.Hook('oscar.rdv.load').register(initialize)
  79.