Пример #1
0
    def update(self):
        r, w, e = select.select([self.sock], [self.sock], [], 0)

        for sk in r:
            data, (ip, port) = sk.recvfrom(c.UDP_DATA_LEN)
            try:
                p = Packet.parse(data, (ip, port))
            except:
                logger.debug(traceback.format_exc())
                pass
            else:
                self.dispatch_cb(p)

        if w:
            new_paused = set([(p, addr) for (p, addr) in self.waiting if p.age() > settings['send_timeout']])
            self.paused |= new_paused
            self.waiting = set(args for args in self.waiting if args not in self.paused)
            if self.paused:
                logger.debug('paused: ' + repr(self.paused))
            if self.waiting:
                logger.debug('waiting: ' + repr(self.waiting))

            for (p, addr) in [args for args in self.waiting if args not in self.paused]:
                self.sock.sendto(p.raw, addr)
            for (p, addr) in self.sending:
                self.sock.sendto(p.raw, addr)
            self.sending = set([])

            return new_paused
        return []
Пример #2
0
    def update(self):
        r, w, e = select.select([self.sock], [self.sock], [], 0)

        for sk in r:
            data, (ip, port) = sk.recvfrom(c.UDP_DATA_LEN)
            try:
                p = Packet.parse(data, (ip, port))
            except:
                logger.debug(traceback.format_exc())
                pass
            else:
                self.dispatch_cb(p)

        if w:
            new_paused = set([(p, addr) for (p, addr) in self.waiting
                              if p.age() > settings['send_timeout']])
            self.paused |= new_paused
            self.waiting = set(args for args in self.waiting
                               if args not in self.paused)
            if self.paused:
                logger.debug('paused: ' + repr(self.paused))
            if self.waiting:
                logger.debug('waiting: ' + repr(self.waiting))

            for (p, addr) in [
                    args for args in self.waiting if args not in self.paused
            ]:
                self.sock.sendto(p.raw, addr)
            for (p, addr) in self.sending:
                self.sock.sendto(p.raw, addr)
            self.sending = set([])

            return new_paused
        return []
Пример #3
0
    def try_make_packet(self):
        logger.debug('try_make_packet')
        tag = 0
        tag |= c.IPMSG_SENDMSG
        tag |= c.IPMSG_SENDCHECKOPT
        tag |= c.IPMSG_RETRYOPT

        if status.is_invisible() or self.addr[0] in settings['block_list']:
            tag |= c.IPMSG_NOADDLISTOPT
        elif status.is_afk():
            tag |= c.IPMSG_ABSENCEOPT

        if self.options['autoret']:
            tag |= c.IPMSG_AUTORETOPT

        if self.options['seal']:
            tag |= c.IPMSG_SECRETOPT
            if self.options['read_check']:
                tag |= c.IPMSG_READCHECKOPT
            if self.options['password']:
                tag |= c.IPMSG_PASSWORDOPT

        if engine.supports_utf8(self.addr):
            tag |= c.IPMSG_UTF8OPT
            encode_func = util.uni_to_utf8
        else:
            encode_func = util.uni_to_sjis

        msg = self.msg

        if self.atts and self.options['webshare']:
            msg += '\n\n' + webshare_manager.start(self.atts)

        contact = engine.get_contact(self.addr) or Contact(name='', group='', host='', addr=self.addr)

        msg = unicode(msg, 'utf8')
        msg = encode_func(msg)

        if self.options['encrypt']:
            rslt = self.encrypt(msg, contact)
            if not rslt:
                logger.debug('encrypt failed')
                return
            else:
                logger.debug('encrypt success')
                is_enc, msg = rslt
                if is_enc:
                    tag |= c.IPMSG_ENCRYPTOPT

        if self.atts and not self.options['webshare']:
            tag |= c.IPMSG_FILEATTACHOPT
            msg += '\x00' + encode_func(upload_manager.append_files(self.addr, self.atts))

        logger.debug('ready to make msg')
        raw = engine.make_msg(self.addr, tag, msg)
        self.packet = Packet.parse(raw, self.addr) 
        self.status = Message.INIT

        self.write_log()
Пример #4
0
    def try_make_packet(self):
        logger.debug('try_make_packet')
        tag = 0
        tag |= c.IPMSG_SENDMSG
        tag |= c.IPMSG_SENDCHECKOPT
        tag |= c.IPMSG_RETRYOPT

        if status.is_invisible() or self.addr[0] in settings['block_list']:
            tag |= c.IPMSG_NOADDLISTOPT
        elif status.is_afk():
            tag |= c.IPMSG_ABSENCEOPT

        if self.options['autoret']:
            tag |= c.IPMSG_AUTORETOPT

        if self.options['seal']:
            tag |= c.IPMSG_SECRETOPT
            if self.options['read_check']:
                tag |= c.IPMSG_READCHECKOPT
            if self.options['password']:
                tag |= c.IPMSG_PASSWORDOPT

        if engine.supports_utf8(self.addr):
            tag |= c.IPMSG_UTF8OPT
            encode_func = util.uni_to_utf8
        else:
            encode_func = util.uni_to_sjis

        msg = self.msg

        if self.atts and self.options['webshare']:
            msg += '\n\n' + webshare_manager.start(self.atts)

        contact = engine.get_contact(self.addr) or Contact(
            name='', group='', host='', addr=self.addr)

        msg = unicode(msg, 'utf8')
        msg = encode_func(msg)

        if self.options['encrypt']:
            rslt = self.encrypt(msg, contact)
            if not rslt:
                logger.debug('encrypt failed')
                return
            else:
                logger.debug('encrypt success')
                is_enc, msg = rslt
                if is_enc:
                    tag |= c.IPMSG_ENCRYPTOPT

        if self.atts and not self.options['webshare']:
            tag |= c.IPMSG_FILEATTACHOPT
            msg += '\x00' + encode_func(
                upload_manager.append_files(self.addr, self.atts))

        logger.debug('ready to make msg')
        raw = engine.make_msg(self.addr, tag, msg)
        self.packet = Packet.parse(raw, self.addr)
        self.status = Message.INIT

        self.write_log()
Пример #5
0
 def send_to(self, contact, tag = 0, msg = ''):
     raw = self.make_msg(addr, tag, msg)
     p = Packet.parse(raw, contact.addr)
     self.server.send_reserve(p, contact.addr)
Пример #6
0
 def send(self, addr, tag = 0, msg = ''):
     raw = self.make_msg(addr, tag, msg)
     p = Packet.parse(raw, addr)
     self.server.send_reserve(p, addr)