def x01_x12(o, sock, data): ''' SNAC (x1, x12): Server migration notice and information reference: U{http://iserverd.khstu.ru/oscar/snac_01_12.html} ''' format = (('num_fams', 'H'), ('families', 'H', 'num_fams'), ('tlvs', 'tlv_dict')) __, families, tlvs, data = oscar.unpack(format, data) server_addr, cookie = tlvs[5], tlvs[6] assert not any(o.sockets[fam] for fam in families if fam in o.sockets and isinstance(o.sockets[fam], oscar.SnacQueue)) sock_ids = set(list(families) + [s_id for (s_id, s) in o.sockets.items() if s is sock]) server = util.srv_str_to_tuple(server_addr, o.server[-1]) bos, sock.bos = sock.bos, False # If our old socket was the BOS socket, it isn't anymore. if bos: sock_ids.add('bos') o.connect_socket(server, cookie, sock_ids, bos = bos)
def _parse_addr(self, type_addr): try: type, addr = type_addr except (ValueError, TypeError): raise TypeError('%r.connect argument must be <type \'tuple\'> (type, addr) not %r (%r)', type(self).__name__, type(type_addr), type_addr) bad_addr = False port = None if len(addr) == 1: host, port = addr[0], 80 elif isinstance(addr, basestring): host, port = util.srv_str_to_tuple(addr, 80) elif len(addr) == 2: host, port = addr else: bad_addr = True try: port = int(port) except ValueError: bad_addr = True if bad_addr: raise TypeError('%r.connect argument\'s second element must be either string ("srv" or "srv:port") or tuple (("srv", port) or ("srv",)).'\ "Got %r instead" % addr) return type, host
def recv_rng(self, msg): if msg.trid: msg.args = [msg.trid,] + msg.args msg.trid = 0 session, server, auth_type, cookie, name, nick = msg.args[:6] server = srv_str_to_tuple(server, 1863) # The SB servers are mangling the encoding of names, so ignore it. If they ever fix themselves, # uncomment the two lines below. #nick = nick.decode('url').decode('fuzzy utf8') #self.event('contact_alias', name, nick) self.switchboard_invite(name, session, server, auth_type, cookie)
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: assert type_ == 'SB', msg cookie = msg.args[3] self.switchboard_request(server, cookie) if self.versions and self.versions[0] == 'MSNP21': try: self._xfrcount = int(email.message_from_string(msg.args[-1].decode('base64')).get('XfrCount')) except Exception: pass
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: assert type_ == 'SB', msg cookie = msg.args[3] self.switchboard_request(server, cookie) if self.versions and self.versions[0] == 'MSNP21': try: self._xfrcount = int( email.message_from_string( msg.args[-1].decode('base64')).get('XfrCount')) except Exception: pass