/* * Author: Wenbing Zhao * Last Modified: 11/10/2006 * For EEC484/584 Project 2 */ import java.util.*; // for timers public class Packet { public static final int MAX_PACKET_PAYLOAD = 1024; public static final int HEADER_LEN = 12; // size of 3 integers // max_packet_size = payload length + header fields public static final int MAX_PACKET_SIZE = MAX_PACKET_PAYLOAD + HEADER_LEN; public int seq; // sequence number for duplicate detection public int ack; // acked sequence number public int length; // payload length public byte[] payload = new byte[MAX_PACKET_PAYLOAD]; private java.util.Timer m_timer; private SendTimerTask m_timerTask = new SendTimerTask(); // set right before initial sending to enable timeout callback private TransportLayer m_transportLayer = null; // constructor to be used when sending public Packet() { seq = -1; ack = -1; length = 0; } // constructor to be used when receiving public Packet(byte[] receivedData) { int index = 0; // set seq number byte[] intArray = {receivedData[index], receivedData[index+1], receivedData[index+2], receivedData[index+3]}; seq = ByteArrayUtils.readInt(intArray); index += 4; // set ack sequence number intArray[0] = receivedData[index++]; intArray[1] = receivedData[index++]; intArray[2] = receivedData[index++]; intArray[3] = receivedData[index++]; ack = ByteArrayUtils.readInt(intArray); // payload length intArray[0] = receivedData[index++]; intArray[1] = receivedData[index++]; intArray[2] = receivedData[index++]; intArray[3] = receivedData[index++]; length = ByteArrayUtils.readInt(intArray); for(int i=0; i