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 []
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 []
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()
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()
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)
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)