home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyo (Python 2.6)
-
- import logging
- import struct
- import hooks
- import oscar
- import oscar.rendezvous as RDV
- log = logging.getLogger('oscar.rdv.icqrelay')
-
- class IcqServerRelayer(RDV.peer.OscarPeer):
-
- def __init__(self, protocol, screenname, cookie):
- RDV.peer.OscarPeer.__init__(self, protocol, screenname, cookie, oscar.capabilities.by_name['extended_msgs'])
-
-
- def handle_request(self, reqtlvs):
- log.info('request: %r', reqtlvs)
- data = reqtlvs.extended_data
- fmt = (('length1', 'H'), ('chunk1', 's', 'length1'), ('length2', 'H'), ('chunk2', 's', 'length2'))
- (_, chunk1, _, chunk2, data) = oscar.unpack(fmt, data, byte_order = '<')
- fmt = (('type', 'B'), ('flags', 'B'), ('status', 'H'), ('priority', 'H'), ('length', 'H'), ('message', 's', 'length'))
- (type, flags, status, priority, _, message, data) = oscar.unpack(fmt, data, byte_order = '<')
- if message:
- message = message[:-1]
- auto = flags & 2 == 2
- if message:
- self.protocol.incoming_rtf_message(self.buddy, message)
-
- return None
- 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'))
-
- try:
- (_, _, _, request, phase, _, _, _, response, _, content_type, data) = oscar.unpack(fmt, data, byte_order = '<')
- log.info('request = %r, phase = %r, response = %r, encoding = %r, data = %r', request, phase, response, content_type, data)
- except Exception:
- message
- message
- import traceback
- traceback.print_exc()
- except:
- message
-
- log.info('parsed request! %r', locals())
- 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)
- ex_data = self.build_ex_data(request, phase, response, content_type)
- self.protocol.send_snac(*oscar.snac.send_x04_x0b(self.cookie, 2, self.screenname, 3, ex_data_header + ex_data))
-
-
- def build_ex_data(self, request, phase, response, content_type):
- if phase != 0:
- return ''
- if request:
- response_data = self.build_response_data(request, content_type)
- else:
- response_data = ''
- magic_header_bytes = '\x81\x1a\x18\xbc\x0el\x18G\xa5\x91o\x18\xdc\xc7o\x1a\x01\x00'
- response_encoding_data = struct.pack('<I', len(response_data)) + response_data + struct.pack('<I', len(content_type)) + content_type
- 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
- return struct.pack('<H', 39 + len(request)) + ex_data
-
-
- def build_response_data(self, request, content_type):
- if request != 'Away Status Message':
- return ''
- status_message = self.protocol.self_buddy.status_message
- if status_message is None:
- return ''
- return status_message.encode('utf8')
-
-
-
- def initialize():
- log.info('\tloading rendezvous handler: extended messages')
- import oscar.rendezvous.peer as peer
- peer.register_rdv_factory('extended_msgs', IcqServerRelayer)
-
- hooks.Hook('oscar.rdv.load').register(initialize)
-