def forwardPacket(self): while True: req = self.forwardingQueue.get() params = req["params"] segment = req["segment"] if params["next"] in self.forwardingCache: if time.time() - self.forwardingCache[params["next"]]["time"] < conf["cache_update_limit"]: reply = self.forwardingCache[params["next"]] reply.update({"next": params["next"]}) else: print "Expired, Updating cache", params, self.id client = helper.rpc_client() reply = json.loads(client.call("GET ROUTE" + json.dumps({"start": self.id, "end": params["end"]}))) self.forwardingCache.update( { reply["next"]: { "time": time.time(), "server_ip": reply["server_ip"], "server_port": reply["server_port"], } } ) else: print "Not in cache", params, self.id client = helper.rpc_client() reply = json.loads(client.call("GET ROUTE" + json.dumps({"start": self.id, "end": params["end"]}))) self.forwardingCache.update( { params["next"]: { "time": time.time(), "server_ip": reply["server_ip"], "server_port": reply["server_port"], } } ) self.transferingFd.sendto( "FWRD DATA" + json.dumps({"start": params["start"], "next": reply["next"], "end": params["end"]}) + segment, (reply["server_ip"], reply["server_port"]), ) ack_Data, ack_addr = self.transferingFd.recvfrom(MAX_SIZE)
def forwardPacket(self) : while True : req = self.forwardingQueue.get() params = req['params'] segment = req['segment'] if params['next'] in self.forwardingCache : if time.time() - self.forwardingCache[params['next']]['time'] < conf['cache_update_limit'] : reply = self.forwardingCache[params['next']] reply.update({'next':params['next']}) else : print 'Expired, Updating cache' , params , self.id client = helper.rpc_client() reply = json.loads(client.call('GET ROUTE' + json.dumps({'start':self.id,'end':params['end']}))) self.forwardingCache.update({reply['next']:{'time':time.time(),'server_ip':reply['server_ip'],'server_port':reply['server_port']}}) else : print 'Not in cache' , params , self.id client = helper.rpc_client() reply = json.loads(client.call('GET ROUTE' + json.dumps({'start':self.id,'end':params['end']}))) self.forwardingCache.update({params['next']:{'time':time.time(),'server_ip':reply['server_ip'],'server_port':reply['server_port']}}) self.transferingFd.sendto('FWRD DATA' + json.dumps({'start':params['start'],'next':reply['next'],'end':params['end']}) + segment,(reply['server_ip'],reply['server_port'])) ack_Data , ack_addr = self.transferingFd.recvfrom(MAX_SIZE)
def __init__(self,Id) : self.id = Id self.bindNodeServer() self.forwardingCache = {} self.forwardingQueue = Queue.Queue() self.incompleteData = {} self.openFds = {} client = helper.rpc_client() client_fd = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) client_fd.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) self.transferingFd = client_fd response = client.call('SRV UPDTE'+json.dumps({'ip':self.server_ip,'port':self.server_port,'id':self.id})) threading.Thread(target=self.nodeParameterUpdateRequest,args=()).start() threading.Thread(target=self.forwardPacket,args=()).start()
def transferData(self,end,file_path) : FILE = file_path.split('/')[-1] with open(file_path,'rb') as f : data = f.read() time_Stamp = helper.md5(time.time())[:6] + helper.md5(data[:100])[:6] client = helper.rpc_client() reply = json.loads(client.call('GET ROUTE' + json.dumps({'start':self.id,'end':end}))) packets_seq = [ '!_$@$_!' + FILE + '!_$@$_!' + str(i) + '!_$@$_!' + time_Stamp + '!_$@$_!' for i in range((len(data)/MAX_DATA_SIZE)+1)] client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) count = 00 for item in packets_seq : client.sendto('FWRD DATA' + json.dumps({'next':reply['next'],'start':self.id,'end':end}) + '!_$@damei@$_!' + FILE + '!_$@damei@$_!' + str(count) + '!_$@damei@$_!' + time_Stamp + '!_$@damei@$_!' + data[(count)*MAX_DATA_SIZE:(count+1)*MAX_DATA_SIZE],(reply['server_ip'],reply['server_port'])) ack_data , ack_addr = client.recvfrom(MAX_DATA_SIZE) count += 1 client.sendto('FWRD DATA' + json.dumps({'next':reply['next'],'start':self.id,'end':end}) + '!_$@damei@$_!' + FILE + '!_$@damei@$_!ENDENDEND!_$@damei@$_!' + time_Stamp + '!_$@damei@$_!',(reply['server_ip'],reply['server_port'])) ack_data , ack_addr = client.recvfrom(MAX_DATA_SIZE)
def __init__(self, Id): self.id = Id self.bindNodeServer() self.forwardingCache = {} self.forwardingQueue = Queue.Queue() self.incompleteData = {} self.openFds = {} client = helper.rpc_client() client_fd = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) client_fd.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.transferingFd = client_fd response = client.call( "SRV UPDTE" + json.dumps({"ip": self.server_ip, "port": self.server_port, "id": self.id}) ) threading.Thread(target=self.nodeParameterUpdateRequest, args=()).start() threading.Thread(target=self.forwardPacket, args=()).start()
def transferData(self, end, file_path): FILE = file_path.split("/")[-1] with open(file_path, "rb") as f: data = f.read() time_Stamp = helper.md5(time.time())[:6] + helper.md5(data[:100])[:6] client = helper.rpc_client() reply = json.loads(client.call("GET ROUTE" + json.dumps({"start": self.id, "end": end}))) packets_seq = [ "!_$@$_!" + FILE + "!_$@$_!" + str(i) + "!_$@$_!" + time_Stamp + "!_$@$_!" for i in range((len(data) / MAX_DATA_SIZE) + 1) ] client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) count = 00 for item in packets_seq: client.sendto( "FWRD DATA" + json.dumps({"next": reply["next"], "start": self.id, "end": end}) + "!_$@damei@$_!" + FILE + "!_$@damei@$_!" + str(count) + "!_$@damei@$_!" + time_Stamp + "!_$@damei@$_!" + data[(count) * MAX_DATA_SIZE : (count + 1) * MAX_DATA_SIZE], (reply["server_ip"], reply["server_port"]), ) ack_data, ack_addr = client.recvfrom(MAX_DATA_SIZE) count += 1 client.sendto( "FWRD DATA" + json.dumps({"next": reply["next"], "start": self.id, "end": end}) + "!_$@damei@$_!" + FILE + "!_$@damei@$_!ENDENDEND!_$@damei@$_!" + time_Stamp + "!_$@damei@$_!", (reply["server_ip"], reply["server_port"]), ) ack_data, ack_addr = client.recvfrom(MAX_DATA_SIZE)