package com.limegroup.gnutella.udpconnect;
import com.limegroup.gnutella.messages.BadPacketException;
/** The data message is used to communicate data on the connection.
*/
public class DataMessage extends UDPConnectionMessage {
public static final int MAX_DATA = 512;
/**
* Construct a new DataMessage with the specified data.
*/
public DataMessage(byte connectionID, long sequenceNumber,
byte[] data, int datalength) {
super(
/* his connectionID */ connectionID,
/* opcode */ OP_DATA,
/* sequenceNumber */ sequenceNumber,
/* data */ data,
/* data length */ datalength
);
}
/**
* Construct a new DataMessage from the network.
*/
public DataMessage(
byte[] guid, byte ttl, byte hops, byte[] payload)
throws BadPacketException {
super(guid, ttl, hops, payload);
}
/**
* Return the data in the GUID as the data1 chunk.
*/
public Chunk getData1Chunk() {
if ( _data1Length == 0 )
return null;
Chunk chunk = new Chunk();
chunk.data = _data1;
chunk.start = _data1Offset;
chunk.length = _data1Length;
return chunk;
}
/**
* Return the data in the payload as the data2 chunk/
*/
public Chunk getData2Chunk() {
if ( _data2Length == 0 )
return null;
Chunk chunk = new Chunk();
chunk.data = _data2;
chunk.start = _data2Offset;
chunk.length = _data2Length;
return chunk;
}
public byte getDataAt(int i) {
if (i < MAX_GUID_DATA)
return _data1[i+(16-MAX_GUID_DATA)];
return _data2[i-MAX_GUID_DATA];
}
public String toString() {
return "DataMessage DestID:"+getConnectionID()+" len:"+
getDataLength()+" seq:"+getSequenceNumber();
}
}