From 18c0f7d03a693c7bc9f2a02aeeb0988712a2ef25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A0=D0=BE=D0=BC=D0=B0=D0=BD=20=D0=91=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D0=B4=D0=B8=D0=BD?= Date: Mon, 8 Apr 2019 09:34:47 +0300 Subject: [PATCH] part of close() --- mods/utcp.py | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/mods/utcp.py b/mods/utcp.py index f3f4afb..94b4017 100644 --- a/mods/utcp.py +++ b/mods/utcp.py @@ -45,6 +45,9 @@ class Connection: def seq_inc(self, inc=1): self.seq += inc return self.seq + def set_ack(self, ack): + self.ack = ack + return ack class TCPPacket(object): def __init__(self, seq): @@ -249,13 +252,12 @@ class TCP(object): except socket.error as error: raise EOFError('Socket was closed before executing command. Error is: %s.' % error) def send_ack(self, connection, ack): - self.connections[connection].ack = ack - self.connections[connection].seq += 1 - self.connections[connection].set_flags(ack=True) - self.connections[connection].data = b'' - packet_to_send = pickle.dumps(self.connections[connection]) - self.own_socket.sendto(packet_to_send, connection) # after receiving correct info sends ack - self.connections[connection].set_flags() + conn = self.connections[connection] + ack_packet = TCPPacket(conn.seq_inc()) + ack_packet.ack = conn.set_ack(ack) + ack_packet.set_flags(ack=True) + packet_to_send = pickle.dumps(ack_packet) + self.own_socket.sendto(packet_to_send, connection) def listen_handler(self, max_connections): try: while True and self.status: @@ -342,13 +344,11 @@ class TCP(object): conn.peer_pub = simplecrypto.RsaPublicKey(peer_pub) except: raise socket.error('Decrypt peer public key error') - ack_packet = - self.connections[server_address].ack = answer.seq + 1 - self.connections[server_address].seq += 1 - self.connections[server_address].set_flags(ack=True) - second_packet_to_send = pickle.dumps(self.connections[server_address]) - self.own_socket.sendto(second_packet_to_send, list(self.connections.keys())[FIRST]) - self.connections[server_address].set_flags() + ack_packet = TCPPacket(conn.seq_inc()) + ack_packet.ack = conn.set_ack(answer.seq + 1) + ack_packet.set_flags(ack=True) + second_packet_to_send = pickle.dumps(ack_packet) + self.own_socket.sendto(second_packet_to_send, server_address) except socket.error as error: self.own_socket.close() @@ -374,12 +374,13 @@ class TCP(object): connection = list(self.connections.keys())[0] else: raise EOFError('Connection not in connected devices') - self.connections[connection].set_flags(fin=True) - self.connections[connection].seq += 1 - packet_to_send = pickle.dumps(self.connections[connection]) + conn = self.connections[connection] + fin_packet = TCPPacket(conn.seq_inc()) + fin_packet.set_flags(fin=True) + packet_to_send = pickle.dumps(fin_packet) self.own_socket.sendto(packet_to_send, connection) answer = self.find_correct_packet('ACK', connection) # change cause may get a None value - self.connections[connection].ack += 1 + conn.ack += 1 answer = self.find_correct_packet('FIN-ACK', connection) if answer.flag_fin != 1: raise Exception('The receiver didn\'t send the fin packet')