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