From 410154779451b21ea14d7f6272c320059a772949 Mon Sep 17 00:00:00 2001 From: "Jeffrey C. Ollie" Date: Tue, 12 Aug 2008 22:00:45 -0500 Subject: Import files from BitTorrent 4.4.0 http://download.bittorrent.com/dl/BitTorrent-4.4.0.tar.gz --- khashmir/unet.py | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 khashmir/unet.py (limited to 'khashmir/unet.py') diff --git a/khashmir/unet.py b/khashmir/unet.py new file mode 100644 index 0000000..e163a3f --- /dev/null +++ b/khashmir/unet.py @@ -0,0 +1,84 @@ +# The contents of this file are subject to the BitTorrent Open Source License +# Version 1.1 (the License). You may not copy or use this file, in either +# source code or executable form, except in compliance with the License. You +# may obtain a copy of the License at http://www.bittorrent.com/license/. +# +# Software distributed under the License is distributed on an AS IS basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. + +# +# knet.py +# create a network of khashmir nodes +# usage: knet.py + +from utkhashmir import UTKhashmir +from BitTorrent.RawServer_magic import RawServer +from BitTorrent.defaultargs import common_options, rare_options +from random import randrange +from threading import Event +import sys, os + +from krpc import KRPC +KRPC.noisy = 1 + +class Network: + def __init__(self, size=0, startport=5555, localip='127.0.0.1'): + self.num = size + self.startport = startport + self.localip = localip + + def _done(self, val): + self.done = 1 + + def simpleSetUp(self): + #self.kfiles() + d = dict([(x[0],x[1]) for x in common_options + rare_options]) + self.r = RawServer(Event(), d) + self.l = [] + for i in range(self.num): + self.l.append(UTKhashmir('', self.startport + i, 'kh%s.db' % (self.startport + i), self.r)) + + for i in self.l: + i.addContact(self.localip, self.l[randrange(0,self.num)].port) + i.addContact(self.localip, self.l[randrange(0,self.num)].port) + i.addContact(self.localip, self.l[randrange(0,self.num)].port) + self.r.listen_once(1) + self.r.listen_once(1) + self.r.listen_once(1) + + for i in self.l: + self.done = 0 + i.findCloseNodes(self._done) + while not self.done: + self.r.listen_once(1) + for i in self.l: + self.done = 0 + i.findCloseNodes(self._done) + while not self.done: + self.r.listen_once(1) + + def tearDown(self): + for i in self.l: + i.rawserver.stop_listening_udp(i.socket) + i.socket.close() + #self.kfiles() + + def kfiles(self): + for i in range(self.startport, self.startport+self.num): + try: + os.unlink('kh%s.db' % i) + except: + pass + + self.r.listen_once(1) + +if __name__ == "__main__": + n = Network(int(sys.argv[1]), int(sys.argv[2])) + n.simpleSetUp() + print ">>> network ready" + try: + n.r.listen_forever() + finally: + n.tearDown() -- cgit