class_receiveDataThread.py: consolidate sendaddr()
This commit is contained in:
parent
fb9f5039f7
commit
ce92b6ff8d
|
@ -583,77 +583,25 @@ class receiveDataThread(threading.Thread):
|
||||||
# peer (with the full exchange of version and verack
|
# peer (with the full exchange of version and verack
|
||||||
# messages).
|
# messages).
|
||||||
def sendaddr(self):
|
def sendaddr(self):
|
||||||
addrsInMyStream = {}
|
|
||||||
addrsInChildStreamLeft = {}
|
|
||||||
addrsInChildStreamRight = {}
|
|
||||||
# print 'knownNodes', shared.knownNodes
|
# print 'knownNodes', shared.knownNodes
|
||||||
|
|
||||||
# We are going to share a maximum number of 1000 addrs with our peer.
|
# We are going to share a maximum number of 1000 addrs with our peer.
|
||||||
# 500 from this stream, 250 from the left child stream, and 250 from
|
# 500 from this stream, 250 from the left child stream, and 250 from
|
||||||
# the right child stream.
|
# the right child stream.
|
||||||
|
peerSet = set()
|
||||||
with shared.knownNodesLock:
|
with shared.knownNodesLock:
|
||||||
if len(shared.knownNodes[self.streamNumber]) > 0:
|
for streamNumber, maximum in (
|
||||||
for i in range(500):
|
(self.streamNumber, 500),
|
||||||
peer, = random.sample(shared.knownNodes[self.streamNumber], 1)
|
(self.streamNumber * 2, 250),
|
||||||
|
((self.streamNumber * 2) + 1, 250)):
|
||||||
|
if len(shared.knownNodes[streamNumber]) > 0:
|
||||||
|
for i in range(maximum):
|
||||||
|
peer, = random.sample(shared.knownNodes[streamNumber], 1)
|
||||||
if isHostInPrivateIPRange(peer.host):
|
if isHostInPrivateIPRange(peer.host):
|
||||||
continue
|
continue
|
||||||
addrsInMyStream[peer] = shared.knownNodes[
|
peerSet.add((shared.knownNodes[streamNumber][peer], streamNumber, 1, peer.host, peer.port))
|
||||||
self.streamNumber][peer]
|
|
||||||
if len(shared.knownNodes[self.streamNumber * 2]) > 0:
|
|
||||||
for i in range(250):
|
|
||||||
peer, = random.sample(shared.knownNodes[
|
|
||||||
self.streamNumber * 2], 1)
|
|
||||||
if isHostInPrivateIPRange(peer.host):
|
|
||||||
continue
|
|
||||||
addrsInChildStreamLeft[peer] = shared.knownNodes[
|
|
||||||
self.streamNumber * 2][peer]
|
|
||||||
if len(shared.knownNodes[(self.streamNumber * 2) + 1]) > 0:
|
|
||||||
for i in range(250):
|
|
||||||
peer, = random.sample(shared.knownNodes[
|
|
||||||
(self.streamNumber * 2) + 1], 1)
|
|
||||||
if isHostInPrivateIPRange(peer.host):
|
|
||||||
continue
|
|
||||||
addrsInChildStreamRight[peer] = shared.knownNodes[
|
|
||||||
(self.streamNumber * 2) + 1][peer]
|
|
||||||
numberOfAddressesInAddrMessage = 0
|
|
||||||
payload = ''
|
|
||||||
# print 'addrsInMyStream.items()', addrsInMyStream.items()
|
|
||||||
for (HOST, PORT), value in addrsInMyStream.items():
|
|
||||||
timeLastReceivedMessageFromThisNode = value
|
|
||||||
if timeLastReceivedMessageFromThisNode > (int(time.time()) - shared.maximumAgeOfNodesThatIAdvertiseToOthers): # If it is younger than 3 hours old..
|
|
||||||
numberOfAddressesInAddrMessage += 1
|
|
||||||
payload += pack(
|
|
||||||
'>Q', timeLastReceivedMessageFromThisNode) # 64-bit time
|
|
||||||
payload += pack('>I', self.streamNumber)
|
|
||||||
payload += pack(
|
|
||||||
'>q', 1) # service bit flags offered by this node
|
|
||||||
payload += shared.encodeHost(HOST)
|
|
||||||
payload += pack('>H', PORT) # remote port
|
|
||||||
for (HOST, PORT), value in addrsInChildStreamLeft.items():
|
|
||||||
timeLastReceivedMessageFromThisNode = value
|
|
||||||
if timeLastReceivedMessageFromThisNode > (int(time.time()) - shared.maximumAgeOfNodesThatIAdvertiseToOthers): # If it is younger than 3 hours old..
|
|
||||||
numberOfAddressesInAddrMessage += 1
|
|
||||||
payload += pack(
|
|
||||||
'>Q', timeLastReceivedMessageFromThisNode) # 64-bit time
|
|
||||||
payload += pack('>I', self.streamNumber * 2)
|
|
||||||
payload += pack(
|
|
||||||
'>q', 1) # service bit flags offered by this node
|
|
||||||
payload += shared.encodeHost(HOST)
|
|
||||||
payload += pack('>H', PORT) # remote port
|
|
||||||
for (HOST, PORT), value in addrsInChildStreamRight.items():
|
|
||||||
timeLastReceivedMessageFromThisNode = value
|
|
||||||
if timeLastReceivedMessageFromThisNode > (int(time.time()) - shared.maximumAgeOfNodesThatIAdvertiseToOthers): # If it is younger than 3 hours old..
|
|
||||||
numberOfAddressesInAddrMessage += 1
|
|
||||||
payload += pack(
|
|
||||||
'>Q', timeLastReceivedMessageFromThisNode) # 64-bit time
|
|
||||||
payload += pack('>I', (self.streamNumber * 2) + 1)
|
|
||||||
payload += pack(
|
|
||||||
'>q', 1) # service bit flags offered by this node
|
|
||||||
payload += shared.encodeHost(HOST)
|
|
||||||
payload += pack('>H', PORT) # remote port
|
|
||||||
|
|
||||||
payload = encodeVarint(numberOfAddressesInAddrMessage) + payload
|
self.sendDataThreadQueue.put((0, 'sendaddr', peerSet))
|
||||||
self.sendDataThreadQueue.put((0, 'sendRawData', shared.CreatePacket('addr', payload)))
|
|
||||||
|
|
||||||
|
|
||||||
# We have received a version message
|
# We have received a version message
|
||||||
|
|
Reference in New Issue
Block a user