Exemple #1
0
	def connect_endpoint(self, remote_name):
		t = 0
		while t < 999999:
			if self.track_dict.get(remote_name):
				break
			time.sleep(1)
			t += 1
			if t > 30:
				raise Exception(f'{remote_name} not registed')

		"""connect to another endpoint"""
		acc = 0.5 #TODO: implement sleep "growth"
		print(self.track_dict)
		connected = False
		synned = False
		remote_offset = None
		my_pub_offset = None
		syn_time=0
		ack_time=0
		self.dat = PunchObject("")
		for count in range(550):
			print("versuch %s" % count)
			r,w,x = select([self.s], [self.s], [], 0)
			if w:
				r_addr = self.track_dict.get(remote_name)
				r_addr = r_addr[0], r_addr[1]
				print("addr update",r_addr)

				if connected:
					print("send msg to", r_addr)
					msg = self.dat.compose('MSG', "%s offsetted msg: %s has public offset: %s" % (count, self.session_name, my_pub_offset))
					self.send(msg, r_addr)
					print('send :', msg)

				if not self.dat.SYN and not self.dat.ACK:
					msg = self.dat.compose('SYN', "%s %s,%s"%(count, self.session_name, 0) )#SYN mit offset
					self.send(msg, r_addr)
					print('No:send :', msg)
					syn_time = time.time()
	
				if self.dat.SYN:
					msg = self.dat.compose('ACK',"%s %s,%s" % \
								(count, self.session_name, 0) )
					self.send(msg, r_addr)
					print('SYNed:send :', msg)
			if r:
				data,addr=self.recv()
				print("data: ", data)
				self.dat = PunchObject(data)
				if self.dat.MSG:
					num_nomsg = 0
					print(str(self.dat), ':', addr)
				elif self.dat.SYN:
					print("recvd SYN ", str(self.dat), ':', addr)
					synned = True
				elif self.dat.ACK:
					ack_time = time.time()-syn_time
					print("recvd ACK ", str(self.dat), ack_time, ':', addr)
					if synned:
						connected = True
						print("Connected.", remote_name, ':', addr)
						self.p2plist[remote_name] = addr
				elif self.dat.JSON:
					self.track_dict = json.loads(data[1:])
				else:
					num_nomsg += 1
			time.sleep(acc)
Exemple #2
0
	def __init__(self, port):
		self.track_dict['this'] = ['localhost', port, 0]
		self.p = PunchObject("")
		self.s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
		self.s.bind(('0.0.0.0', self.track_dict['this'][1]))
Exemple #3
0
	def send_request(self, offset):
		self.send("%s,%d" % (self.session_name, offset) , self.env.server_addr())
		data,addr=self.recv()
		self.dat = PunchObject(data)
		if self.dat.JSON:
			self.track_dict = json.loads(data[1:])