Smarter advertisement of object hashes and peers #494

Merged
Atheros1 merged 5 commits from master into master 2013-09-10 02:29:20 +02:00
Showing only changes of commit 2725281a6d - Show all commits

View File

@ -0,0 +1,39 @@
# objectHashHolder is a timer-driven thread. One objectHashHolder thread is used
# by each sendDataThread. It uses it whenever a sendDataThread needs to
# advertise an object to peers. Instead of sending it out immediately, it must
# wait a random number of seconds for each connection so that different peers
# get different objects at different times. Thus an attacker who is
# connecting to many network nodes who receives a message first from Alice
# cannot be sure if Alice is the node who originated the message.
import random
import time
import threading
class objectHashHolder(threading.Thread):
def __init__(self, sendDataThreadMailbox):
threading.Thread.__init__(self)
self.shutdown = False
self.sendDataThreadMailbox = sendDataThreadMailbox # This queue is used to submit data back to our associated sendDataThread.
self.collectionOfLists = {}
for i in range(10):
self.collectionOfLists[i] = []
def run(self):
print 'objectHashHolder running.'
iterator = 0
while not self.shutdown:
if len(self.collectionOfLists[iterator]) > 0:
print 'objectHashHolder is submitting', len(self.collectionOfLists[iterator]), 'items to the queue.'
self.sendDataThreadMailbox.put((0, 'sendinv', self.collectionOfLists[iterator]))
self.collectionOfLists[iterator] = []
iterator += 1
iterator %= 10
time.sleep(1)
print 'objectHashHolder shutting down.'
def holdHash(self,hash):
self.collectionOfLists[random.randrange(0, 10)].append(hash)
def close(self):
self.shutdown = True