def test_communications (self): #node = Node.Node(1, 'localhost', 5555) node = Node.Node(1, 'localhost', 5555, [(2, 'localhost', 1), (3, 'u-03.ecc.unr.edu', 1)], 1500, 0) routing_table = RoutingProtocol.DVRP(node) # YOU NEED THE \r\n IN HERE. segment = 'This is a payload.\r\n' #node.SetMTU(1500) #node.AddLink((1, 'localhost', 1)) # A link to itself... #node.AddLink((2, 'localhost', 1)) #node.AddLink((3, 'localhost', 1)) client_address, client_socket = LinkLayer.InitializeSocket(node) what_was_sent = TransportLayer.l4_sendto(client_socket, 2, 5555, routing_table, segment, node) #print(what_was_sent) # Receive it. length_of_buffer, received_frame, datagram_to_pass, external_address, received_segment = \ LinkLayer.l2_recvfrom(client_socket, node) print(received_segment)
def l3_recvfrom(client_socket, datagram, node=None): """ This function will be used in Layer 4, the Transport layer. Nowhere in this Layer 3 is this function used--rather, this layer purely uses l2_recvfrom from the LinkLayer module. """ # Split the headers. packet = datagram.split("@@") datagram_header = packet[0].split("@") segment_header = packet[1].split("@") # Now we should have something like [Datagram, Segment]. # Step 1. Build a new Datagram. new_datagram = Datagram( int(datagram_header[0]), int(datagram_header[1]), int(datagram_header[2]), int(datagram_header[3]), int(datagram_header[6]), int(datagram_header[7]), int(datagram_header[4]), int(datagram_header[5]), int(datagram_header[8]), packet[1], ) # If it's at the destination node... if int(datagram_header[4]) == node.GetNID(): # If total_sequence_numbers > 1 then wait for the other segments to arrive? # How would we do this? Call l2_recvfrom again? # segment = RTP.Segment(A BUNCH OF SEGMENT HEADERS) # Reassemble packets and build the segment. new_segment = TransportLayer.Segment() new_segment.SetPayload(segment_header) # Call l4_recvfrom # print(new_segment) return TransportLayer.l4_recvfrom(client_socket, new_segment, node) else: # Step 1. If TTL is 0, then drop, else, decrease if new_datagram.GetTTL() > 0: new_datagram.DecreaseTTL()
file_names = os.listdir(".") for i in file_names: print " -", i print"- Enter the name of the file you would like" file_name = raw_input("- to transfer, including extension: ") print file_name file = open(file_name, "rb") my_info[0] = "FileTX" my_info[2] = file_name x = 1 while x: data_2_write = file.read(400) if data_2_write == "": x = 0 # EOF, exit while my_info[0] = "FileTXDone" client_msg, RDP = TransportLayer.client_pack(my_info, data_2_write, RDP) my_socket.sendto(client_msg, (dest_IP, int(dest_port))) #send that we are done. else: client_msg = " ".join(my_info) client_msg = client_msg + " " + data_2_write #client_msg, RDP = TransportLayer.client_pack(my_info, data_2_write, RDP) my_socket.sendto(client_msg, (dest_IP, int(dest_port))) file.close() print "File TX done!" while_control = 0 elif TX_RX == 'RX': print "RX mode: You are going to receive a file..." x = 1