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

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. from logging import getLogger
  5. import util
  6. from util import callsback, isiterable
  7. import msn
  8. from msn.MSNCommands import CommandProcessor, Message
  9. from util.Events import event, EventMixin
  10. log = getLogger('msn.p.ns')
  11. defcb = dict(trid = True, callback = sentinel)
  12.  
  13. class MSNNotification(CommandProcessor, EventMixin):
  14.     cid_class = str
  15.     events = EventMixin.events | set(('on_conn_error', 'on_connect', 'on_require_auth', 'on_receive_version', 'on_auth_challenge', 'disconnect'))
  16.     versions = [
  17.         'MSNP12',
  18.         'MSNP11',
  19.         'MSNP10',
  20.         'MSNP9',
  21.         'MSNP8']
  22.     props = {
  23.         'phh': 'phone_home',
  24.         'phw': 'phone_work',
  25.         'phm': 'phone_mobile',
  26.         'mob': 'allow_mobile',
  27.         'mbe': 'enable_mobile',
  28.         'utl': 'unknown',
  29.         'wwe': 'enable_wireless',
  30.         'wpl': 'unknown',
  31.         'wpc': 'unknown',
  32.         'mfn': 'remote_alias',
  33.         'cid': 'unknown',
  34.         'hsb': 'has_blog' }
  35.     
  36.     def __init__(self, SckCls_or_sck, server = None, buddy = None):
  37.         CommandProcessor.__init__(self, log)
  38.         EventMixin.__init__(self)
  39.         self._server = server
  40.         self._sb_class = None
  41.         self._last_bname = None
  42.         self.self_buddy = buddy
  43.         self.allow_unknown_contacts = False
  44.         if type(SckCls_or_sck) is type:
  45.             self.socket = None
  46.             self._socktype = SckCls_or_sck
  47.         else:
  48.             self.socket = SckCls_or_sck
  49.             self._socktype = type(self.socket)
  50.             self._server = self.socket._server
  51.             self.socket.bind('on_message', self.on_message)
  52.             self.socket.bind('on_conn_error', self.on_sck_conn_error)
  53.             self.socket.bind('on_close', self.on_sck_close)
  54.  
  55.     
  56.     def connect(self):
  57.         if self.socket is None:
  58.             log.info('Creating new %r to connect to %r', self._socktype, self._server)
  59.             self.socket = self._socktype()
  60.             self.socket.bind('on_connect', self.on_sck_connect)
  61.             self.socket.bind('on_conn_error', self.on_sck_conn_error)
  62.             self.socket.bind('on_close', self.on_sck_close)
  63.             conn_args = self.socket.connect_args_for('NS', self._server)
  64.             self.socket._connect(*conn_args)
  65.         
  66.  
  67.     
  68.     def get_local_sockname(self):
  69.         return self.socket.get_local_sockname()
  70.  
  71.     
  72.     def get_token(self, domain):
  73.         return self.tokens[domain].Token
  74.  
  75.     
  76.     def set_token(self, domain, token):
  77.         self.tokens[domain].Token = token
  78.  
  79.     
  80.     def connected(self):
  81.         return self.socket is not None
  82.  
  83.     
  84.     def disconnect(self, do_event = True):
  85.         if self.socket is not None:
  86.             log.info('%r disconnecting socket: %r', self, self.socket)
  87.             sck = self.socket
  88.             self.socket = None
  89.             sck._disconnect()
  90.             if do_event:
  91.                 self.event('disconnect')
  92.             
  93.         
  94.         self.CONNECTED = False
  95.  
  96.     
  97.     def close_transport(self, xport, switching = False):
  98.         log.info('Closing transport %r (self.socket is %r)', xport, self.socket)
  99.         if self.socket is xport:
  100.             self.disconnect(do_event = not switching)
  101.         else:
  102.             xport.clear()
  103.             xport.close()
  104.  
  105.     
  106.     def on_sck_close(self, sck):
  107.         if self.socket not in (None, sck):
  108.             log.info('An old socket got disconnected (%r)', sck)
  109.             sck.clear()
  110.             return None
  111.         
  112.         if self.socket is None:
  113.             log.info('Disconnecting normally %r: %r', self, sck)
  114.             self.event('disconnect')
  115.         else:
  116.             log.info('Disconnecting unexpectedly %r: %r', self, sck)
  117.             self.socket.clear()
  118.             self.disconnect(do_event = False)
  119.             self.event('on_conn_error', self, 'disconnected unexpectedly')
  120.  
  121.     
  122.     def on_sck_conn_error(self, sck, e):
  123.         if self.socket is not None:
  124.             self.socket.unbind('on_conn_error', self.on_sck_conn_error)
  125.         
  126.         self.event('on_conn_error', self, e)
  127.  
  128.     
  129.     def on_sck_connect(self, s):
  130.         old_s = self.socket
  131.         self.socket = s
  132.         if old_s not in (self.socket, None):
  133.             self.close_transport(old_s)
  134.         
  135.         self.socket.unbind('on_connect', self.on_sck_connect)
  136.         self.socket.bind('on_message', self.on_message)
  137.         pref = pref
  138.         import common
  139.         user_vers = pref('msn.versions', None)
  140.         if user_vers is not None and isiterable(user_vers) and len(user_vers) > 0:
  141.             versions = user_vers
  142.         else:
  143.             versions = self.versions
  144.         self.init_ns_connection(versions)
  145.  
  146.     
  147.     def init_ns_connection(self, versions):
  148.         self.socket.pause()
  149.         self.send_ver(versions)
  150.         self.event('on_require_auth')
  151.  
  152.     
  153.     def unhook_socket(self):
  154.         sck = self.socket
  155.         self.socket = None
  156.         sck.unbind('on_conn_error', self.on_sck_conn_error)
  157.         sck.unbind('on_message', self.on_message)
  158.         sck.unbind('on_close', self.on_sck_close)
  159.         return sck
  160.  
  161.     
  162.     def send_ver(self, versions):
  163.         self.socket.send(Message('VER', *versions + [
  164.             'CVR0']), **defcb)
  165.  
  166.     
  167.     def recv_ver(self, msg):
  168.         ver = msg.args[0]
  169.         num = int(ver[4:])
  170.         self.event('on_receive_version', num)
  171.  
  172.     
  173.     def send_cvr(self, username):
  174.         self.socket.send(Message('cvr', '0x0409', 'winnt', '5.1', 'i386', 'WLMSGRBETA', '9.0.1407', 'msmsgs', username), **defcb)
  175.  
  176.     
  177.     def recv_cvr(self, msg):
  178.         log.info('got cvr')
  179.  
  180.     
  181.     def send_usr(self, username, password, auth_type):
  182.         self._username = username
  183.         self._password = password
  184.         self._auth_type = auth_type
  185.         self.socket.send(Message('usr', auth_type, 'I', username), trid = True, success = self._recv_usr_success, error = self._recv_usr_error)
  186.  
  187.     
  188.     def _recv_usr_error(self, sck, e):
  189.         log.info('Got an error when waiting for USR response: %r', e)
  190.         self.event('on_conn_error', self, e)
  191.  
  192.     
  193.     def _recv_usr_success(self, sck, msg):
  194.         log.info('Got a success when waiting for USR response: %r', msg)
  195.         return True
  196.  
  197.     
  198.     def recv_usr(self, msg):
  199.         auth_type = msg[0]
  200.         type_ = msg[1]
  201.         if auth_type == 'OK':
  202.             self.event('on_auth_success')
  203.             return None
  204.         
  205.         if type_ == 'S':
  206.             self.event('on_auth_challenge', msg[2:])
  207.         
  208.  
  209.     
  210.     def recv_xfr(self, msg):
  211.         (type_, new_addr) = msg.args[:2]
  212.         server = util.srv_str_to_tuple(new_addr, 1863)
  213.         if type_ == 'NS':
  214.             log.info('Switching NS servers to %r', server)
  215.             self.close_transport(self.socket, switching = True)
  216.             self._server = server
  217.             self.connect()
  218.         else:
  219.             cookie = msg.args[3]
  220.             self.switchboard_request(server, cookie)
  221.  
  222.     
  223.     def recv_xfr_error(self, msg):
  224.         self.sb_request_error(msg)
  225.  
  226.     
  227.     def authenticate(self, username, password, auth_type):
  228.         self.send_cvr(username)
  229.         self.send_usr(username, password, auth_type)
  230.         self.socket.unpause()
  231.  
  232.     
  233.     def send_png(self):
  234.         return NotImplemented
  235.  
  236.     
  237.     def _load_contact_list(self):
  238.         return NotImplemented
  239.  
  240.     
  241.     def _add_buddy(self, bname, bid, gname, callback):
  242.         return NotImplemented
  243.  
  244.     
  245.     def _add_buddy_to_group(self, bname, bid, gid, callback):
  246.         return NotImplemented
  247.  
  248.     
  249.     def _remove_buddy(self, lid, buddy, group, callback):
  250.         return NotImplemented
  251.  
  252.     
  253.     def _remove_buddy_from_group(self, name, bid, g_id, callback):
  254.         return NotImplemented
  255.  
  256.     
  257.     def _authorize_buddy(self, buddy, authorize, callback):
  258.         return NotImplemented
  259.  
  260.     
  261.     def _block_buddy(self, buddy, callback):
  262.         return NotImplemented
  263.  
  264.     
  265.     def _unblock_buddy(self, buddy, callback):
  266.         return NotImplemented
  267.  
  268.     
  269.     def _move_buddy(self, bname, bid, to_groupid, from_groupid, callback):
  270.         return NotImplemented
  271.  
  272.     
  273.     def _set_display_name(self, new_alias, callback):
  274.         return NotImplemented
  275.  
  276.     
  277.     def _set_remote_alias(self, buddy, new_alias, callback):
  278.         return NotImplemented
  279.  
  280.     
  281.     def _get_profile(self, buddy, callback):
  282.         return NotImplemented
  283.  
  284.     
  285.     def _rename_group(self, group, name, callback):
  286.         return NotImplemented
  287.  
  288.     
  289.     def _set_buddy_icon(self, icon, callback):
  290.         return NotImplemented
  291.  
  292.     
  293.     def _get_buddy_icon(self, name, callback):
  294.         return NotImplemented
  295.  
  296.     
  297.     def _send_file(self, buddy, filepath, callback):
  298.         return NotImplemented
  299.  
  300.     
  301.     def _send_sms(self, phone, message, callback):
  302.         return NotImplemented
  303.  
  304.     
  305.     def _set_status(self, code, callback):
  306.         return NotImplemented
  307.  
  308.     
  309.     def _set_status_message(self, message, callback):
  310.         return NotImplemented
  311.  
  312.  
  313.