Schedule a re-ping message after adding a new node.
[quix0rs-apt-p2p.git] / apt_p2p_Khashmir / khashmir.py
index 607c49bebabe50f6effdd0f85bd6c52fdfbfb764..54951b7e5719093b53d614c857af7846245643ad 100644 (file)
@@ -226,7 +226,13 @@ class KhashmirBase(protocol.Factory):
             df.addErrback(self._staleNodeHandler, old, node, contacted)
         elif not old and not contacted:
             # There's room, we just need to contact the node first
-            self.sendPing(node)
+            df = self.sendPing(node)
+            # Also schedule a future ping to make sure the node works
+            def rePing(newnode, self = self):
+                if newnode.id not in self.pinging:
+                    self.pinging[newnode.id] = reactor.callLater(self.config['MIN_PING_INTERVAL'],
+                                                                 self.sendPing, newnode)
+            df.addCallback(rePing)
 
     def _staleNodeHandler(self, err, old, node, contacted):
         """The pinged node never responded, so replace it."""
@@ -244,7 +250,7 @@ class KhashmirBase(protocol.Factory):
         
         # If in the table, schedule a ping, if one isn't already sent/scheduled
         if exists and node.id not in self.pinging:
-            self.pinging[node,id] = reactor.callLater(self.config['MIN_PING_INTERVAL'],
+            self.pinging[node.id] = reactor.callLater(self.config['MIN_PING_INTERVAL'],
                                                       self.sendPing, node)
     
     def sendPing(self, node):