home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyo (Python 2.5)
-
- from logging import getLogger
- import util
- from util import callsback, isiterable
- import msn
- from msn.MSNCommands import CommandProcessor, Message
- from util.Events import event, EventMixin
- log = getLogger('msn.p.ns')
- defcb = dict(trid = True, callback = sentinel)
-
- class MSNNotification(CommandProcessor, EventMixin):
- cid_class = str
- events = EventMixin.events | set(('on_conn_error', 'on_connect', 'on_require_auth', 'on_receive_version', 'on_auth_challenge', 'disconnect'))
- versions = [
- 'MSNP12',
- 'MSNP11',
- 'MSNP10',
- 'MSNP9',
- 'MSNP8']
- props = {
- 'phh': 'phone_home',
- 'phw': 'phone_work',
- 'phm': 'phone_mobile',
- 'mob': 'allow_mobile',
- 'mbe': 'enable_mobile',
- 'utl': 'unknown',
- 'wwe': 'enable_wireless',
- 'wpl': 'unknown',
- 'wpc': 'unknown',
- 'mfn': 'remote_alias',
- 'cid': 'unknown',
- 'hsb': 'has_blog' }
-
- def __init__(self, SckCls_or_sck, server = None, buddy = None):
- CommandProcessor.__init__(self, log)
- EventMixin.__init__(self)
- self._server = server
- self._sb_class = None
- self._last_bname = None
- self.self_buddy = buddy
- self.allow_unknown_contacts = False
- if type(SckCls_or_sck) is type:
- self.socket = None
- self._socktype = SckCls_or_sck
- else:
- self.socket = SckCls_or_sck
- self._socktype = type(self.socket)
- self._server = self.socket._server
- self.socket.bind('on_message', self.on_message)
- self.socket.bind('on_conn_error', self.on_sck_conn_error)
- self.socket.bind('on_close', self.on_sck_close)
-
-
- def connect(self):
- if self.socket is None:
- log.info('Creating new %r to connect to %r', self._socktype, self._server)
- self.socket = self._socktype()
- self.socket.bind('on_connect', self.on_sck_connect)
- self.socket.bind('on_conn_error', self.on_sck_conn_error)
- self.socket.bind('on_close', self.on_sck_close)
- conn_args = self.socket.connect_args_for('NS', self._server)
- self.socket._connect(*conn_args)
-
-
-
- def get_local_sockname(self):
- return self.socket.get_local_sockname()
-
-
- def get_token(self, domain):
- return self.tokens[domain].Token
-
-
- def set_token(self, domain, token):
- self.tokens[domain].Token = token
-
-
- def connected(self):
- return self.socket is not None
-
-
- def disconnect(self, do_event = True):
- if self.socket is not None:
- log.info('%r disconnecting socket: %r', self, self.socket)
- sck = self.socket
- self.socket = None
- sck._disconnect()
- if do_event:
- self.event('disconnect')
-
-
- self.CONNECTED = False
-
-
- def close_transport(self, xport, switching = False):
- log.info('Closing transport %r (self.socket is %r)', xport, self.socket)
- if self.socket is xport:
- self.disconnect(do_event = not switching)
- else:
- xport.clear()
- xport.close()
-
-
- def on_sck_close(self, sck):
- if self.socket not in (None, sck):
- log.info('An old socket got disconnected (%r)', sck)
- sck.clear()
- return None
-
- if self.socket is None:
- log.info('Disconnecting normally %r: %r', self, sck)
- self.event('disconnect')
- else:
- log.info('Disconnecting unexpectedly %r: %r', self, sck)
- self.socket.clear()
- self.disconnect(do_event = False)
- self.event('on_conn_error', self, 'disconnected unexpectedly')
-
-
- def on_sck_conn_error(self, sck, e):
- if self.socket is not None:
- self.socket.unbind('on_conn_error', self.on_sck_conn_error)
-
- self.event('on_conn_error', self, e)
-
-
- def on_sck_connect(self, s):
- old_s = self.socket
- self.socket = s
- if old_s not in (self.socket, None):
- self.close_transport(old_s)
-
- self.socket.unbind('on_connect', self.on_sck_connect)
- self.socket.bind('on_message', self.on_message)
- pref = pref
- import common
- user_vers = pref('msn.versions', None)
- if user_vers is not None and isiterable(user_vers) and len(user_vers) > 0:
- versions = user_vers
- else:
- versions = self.versions
- self.init_ns_connection(versions)
-
-
- def init_ns_connection(self, versions):
- self.socket.pause()
- self.send_ver(versions)
- self.event('on_require_auth')
-
-
- def unhook_socket(self):
- sck = self.socket
- self.socket = None
- sck.unbind('on_conn_error', self.on_sck_conn_error)
- sck.unbind('on_message', self.on_message)
- sck.unbind('on_close', self.on_sck_close)
- return sck
-
-
- def send_ver(self, versions):
- self.socket.send(Message('VER', *versions + [
- 'CVR0']), **defcb)
-
-
- def recv_ver(self, msg):
- ver = msg.args[0]
- num = int(ver[4:])
- self.event('on_receive_version', num)
-
-
- def send_cvr(self, username):
- self.socket.send(Message('cvr', '0x0409', 'winnt', '5.1', 'i386', 'WLMSGRBETA', '9.0.1407', 'msmsgs', username), **defcb)
-
-
- def recv_cvr(self, msg):
- log.info('got cvr')
-
-
- def send_usr(self, username, password, auth_type):
- self._username = username
- self._password = password
- self._auth_type = auth_type
- self.socket.send(Message('usr', auth_type, 'I', username), trid = True, success = self._recv_usr_success, error = self._recv_usr_error)
-
-
- def _recv_usr_error(self, sck, e):
- log.info('Got an error when waiting for USR response: %r', e)
- self.event('on_conn_error', self, e)
-
-
- def _recv_usr_success(self, sck, msg):
- log.info('Got a success when waiting for USR response: %r', msg)
- return True
-
-
- def recv_usr(self, msg):
- auth_type = msg[0]
- type_ = msg[1]
- if auth_type == 'OK':
- self.event('on_auth_success')
- return None
-
- if type_ == 'S':
- self.event('on_auth_challenge', msg[2:])
-
-
-
- def recv_xfr(self, msg):
- (type_, new_addr) = msg.args[:2]
- server = util.srv_str_to_tuple(new_addr, 1863)
- if type_ == 'NS':
- log.info('Switching NS servers to %r', server)
- self.close_transport(self.socket, switching = True)
- self._server = server
- self.connect()
- else:
- cookie = msg.args[3]
- self.switchboard_request(server, cookie)
-
-
- def recv_xfr_error(self, msg):
- self.sb_request_error(msg)
-
-
- def authenticate(self, username, password, auth_type):
- self.send_cvr(username)
- self.send_usr(username, password, auth_type)
- self.socket.unpause()
-
-
- def send_png(self):
- return NotImplemented
-
-
- def _load_contact_list(self):
- return NotImplemented
-
-
- def _add_buddy(self, bname, bid, gname, callback):
- return NotImplemented
-
-
- def _add_buddy_to_group(self, bname, bid, gid, callback):
- return NotImplemented
-
-
- def _remove_buddy(self, lid, buddy, group, callback):
- return NotImplemented
-
-
- def _remove_buddy_from_group(self, name, bid, g_id, callback):
- return NotImplemented
-
-
- def _authorize_buddy(self, buddy, authorize, callback):
- return NotImplemented
-
-
- def _block_buddy(self, buddy, callback):
- return NotImplemented
-
-
- def _unblock_buddy(self, buddy, callback):
- return NotImplemented
-
-
- def _move_buddy(self, bname, bid, to_groupid, from_groupid, callback):
- return NotImplemented
-
-
- def _set_display_name(self, new_alias, callback):
- return NotImplemented
-
-
- def _set_remote_alias(self, buddy, new_alias, callback):
- return NotImplemented
-
-
- def _get_profile(self, buddy, callback):
- return NotImplemented
-
-
- def _rename_group(self, group, name, callback):
- return NotImplemented
-
-
- def _set_buddy_icon(self, icon, callback):
- return NotImplemented
-
-
- def _get_buddy_icon(self, name, callback):
- return NotImplemented
-
-
- def _send_file(self, buddy, filepath, callback):
- return NotImplemented
-
-
- def _send_sms(self, phone, message, callback):
- return NotImplemented
-
-
- def _set_status(self, code, callback):
- return NotImplemented
-
-
- def _set_status_message(self, message, callback):
- return NotImplemented
-
-
-