TFTPDataPacketpublic final class TFTPDataPacket extends TFTPPacket A final class derived from TFTPPacket definiing the TFTP Data
packet type.
Details regarding the TFTP protocol and the format of TFTP packets can
be found in RFC 783. But the point of these classes is to keep you
from having to worry about the internals. Additionally, only very
few people should have to care about any of the TFTPPacket classes
or derived classes. Almost all users should only be concerned with the
{@link org.apache.commons.net.tftp.TFTPClient} class
{@link org.apache.commons.net.tftp.TFTPClient#receiveFile receiveFile()}
and
{@link org.apache.commons.net.tftp.TFTPClient#sendFile sendFile()}
methods.
|
Fields Summary |
---|
public static final int | MAX_DATA_LENGTHThe maximum number of bytes in a TFTP data packet (512) | public static final int | MIN_DATA_LENGTHThe minimum number of bytes in a TFTP data packet (0) | int | _blockNumberThe block number of the packet. | int | _lengthThe length of the data. | int | _offsetThe offset into the _data array at which the data begins. | byte[] | _dataThe data stored in the packet. |
Constructors Summary |
---|
public TFTPDataPacket(InetAddress destination, int port, int blockNumber, byte[] data, int offset, int length)Creates a data packet to be sent to a host at a given port
with a given block number. The actual data to be sent is passed as
an array, an offset, and a length. The offset is the offset into
the byte array where the data starts. The length is the length of
the data. If the length is greater than MAX_DATA_LENGTH, it is
truncated.
super(TFTPPacket.DATA, destination, port);
_blockNumber = blockNumber;
_data = data;
_offset = offset;
if (length > MAX_DATA_LENGTH)
_length = MAX_DATA_LENGTH;
else
_length = length;
| public TFTPDataPacket(InetAddress destination, int port, int blockNumber, byte[] data)
this(destination, port, blockNumber, data, 0, data.length);
| TFTPDataPacket(DatagramPacket datagram)Creates a data packet based from a received
datagram. Assumes the datagram is at least length 4, else an
ArrayIndexOutOfBoundsException may be thrown.
super(TFTPPacket.DATA, datagram.getAddress(), datagram.getPort());
_data = datagram.getData();
_offset = 4;
if (getType() != _data[1])
throw new TFTPPacketException("TFTP operator code does not match type.");
_blockNumber = (((_data[2] & 0xff) << 8) | (_data[3] & 0xff));
_length = datagram.getLength() - 4;
if (_length > MAX_DATA_LENGTH)
_length = MAX_DATA_LENGTH;
|
Methods Summary |
---|
java.net.DatagramPacket | _newDatagram(java.net.DatagramPacket datagram, byte[] data)This is a method only available within the package for
implementing efficient datagram transport by elminating buffering.
It takes a datagram as an argument, and a byte buffer in which
to store the raw datagram data. Inside the method, the data
is set as the datagram's data and the datagram returned.
data[0] = 0;
data[1] = (byte)_type;
data[2] = (byte)((_blockNumber & 0xffff) >> 8);
data[3] = (byte)(_blockNumber & 0xff);
// Doublecheck we're not the same
if (data != _data)
System.arraycopy(_data, _offset, data, 4, _length);
datagram.setAddress(_address);
datagram.setPort(_port);
datagram.setData(data);
datagram.setLength(_length + 4);
return datagram;
| public int | getBlockNumber()Returns the block number of the data packet.
return _blockNumber;
| public byte[] | getData()Returns the byte array containing the packet data.
return _data;
| public int | getDataLength()Returns the length of the data part of the data packet.
return _length;
| public int | getDataOffset()Returns the offset into the byte array where the packet data actually
starts.
return _offset;
| public java.net.DatagramPacket | newDatagram()Creates a UDP datagram containing all the TFTP
data packet data in the proper format.
This is a method exposed to the programmer in case he
wants to implement his own TFTP client instead of using
the {@link org.apache.commons.net.tftp.TFTPClient}
class.
Under normal circumstances, you should not have a need to call this
method.
byte[] data;
data = new byte[_length + 4];
data[0] = 0;
data[1] = (byte)_type;
data[2] = (byte)((_blockNumber & 0xffff) >> 8);
data[3] = (byte)(_blockNumber & 0xff);
System.arraycopy(_data, _offset, data, 4, _length);
return new DatagramPacket(data, _length + 4, _address, _port);
| public void | setBlockNumber(int blockNumber)Sets the block number of the data packet.
_blockNumber = blockNumber;
| public void | setData(byte[] data, int offset, int length)Sets the data for the data packet.
_data = data;
_offset = offset;
_length = length;
if (length > MAX_DATA_LENGTH)
_length = MAX_DATA_LENGTH;
else
_length = length;
|
|