Пример #1
0
 def on_identity(self, packet, addr):
     """
     1.decode a dispersy-identity message
     2.store the public key in the message to our database
     3.associate this key with the candidate
     4.move this candidate to trusted neigbhors list
     """
     message_identity = Message(packet=packet)
     message_identity.decode_identity()
     sender_identity = sha1(message_identity.key_received).digest()
     if (self.database.get_member(
             public_key=message_identity.key_received) == None):
         self.database.add_member(identity=sender_identity,
                                  public_key=message_identity.key_received)
         self.database.add_visit_record(
             ip=addr[0],
             port=addr[1],
             public_key=message_identity.key_received)
         #then send a crawl request
         requested_sequence_number = self.database.get_latest_sequence_number(
             public_key=message_identity.key_received) + 1
         message_crawl = Message(
             neighbor_discovery=self,
             requested_sequence_number=requested_sequence_number)
         message_crawl.encode_crawl()
         self.send_message(message_crawl.packet, addr)
         print("receive identity, send crawl request")
     self.neighbor_group.associate_neigbhor_with_public_key(
         public_ip=addr,
         identity=sender_identity,
         public_key=message_identity.key_received)
     self.neighbor_group.insert_trusted_neighbor(
         Graph=self.database.trust_graph, my_public_key=self.my_public_key)
Пример #2
0
    def on_introduction_response(self, packet, addr):
        """
        1.decode a introduction response
        2.do public address vote to determine our public address
        3.add the introduced neighbor to neighbor_group
        """
        self.database.add_visit_count_record(ip=addr[0],
                                             port=addr[1],
                                             public_key="000")
        message = Message(packet=packet)
        message.decode_introduction_response()
        self.global_time = message.global_time
        self.public_address_vote(message.destination_address, addr)
        message_sender = Neighbor(message.source_private_address,
                                  addr,
                                  identity=message.sender_identity)
        self.neighbor_group.add_neighbor_to_outgoing_list(message_sender)
        print("the introduced candidate is: " +
              str(message.public_introduction_address))
        if message.private_introduction_address != (
                "0.0.0.0",
                0) and message.public_introduction_address != ("0.0.0.0", 0):
            introduced_neighbor = Neighbor(
                message.private_introduction_address,
                message.public_introduction_address)
            self.neighbor_group.add_neighbor_to_intro_list(introduced_neighbor)
            self.neighbor_group.update_current_neighbor(
                responder=message_sender,
                introduced_neighbor=introduced_neighbor)
            print("new candidate has been added to intro list")
        #send a missing identity by the way
        identity = message.sender_identity
        responder_member = self.database.get_member(identity=identity)
        if responder_member is None:
            message_missing_identity = Message(
                neighbor_discovery=self,
                the_missing_identity=message.sender_identity)
            message_missing_identity.encode_missing_identity()
            #self.transport.write(message_missing_identity.packet,addr)
            self.send_message(message_missing_identity.packet, addr)
            print(
                "receive introduction response, send missing identity message")

        member = self.database.get_member(identity=identity)
        if member is not None:
            print("the member of the introduction response is: " +
                  str(member[0]))
            public_key = member[1]
            requested_sequence_number = self.database.get_latest_sequence_number(
                public_key=public_key) + 1
            #message_crawl_request = Message(neighbor_discovery=self,requested_sequence_number = requested_sequence_number)
            #message_crawl_request.encode_crawl_request()
            message_crawl = Message(
                neighbor_discovery=self,
                requested_sequence_number=requested_sequence_number)
            message_crawl.encode_crawl()
            #self.transport.write(message_crawl.packet,addr)
            self.send_message(message_crawl.packet, addr)
            print("crawl sent")