def sendACK(rxp_socket): print "Sending ACK!" header = RxPPacketHeader() header.src_port = rxp_socket.source_address[1] header.dst_port = rxp_socket.destination_address[1] header.ack_flag = 1 header.ack_number = rxp_socket.ack_number packet = RxPPacket(header) rxp_socket.sendPacket(packet)
def sendSYNACK(rxp_socket): print "Sending SYNACK!" header = RxPPacketHeader() header.src_port = rxp_socket.source_address[1] header.dst_port = rxp_socket.destination_address[1] header.syn_flag = 1 header.ack_flag = 1 packet = RxPPacket(header) number_of_resends = RxPPacket.MAX_RESEND_LIMIT while number_of_resends > 0: rxp_socket.sendPacket(packet) try: address, packet = rxp_socket.receivePacket(RxPPacket.MAX_PACKET_SIZE) if not packet.verifyPacket(): #invalid checksum print("Incorrect checksum for sent data ack. Discarding packet") number_of_resends -= 1 elif packet.header.syn_flag == 1 or packet.header.ack_flag == 0: print("Not a ACK! Discarding") number_of_resends -= 1 else: print("Received succesful ACK to our SYNACK") return packet except Exception as e: if str(e) == "timed out": print("Sending SYN timed out. " + str(number_of_resends) + " resends remaining") number_of_resends -= 1 else: raise e return None