def _send(self, permid, dns, message, callback): if DEBUG: print >> sys.stderr, 'secover: actual send', getMessageName( message[0]), 'to', show_permid_short( permid), currentThread().getName() try: if dns is None: callback(KeyError('IP address + port for permid unknown'), permid) else: iplport = ip_and_port2str(dns[0], dns[1]) oc = None try: oc = self.iplport2oc[iplport] except KeyError: pass if oc is None: callback(KeyError('Not connected to permid'), permid) elif oc.is_auth_done(): if oc.get_auth_permid() == permid: oc.send_message(message) callback(None, permid) else: callback( KeyError( 'Recorded IP address + port now of other permid' ), permid) else: callback(KeyError('Connection not yet established'), permid) except Exception as exc: if DEBUG: print_exc() callback(exc, permid)
def _send(self, permid, dns, message, callback): if DEBUG: print >> sys.stderr, 'secover: actual send', getMessageName(message[0]), 'to', show_permid_short(permid), currentThread().getName() try: if dns is None: callback(KeyError('IP address + port for permid unknown'), permid) else: iplport = ip_and_port2str(dns[0], dns[1]) oc = None try: oc = self.iplport2oc[iplport] except KeyError: pass if oc is None: callback(KeyError('Not connected to permid'), permid) elif oc.is_auth_done(): if oc.get_auth_permid() == permid: oc.send_message(message) callback(None, permid) else: callback(KeyError('Recorded IP address + port now of other permid'), permid) else: callback(KeyError('Connection not yet established'), permid) except Exception as exc: if DEBUG: print_exc() callback(exc, permid)
def got_message(self, dns, message): if DEBUG: print >> sys.stderr, 'dlbreturn: got_message', getMessageName(message[0]) if self.usermsghandler is None: if DEBUG: print >> sys.stderr, 'dlbreturn: User receive callback not set' return try: ret = self.usermsghandler(dns, message) if ret is None: if DEBUG: print >> sys.stderr, 'dlbreturn: INTERNAL ERROR:', 'User receive callback returned None, not True or False' ret = False return ret except: print_exc(file=sys.stderr) return False
def got_message(self, dns, message): if DEBUG: print >> sys.stderr, 'dlbreturn: got_message', getMessageName( message[0]) if self.usermsghandler is None: if DEBUG: print >> sys.stderr, 'dlbreturn: User receive callback not set' return try: ret = self.usermsghandler(dns, message) if ret is None: if DEBUG: print >> sys.stderr, 'dlbreturn: INTERNAL ERROR:', 'User receive callback returned None, not True or False' ret = False return ret except: print_exc(file=sys.stderr) return False
def got_message(self, permid, message, selversion): if DEBUG: print >> sys.stderr, 'secover: got_message', getMessageName(message[0]), 'v' + str(selversion) if self.usermsghandler is None: if DEBUG: print >> sys.stderr, 'secover: User receive callback not set' return try: ret = self.usermsghandler(permid, selversion, message) if ret is None: if DEBUG: print >> sys.stderr, 'secover: INTERNAL ERROR:', 'User receive callback returned None, not True or False' ret = False elif DEBUG: print >> sys.stderr, 'secover: message handler returned', ret return ret except: print_exc() return False
def _send_request(self, permid, message_id, channel_id, payload, frequency = 3600, callback = None): def _after_send_request(exc, permid): if DEBUG: if exc: print >> sys.stderr, 'crawler: could not send request to', show_permid_short(permid), exc if exc: self._release_channel_id(permid, channel_id) if callback: callback(exc, permid) if DEBUG: print >> sys.stderr, 'crawler: sending', getMessageName(CRAWLER_REQUEST + message_id), 'with', len(payload), 'bytes payload to', show_permid_short(permid) self._overlay_bridge.send(permid, ''.join((CRAWLER_REQUEST, message_id, chr(channel_id & 255), chr(frequency >> 8 & 255) + chr(frequency & 255), str(payload))), _after_send_request) return channel_id
def got_message(self, permid, message, selversion): if DEBUG: print >> sys.stderr, 'secover: got_message', getMessageName( message[0]), 'v' + str(selversion) if self.usermsghandler is None: if DEBUG: print >> sys.stderr, 'secover: User receive callback not set' return try: ret = self.usermsghandler(permid, selversion, message) if ret is None: if DEBUG: print >> sys.stderr, 'secover: INTERNAL ERROR:', 'User receive callback returned None, not True or False' ret = False elif DEBUG: print >> sys.stderr, 'secover: message handler returned', ret return ret except: print_exc() return False
def _send_reply(self, permid, message_id, channel_id, payload, error = 0, callback = None): if len(payload) > MAX_PAYLOAD_LENGTH: remaining_payload = payload[MAX_PAYLOAD_LENGTH:] def _after_send_reply(exc, permid): if DEBUG: print >> sys.stderr, 'crawler: _after_send_reply', show_permid_short(permid), exc if not exc: self.send_reply(permid, message_id, channel_id, remaining_payload, error=error) if callback: callback(exc, permid) parts_left = min(255, int(len(payload) / MAX_PAYLOAD_LENGTH)) payload = payload[:MAX_PAYLOAD_LENGTH] else: def _after_send_reply(exc, permid): if DEBUG: if exc: print >> sys.stderr, 'crawler: could not send request', show_permid_short(permid), exc if callback: callback(exc, permid) parts_left = 0 if permid in self._channels and channel_id in self._channels[permid]: del self._channels[permid][channel_id] if not self._channels[permid]: del self._channels[permid] if DEBUG: print >> sys.stderr, 'crawler: sending', getMessageName(CRAWLER_REPLY + message_id), 'with', len(payload), 'bytes payload to', show_permid_short(permid) self._overlay_bridge.send(permid, ''.join((CRAWLER_REPLY, message_id, chr(channel_id & 255), chr(parts_left & 255), chr(error & 255), str(payload))), _after_send_reply) return channel_id
def handle_reply(self, permid, selversion, message): if selversion >= OLPROTO_VER_SEVENTH and len(message) >= 5 and message[1] in self._message_handlers: message_id = message[1] channel_id = ord(message[2]) parts_left = ord(message[3]) error = ord(message[4]) if permid in self._channels and channel_id in self._channels[permid]: self._channels[permid][channel_id][1] += message[5:] if parts_left: if DEBUG: print >> sys.stderr, 'crawler: received', getMessageName(CRAWLER_REPLY + message_id), 'with', len(message), 'bytes payload from', show_permid_short(permid), 'with', parts_left, 'parts left' return True else: timestamp, payload, channel_data = self._channels[permid].pop(channel_id) if DEBUG: if error == 253: print >> sys.stderr, 'crawler: received', getMessageName(CRAWLER_REPLY + message_id), 'with', len(message), 'bytes payload from', show_permid_short(permid), 'indicating an unknown message error' if error == 254: print >> sys.stderr, 'crawler: received', getMessageName(CRAWLER_REPLY + message_id), 'with', len(message), 'bytes payload from', show_permid_short(permid), 'indicating a frequency error' else: print >> sys.stderr, 'crawler: received', getMessageName(CRAWLER_REPLY + message_id), 'with', len(payload), 'bytes payload from', show_permid_short(permid) if not self._channels[permid]: del self._channels[permid] def send_request_helper(message_id, payload, frequency = 3600, callback = None, channel_data = None): return self.send_request(permid, message_id, payload, frequency=frequency, callback=callback, channel_data=channel_data) try: self._message_handlers[message_id][1](permid, selversion, channel_id, channel_data, error, payload, send_request_helper) except: print_exc() return True elif DEBUG: print >> sys.stderr, 'crawler: received', getMessageName(CRAWLER_REPLY + message_id), 'with', len(payload), 'bytes payload from', show_permid_short(permid), 'from unknown peer or unused channel' if DEBUG: if len(message) >= 2: message_id = message[1] else: message_id = '' print >> sys.stderr, 'crawler: received', getMessageName(CRAWLER_REPLY + message_id), 'with', len(message), 'bytes from', show_permid_short(permid), 'from unknown peer or unused channel' return False
def olbridge_handle_msg_func(): if DEBUG: print >> sys.stderr, 'olbridge: handle_msg_func', show_permid_short(permid), selversion, getMessageName(message[0]), currentThread().getName() try: if self.olappsmsghandler is None: ret = True else: ret = self.olappsmsghandler(permid, selversion, message) except: print_exc() ret = False if ret == False: if DEBUG: print >> sys.stderr, 'olbridge: olbridge_handle_msg_func closing!', show_permid_short(permid), selversion, getMessageName(message[0]), currentThread().getName() self.close(permid)