diff --git a/main.py b/main.py index e3fca7e..e647951 100755 --- a/main.py +++ b/main.py @@ -10,137 +10,137 @@ class Meshenger: msg_dir = os.path.relpath('msg/') - def __init__(self): + def __init__(self): - os.system("echo 1 >> /proc/sys/net/ipv6/conf/br-lan/disable_ipv6") - self.own_ip = self.get_ip_adress() - #self.own_ip = "192.168.2.196" + os.system("echo 1 >> /proc/sys/net/ipv6/conf/br-lan/disable_ipv6") + self.own_ip = self.get_ip_adress() + #self.own_ip = "192.168.2.196" - while True: + while True: - print 'discovering devices' - time.sleep(1) - self.discover() + print 'discovering devices' + time.sleep(1) + self.discover() - if len(self.devices) > 0: - print 'found', len(self.devices),'device(s) retreiving indices' - for device in self.devices: - nodepath = ip_to_hash(device) + if len(self.devices) > 0: + print 'found', len(self.devices),'device(s) retreiving indices' + for device in self.devices: + nodepath = ip_to_hash(device) - self.get_index(device, nodepath) + self.get_index(device, nodepath) - self.get_messages(device, nodepath) - print 'updating own index' - self.build_index() - - time.sleep(5) + self.get_messages(device, nodepath) + print 'updating own index' + self.build_index() + + time.sleep(5) - def announce(self): + def announce(self): - #announces it's existance to other nodes - sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP) - sock.sendto(bericht, ("ff02::1", self.announce_port)) - sock.close() + #announces it's existance to other nodes + sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP) + sock.sendto(bericht, ("ff02::1", self.announce_port)) + sock.close() - def index(self): + def index(self): - a = '' - # builds the latest index of all the messages that are on this node + a = '' + # builds the latest index of all the messages that are on this node - def discover(self): + def discover(self): - # discovers other nodes by listening to the Meshenger announce port - bufferSize = 1024 # whatever you need + # discovers other nodes by listening to the Meshenger announce port + bufferSize = 1024 # whatever you need - s = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP) - s.bind(('::', self.announce_port)) - s.setblocking(0) + s = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP) + s.bind(('::', self.announce_port)) + s.setblocking(0) - #global devices + #global devices - while True: - result = select.select([s],[],[])[0][0].recvfrom(bufferSize) - if result not in self.devices and result[1][0] != self.own_ip: - self.devices.append(result[1][0]) - return - time.sleep(1) + while True: + result = select.select([s],[],[])[0][0].recvfrom(bufferSize) + if result not in self.devices and result[1][0] != self.own_ip: + self.devices.append(result[1][0]) + return + time.sleep(1) - def serve(self): + def serve(self): - a = '' - # serves both the index and the messages on the node over http - # plus manages the client-side web interface + a = '' + # serves both the index and the messages on the node over http + # plus manages the client-side web interface - def build_index(self): - previous_index = [] + def build_index(self): + previous_index = [] - current_index = os.listdir(msg_dir) + current_index = os.listdir(msg_dir) - if current_index != previous_index: - with open('index', 'wb') as index: - for message in os.listdir(msg_dir): - index.write(message) - index.write('\n') - with open('index_last_update', 'wb') as indexupdate: - indexupdate.write(str(int(time.time()))) - current_index = previous_index + if current_index != previous_index: + with open('index', 'wb') as index: + for message in os.listdir(msg_dir): + index.write(message) + index.write('\n') + with open('index_last_update', 'wb') as indexupdate: + indexupdate.write(str(int(time.time()))) + current_index = previous_index - def get_index(self,ip, path): + def get_index(self,ip, path): - os.system('wget http://['+ip+'%adhoc0]:13338/index -O '+os.path.join(path,'index')) + os.system('wget http://['+ip+'%adhoc0]:13338/index -O '+os.path.join(path,'index')) - # downloads the index from other nodes and then proceeds to downloads messages it doesn't have already + # downloads the index from other nodes and then proceeds to downloads messages it doesn't have already - def get_messages(self, ip, path): + def get_messages(self, ip, path): - with open(os.path.join(path,'index')) as index: - index = index.read().split('\n') - for message in index: - messagepath = os.path.join(os.path.abspath(msg_dir), message) - if not os.path.exists(messagepath): - print 'downloading', message, 'to', messagepath - os.system('wget http://['+ip+'%adhoc0]:13338/msg/'+message+' -O '+messagepath) + with open(os.path.join(path,'index')) as index: + index = index.read().split('\n') + for message in index: + messagepath = os.path.join(os.path.abspath(msg_dir), message) + if not os.path.exists(messagepath): + print 'downloading', message, 'to', messagepath + os.system('wget http://['+ip+'%adhoc0]:13338/msg/'+message+' -O '+messagepath) - # s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) + # s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) - # s.connect(('http://[fe80::6666:b3ff:feeb:68c2%adhoc0]/lijst', 13338)) + # s.connect(('http://[fe80::6666:b3ff:feeb:68c2%adhoc0]/lijst', 13338)) - # s.send("GET / HTTP/1.0\r\n\r\n") + # s.send("GET / HTTP/1.0\r\n\r\n") - # while 1: - # buf = s.recv(1000) - # if not buf: - # break - # sys.stdout.write(buf) + # while 1: + # buf = s.recv(1000) + # if not buf: + # break + # sys.stdout.write(buf) - # s.close() + # s.close() - def ip_to_hash(self, ip): - import hashlib - hasj = hashlib.md5(ip).hexdigest() - nodepath = os.path.join(os.path.abspath('nodes/'), hasj) - if not os.path.exists(nodepath): - os.mkdir(nodepath) + def ip_to_hash(self, ip): + import hashlib + hasj = hashlib.md5(ip).hexdigest() + nodepath = os.path.join(os.path.abspath('nodes/'), hasj) + if not os.path.exists(nodepath): + os.mkdir(nodepath) - return nodepath + return nodepath - def clientsite(self): - a = '' + def clientsite(self): + a = '' - #tools + #tools - def get_ip_adress(self): - if not os.path.isfile('interfaceip6adress'): - os.system('ifconfig -a adhoc0 | grep inet6 > interfaceip6adress') + def get_ip_adress(self): + if not os.path.isfile('interfaceip6adress'): + os.system('ifconfig -a adhoc0 | grep inet6 > interfaceip6adress') - with open('interfaceip6adress', 'r') as a: - return a.read().split()[2].split('/')[0] + with open('interfaceip6adress', 'r') as a: + return a.read().split()[2].split('/')[0] - if __name__ == "__main__": - print "test" - meshenger = Meshenger() + if __name__ == "__main__": + print "test" + meshenger = Meshenger()