package com.limegroup.gnutella.udpconnect;
import com.limegroup.gnutella.messages.BadPacketException;
/** The fin message is used to signal the end of the connection.
*/
public class FinMessage extends UDPConnectionMessage {
public static final byte REASON_NORMAL_CLOSE = 0x0;
public static final byte REASON_YOU_CLOSED = 0x1;
public static final byte REASON_TIMEOUT = 0x2;
public static final byte REASON_LARGE_PACKET = 0x3;
public static final byte REASON_TOO_MANY_RESENDS = 0x4;
public static final byte REASON_SEND_EXCEPTION = 0x5;
private byte _reasonCode;
/**
* Construct a new FinMessage with the specified settings.
*/
public FinMessage(byte connectionID, long sequenceNumber, byte reasonCode) {
super(
/* his connectionID */ connectionID,
/* opcode */ OP_FIN,
/* sequenceNumber */ sequenceNumber,
/* Put reasonCode in the data */ buildByteArray(reasonCode),
/* data length of one */ 1
);
_reasonCode = reasonCode;
}
/**
* Construct a new FinMessage from the network.
*/
public FinMessage(
byte[] guid, byte ttl, byte hops, byte[] payload)
throws BadPacketException {
super(guid, ttl, hops, payload);
_reasonCode = guid[GUID_DATA_START];
}
public String toString() {
return "FinMessage DestID:"+getConnectionID()+" reasonCode:"+_reasonCode;
}
}