from mmptypes import * import protocol import utils import socket import async import struct import traceback import time import re import signal import http import errno import logging import mrim import base64 import resolver conf = mrim.conf packet_types = [locals()[key] for key in locals().keys() if key.startswith('MRIM_CS')] num_type = {} for k,v in [(key, locals()[key]) for key in locals().keys() if key.startswith('MRIM_CS')]: num_type[v] = k del k,v class Client(async.dispatcher_with_send): def __init__(self, login, password,logger,agent='Python MMP Library 0.1', status=0,server='mrim.mail.ru',port=2042,proxy=None): # some initial values self._login = login self.__password = password self.__agent = agent self.__status = status self._got_roster = False self.proxy = proxy self.state = 'init' self._mbox_url = "http://win.mail.ru/cgi-bin/auth?Login=%s&agent=" % self._login self._composers = {} self._compose_to = {} self.contact_list = protocol.ContactList() self.ack_buf = {} self.pinger_timer = 0 self.connect_timer = 0 self.ping_period = 30 self.mrim_host = resolver.gethostbyname(server) self.mrim_port = port async.dispatcher_with_send.__init__(self) self.buf_limit = 1024*100 self.logger = logger self.myname = '' self.wait_for_header = True self.buflen = 44 self.recbuf = '' self.balancer_buf = '' def log(self, level, message): self.logger.log(level, '[%s] %s' % (self._login, message)) def dump_packet(self, p): dump = "--- begin ---\n" dump += "Header: %s\nBody: %s\n" % (p.getHeader().__repr__(), p.getBody().__repr__()) dump += "--- end ---" return dump def handle_connect(self): if self.state != 'init': p = protocol.MMPPacket(typ=MRIM_CS_HELLO) self.log(logging.DEBUG, "Connection OK, sending HELLO") self._send_packet(p) def failure_exit(self, err): self.mmp_handler_connection_close() def handle_expt(self): self.log(logging.INFO, "Connection reset by peer") self.mmp_handler_connection_close() def handle_read(self): if self.state == 'init': self.balancer_buf += self.recv(8192) else: buf = self.recv(self.buflen) size = len(buf) self.recbuf += buf if 0