FileDocCategorySizeDatePackage
TFTPPacket.javaAPI DocApache Commons NET 1.4.1 API8065Sat Dec 03 10:05:48 GMT 2005org.apache.commons.net.tftp

TFTPPacket

public abstract class TFTPPacket extends Object
TFTPPacket is an abstract class encapsulating the functionality common to the 5 types of TFTP packets. It also provides a static factory method that will create the correct TFTP packet instance from a datagram. This relieves the programmer from having to figure out what kind of TFTP packet is contained in a datagram and create it himself.

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.

author
Daniel F. Savarese
see
TFTPPacketException
see
TFTP

Fields Summary
static final int
MIN_PACKET_SIZE
The minimum size of a packet. This is 4 bytes. It is enough to store the opcode and blocknumber or other required data depending on the packet type.
public static final int
READ_REQUEST
This is the actual TFTP spec identifier and is equal to 1. Identifier returned by {@link #getType getType()} indicating a read request packet.
public static final int
WRITE_REQUEST
This is the actual TFTP spec identifier and is equal to 2. Identifier returned by {@link #getType getType()} indicating a write request packet.
public static final int
DATA
This is the actual TFTP spec identifier and is equal to 3. Identifier returned by {@link #getType getType()} indicating a data packet.
public static final int
ACKNOWLEDGEMENT
This is the actual TFTP spec identifier and is equal to 4. Identifier returned by {@link #getType getType()} indicating an acknowledgement packet.
public static final int
ERROR
This is the actual TFTP spec identifier and is equal to 5. Identifier returned by {@link #getType getType()} indicating an error packet.
public static final int
SEGMENT_SIZE
The TFTP data packet maximum segment size in bytes. This is 512 and is useful for those familiar with the TFTP protocol who want to use the {@link org.apache.commons.net.tftp.TFTP} class methods to implement their own TFTP servers or clients.
int
_type
The type of packet.
int
_port
The port the packet came from or is going to.
InetAddress
_address
The host the packet is going to be sent or where it came from.
Constructors Summary
TFTPPacket(int type, InetAddress address, int port)
This constructor is not visible outside of the package. It is used by subclasses within the package to initialize base data.

param
type The type of the packet.
param
address The host the packet came from or is going to be sent.
param
port The port the packet came from or is going to be sent.

        _type = type;
        _address = address;
        _port = port;
    
Methods Summary
abstract java.net.DatagramPacket_newDatagram(java.net.DatagramPacket datagram, byte[] data)
This is an abstract 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 should be set as the datagram's data and the datagram returned.

param
datagram The datagram to create.
param
data The buffer to store the packet and to use in the datagram.
return
The datagram argument.

public final java.net.InetAddressgetAddress()
Returns the address of the host where the packet is going to be sent or where it came from.

return
The type of the packet.

        return _address;
    
public final intgetPort()
Returns the port where the packet is going to be sent or where it came from.

return
The port where the packet came from or where it is going.

        return _port;
    
public final intgetType()
Returns the type of the packet.

return
The type of the packet.

        return _type;
    
public abstract java.net.DatagramPacketnewDatagram()
Creates a UDP datagram containing all the TFTP packet data in the proper format. This is an abstract 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.

return
A UDP datagram containing the TFTP packet.

public static final org.apache.commons.net.tftp.TFTPPacketnewTFTPPacket(java.net.DatagramPacket datagram)
When you receive a datagram that you expect to be a TFTP packet, you use this factory method to create the proper TFTPPacket object encapsulating the data contained in that datagram. This method is the only way you can instantiate a TFTPPacket derived class from a datagram.

param
datagram The datagram containing a TFTP packet.
return
The TFTPPacket object corresponding to the datagram.
exception
TFTPPacketException If the datagram does not contain a valid TFTP packet.


                                                                                                    
         
     
    
        byte[] data;
        TFTPPacket packet = null;

        if (datagram.getLength() < MIN_PACKET_SIZE)
            throw new TFTPPacketException(
                "Bad packet. Datagram data length is too short.");

        data = datagram.getData();

        switch (data[1])
        {
        case READ_REQUEST:
            packet = new TFTPReadRequestPacket(datagram);
            break;
        case WRITE_REQUEST:
            packet = new TFTPWriteRequestPacket(datagram);
            break;
        case DATA:
            packet = new TFTPDataPacket(datagram);
            break;
        case ACKNOWLEDGEMENT:
            packet = new TFTPAckPacket(datagram);
            break;
        case ERROR:
            packet = new TFTPErrorPacket(datagram);
            break;
        default:
            throw new TFTPPacketException(
                "Bad packet.  Invalid TFTP operator code.");
        }

        return packet;
    
public final voidsetAddress(java.net.InetAddress address)
Sets the host address where the packet is going to be sent.

        _address = address;
    
public final voidsetPort(int port)
Sets the port where the packet is going to be sent.

        _port = port;