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