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

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