Skip to content
This repository was archived by the owner on May 16, 2019. It is now read-only.

Commit afc72f5

Browse files
committed
Fix bug checking if new node
1 parent 2d52c8a commit afc72f5

File tree

3 files changed

+17
-4
lines changed

3 files changed

+17
-4
lines changed

dht/protocol.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ def handleCallResponse(self, result, node):
224224
we get no response, make sure it's removed from the routing table.
225225
"""
226226
if result[0]:
227-
if self.router.isNewNode(node):
227+
if self.isNewConnection(node):
228228
self.log.debug("Call response from new node, transferring key/values")
229229
reactor.callLater(1, self.transferKeyValues, node)
230230
self.router.addContact(node)
@@ -239,11 +239,17 @@ def addToRouter(self, node):
239239
We add the node to our router and transfer our stored values
240240
if they are new and within our neighborhood.
241241
"""
242-
if self.router.isNewNode(node):
242+
if self.isNewConnection(node):
243243
self.log.debug("Found a new node, transferring key/values")
244244
reactor.callLater(1, self.transferKeyValues, node)
245245
self.router.addContact(node)
246246

247+
def isNewConnection(self, node):
248+
if (node.ip, node.port) in self.multiplexer:
249+
return self.multiplexer[(node.ip, node.port)].handler.check_new_connection()
250+
else:
251+
return False
252+
247253
def __iter__(self):
248254
return iter(self.handled_commands)
249255

dht/tests/test_protocol.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
from dht.protocol import KademliaProtocol
1616
from dht.utils import digest
1717
from dht.storage import ForgetfulStorage
18-
from dht.tests.utils import mknode
1918
from dht.node import Node
2019
from protos import message, objects
2120
from net.wireprotocol import OpenBazaarProtocol
@@ -613,7 +612,7 @@ def _connecting_to_connected(self):
613612
self.next_seqnum = seqnum + 1
614613

615614
def test_badRPCDelete(self):
616-
n = mknode()
615+
n = Node(digest("S"), self.addr1[0], self.addr1[1])
617616
val = self.protocol.rpc_delete(n, 'testkeyword', 'key', 'testsig')
618617
self.assertEqual(val, ["False"])
619618
val = self.protocol.rpc_delete(n, '', '', '')

net/wireprotocol.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ def __init__(self, processors, nat_type, relay_node, *args, **kwargs):
6060
self.keep_alive_loop.start(300 if nat_type == FULL_CONE else 30, now=False)
6161
self.addr = None
6262
self.ban_score = None
63+
self.is_new_node = True
6364
self.on_connection_made()
6465

6566
def on_connection_made(self):
@@ -156,6 +157,13 @@ def change_relay_node(self):
156157
processor.callPing(Node(digest("null"), self.relay_node[0], self.relay_node[1],
157158
relay_node=None, nat_type=FULL_CONE))
158159

160+
def check_new_connection(self):
161+
if self.is_new_node:
162+
self.is_new_node = False
163+
return True
164+
else:
165+
return False
166+
159167
class ConnHandlerFactory(HandlerFactory):
160168

161169
def __init__(self, processors, nat_type, relay_node):

0 commit comments

Comments
 (0)