Example #1
0
    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)
Example #2
0
    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
Example #3
0
    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 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
Example #6
0
 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
Example #7
0
    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
Example #8
0
    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
Example #9
0
    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
Example #10
0
    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
Example #11
0
        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)