Remove all the airhook stuff.
[quix0rs-apt-p2p.git] / knet.py
1 #
2 #  knet.py
3 #  create a network of khashmir nodes
4 # usage: knet.py <num_nodes> <start_port> <ip_address>
5
6 from khashmir import Khashmir
7 from twisted.internet import reactor
8 from whrandom import randrange
9 import sys, os
10
11 class Network:
12     def __init__(self, size=0, startport=5555, localip='127.0.0.1'):
13         self.num = size
14         self.startport = startport
15         self.localip = localip
16
17     def _done(self, val):
18         self.done = 1
19         
20     def setUp(self):
21         self.kfiles()
22         self.l = []
23         for i in range(self.num):
24             self.l.append(Khashmir('', self.startport + i, '/tmp/kh%s.db' % (self.startport + i)))
25         reactor.iterate()
26         reactor.iterate()
27         
28         for i in self.l:
29             i.addContact(self.localip, self.l[randrange(0,self.num)].port)
30             i.addContact(self.localip, self.l[randrange(0,self.num)].port)
31             i.addContact(self.localip, self.l[randrange(0,self.num)].port)
32             reactor.iterate()
33             reactor.iterate()
34             reactor.iterate() 
35             
36         for i in self.l:
37             self.done = 0
38             i.findCloseNodes(self._done)
39             while not self.done:
40                 reactor.iterate()
41         for i in self.l:
42             self.done = 0
43             i.findCloseNodes(self._done)
44             while not self.done:
45                 reactor.iterate()
46
47     def tearDown(self):
48         for i in self.l:
49             i.listenport.stopListening()
50         self.kfiles()
51         
52     def kfiles(self):
53         for i in range(self.startport, self.startport+self.num):
54             try:
55                 os.unlink('/tmp/kh%s.db' % i)
56             except:
57                 pass
58             
59         reactor.iterate()
60     
61 if __name__ == "__main__":
62     n = Network(int(sys.argv[1]), int(sys.argv[2]), sys.argv[3])
63     n.setUp()
64     try:
65         reactor.run()
66     finally:
67         n.tearDown()