Exemplo n.º 1
0
    def check_link_e2e(self, messages):
        for message in messages:
            if not message.source.startswith(u"circuit_"):
                yield DropMessage(message, "must be received from a circuit")
                continue

            if message.payload.cookie not in self.rendezvous_point_for:
                yield DropMessage(message,
                                  "not a rendezvous point for this cookie")
                continue

            circuit_id = int(message.source[8:])
            if self.exit_sockets[circuit_id].enabled:
                yield DropMessage(
                    message, "exit socket for circuit is enabled, cannot link")
                continue

            relay_circuit = self.rendezvous_point_for[message.payload.cookie]
            if self.exit_sockets[relay_circuit.circuit_id].enabled:
                yield DropMessage(
                    message,
                    "exit socket for relay_circuit is enabled, cannot link")
                continue

            yield message
Exemplo n.º 2
0
    def check_linked_e2e(self, messages):
        for message in messages:
            if not message.source.startswith(u"circuit_"):
                yield DropMessage(message, "must be received from a circuit")
                continue

            request = self.request_cache.get(u"link-request", message.payload.identifier)
            if not request:
                yield DropMessage(message, "invalid linked-e2e identifier")
                continue

            yield message
Exemplo n.º 3
0
    def check_key_request(self, messages):
        for message in messages:
            self.tunnel_logger.info("Check key request")
            info_hash = message.payload.info_hash
            if not message.source.startswith(u"circuit_"):
                if info_hash not in self.intro_point_for:
                    yield DropMessage(message, "not an intro point for this infohash")
                    continue
            else:
                if info_hash not in self.session_keys:
                    yield DropMessage(message, "not seeding this infohash")
                    continue

            yield message
Exemplo n.º 4
0
    def check_pong(self, messages):
        for message in messages:
            if not self._dispersy.request_cache.has(message.payload.identifier, PingCache):
                yield DropMessage(message, "invalid response identifier")
                continue

            yield message
Exemplo n.º 5
0
    def check_establish_rendezvous(self, messages):
        for message in messages:
            if not message.source.startswith(u"circuit_"):
                yield DropMessage(message, "did not receive this message from a circuit")
                continue

            yield message
Exemplo n.º 6
0
    def check_rendezvous_established(self, messages):
        for message in messages:
            request = self.request_cache.get(u"establish-rendezvous", message.payload.identifier)
            if not request:
                yield DropMessage(message, "invalid rendezvous-established request identifier")
                continue

            yield message
Exemplo n.º 7
0
 def check_key_response(self, messages):
     for message in messages:
         self.tunnel_logger.info("Check key response")
         request = self.request_cache.get(u"key-request", message.payload.identifier)
         if not request:
             yield DropMessage(message, "invalid key-response identifier")
             continue
         yield message
Exemplo n.º 8
0
    def check_dht_response(self, messages):
        for message in messages:
            if not self.is_relay(message.payload.circuit_id):
                request = self.request_cache.get(u"dht-request", message.payload.identifier)
                if not request:
                    yield DropMessage(message, "invalid dht-response identifier")
                    continue

            yield message
Exemplo n.º 9
0
    def check_debug_request(self, messages):
        for message in messages:
            # the signed source_address (in the packet payload) must be the same as the UDP source
            # address.  this will still allow spoofing.
            if not message.payload.source_address == message.candidate.wan_address:
                yield DropMessage(message, "Phising attempt")
                continue

            allowed, _ = self._timeline.check(message)
            if not allowed:
                yield DelayMessageByProof(message)
                continue

            yield message
Exemplo n.º 10
0
    def check_votecast(self, messages):
        with self._dispersy.database:
            communities = {}
            channel_ids = {}
            for cid in set([message.payload.cid for message in messages]):
                channel_id = self._get_channel_id(cid)
                if channel_id:
                    channel_ids[cid] = channel_id
                else:
                    communities[cid] = self._get_channel_community(cid)

            for message in messages:
                if __debug__: dprint(message)

                community = communities.get(message.payload.cid)
                if community:
                    assert community.cid == message.payload.cid
                    # at this point we should NOT have the channel message for this community
                    if __debug__:
                        try:
                            self._dispersy.database.execute(u"SELECT * FROM sync WHERE community = ? AND meta_message = ? AND undone = 0", (community.database_id, community.get_meta_message(u"channel").database_id)).next()

                            print >> sys.stderr, "!!!We already have the channel message... no need to wait for it", community.cid.encode("HEX")
                            yield DropMessage(message, "Tribler and Dispersy databases not in sync...")
                            continue

                        except StopIteration:
                            pass

                    yield DelayMessageReqChannelMessage(message, community, includeSnapshot = message.payload.vote > 0) #request torrents if positive vote
                else:
                    message.channel_id = channel_ids[message.payload.cid]
                    yield message

            # ensure that no commits occur
            raise IgnoreCommits()