org.apache.commons.net.tftp

## Class TFTPPacket

- java.lang.Object
- - org.apache.commons.net.tftp.TFTPPacket

- Direct Known Subclasses:
    TFTPAckPacket, TFTPDataPacket, TFTPErrorPacket, TFTPRequestPacket

      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 `TFTPClient` class `receiveFile()` and `sendFile()` methods.

  See Also:
    `TFTPPacketException`, `TFTP`

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static int` | `ACKNOWLEDGEMENT` This is the actual TFTP spec identifier and is equal to 4.
    `(package private) InetAddress` | `address` The host the packet is going to be sent or where it came from.
    `static int` | `DATA` This is the actual TFTP spec identifier and is equal to 3.
    `static int` | `ERROR` This is the actual TFTP spec identifier and is equal to 5.
    `(package private) static int` | `MIN_PACKET_SIZE` The minimum size of a packet.
    `static int` | `OACK` TFTP spec identifier 6.
    `(package private) int` | `port` The port the packet came from or is going to.
    `static int` | `READ_REQUEST` This is the actual TFTP spec identifier and is equal to 1.
    `static int` | `SEGMENT_SIZE` The TFTP data packet maximum segment size in bytes.
    `(package private) int` | `type` The type of packet.
    `static int` | `WRITE_REQUEST` This is the actual TFTP spec identifier and is equal to 2.

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `TFTPPacket(int type, InetAddress address, int port)` This constructor is not visible outside the package.

  - ### Method Summary

    All Methods Static Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `InetAddress` | `getAddress()` Gets the address of the host where the packet is going to be sent or where it came from.
    `int` | `getPort()` Gets the port where the packet is going to be sent or where it came from.
    `int` | `getType()` Gets the type of the packet.
    `abstract DatagramPacket` | `newDatagram()` Creates a UDP datagram containing all the TFTP packet data in the proper format.
    `(package private) abstract DatagramPacket` | `newDatagram(DatagramPacket datagram, byte[] data)` This is an abstract method only available within the package for implementing efficient datagram transport by eliminating buffering.
    `static TFTPPacket` | `newTFTPPacket(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.
    `void` | `setAddress(InetAddress address)` Sets the host address where the packet is going to be sent.
    `void` | `setPort(int port)` Sets the port where the packet is going to be sent.
    `String` | `toString()` For debugging

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### ACKNOWLEDGEMENT

          public static final int ACKNOWLEDGEMENT

      This is the actual TFTP spec identifier and is equal to 4. Identifier returned by `getType()` indicating an acknowledgement packet.
      See Also:
        Constant Field Values

    - #### address

          InetAddress address

      The host the packet is going to be sent or where it came from.

    - #### DATA

          public static final int DATA

      This is the actual TFTP spec identifier and is equal to 3. Identifier returned by `getType()` indicating a data packet.
      See Also:
        Constant Field Values

    - #### ERROR

          public static final int ERROR

      This is the actual TFTP spec identifier and is equal to 5. Identifier returned by `getType()` indicating an error packet.
      See Also:
        Constant Field Values

    - #### MIN_PACKET_SIZE

          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.
      See Also:
        Constant Field Values

    - #### OACK

          public static final int OACK

      TFTP spec identifier 6. Identifier returned by `getType()` indicating an options acknowledgement packet.
      See Also:
        Constant Field Values

    - #### port

          int port

      The port the packet came from or is going to.

    - #### READ_REQUEST

          public static final int READ_REQUEST

      This is the actual TFTP spec identifier and is equal to 1. Identifier returned by `getType()` indicating a read request packet.
      See Also:
        Constant Field Values

    - #### SEGMENT_SIZE

          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 `TFTP` class methods to implement their own TFTP servers or clients.
      See Also:
        Constant Field Values

    - #### type

          int type

      The type of packet.

    - #### WRITE_REQUEST

          public static final int WRITE_REQUEST

      This is the actual TFTP spec identifier and is equal to 2. Identifier returned by `getType()` indicating a write request packet.
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### TFTPPacket

          TFTPPacket(int type,
                     InetAddress address,
                     int port)

      This constructor is not visible outside the package. It is used by subclasses within the package to initialize base data.
      Parameters:
        `type` - The type of the packet.
        `address` - The host the packet came from or is going to be sent.
        `port` - The port the packet came from or is going to be sent.

  - ### Method Detail

    - #### getAddress

          public final InetAddress getAddress()

      Gets the address of the host where the packet is going to be sent or where it came from.
      Returns:
        The type of the packet.

    - #### getPort

          public final int getPort()

      Gets the port where the packet is going to be sent or where it came from.
      Returns:
        The port where the packet came from or where it is going.

    - #### getType

          public final int getType()

      Gets the type of the packet.
      Returns:
        The type of the packet.

    - #### newDatagram

          public abstract DatagramPacket newDatagram()

      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 `TFTPClient` class. Under normal circumstances, you should not have a need to call this method.
      Returns:
        A UDP datagram containing the TFTP packet.

    - #### newDatagram

          abstract DatagramPacket newDatagram(DatagramPacket datagram,
                                              byte[] data)

      This is an abstract method only available within the package for implementing efficient datagram transport by eliminating 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.
      Parameters:
        `datagram` - The datagram to create.
        `data` - The buffer to store the packet and to use in the datagram.
      Returns:
        The datagram argument.

    - #### newTFTPPacket

          public static final TFTPPacket newTFTPPacket(DatagramPacket datagram)
                                                throws TFTPPacketException

      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.
      Parameters:
        `datagram` - The datagram containing a TFTP packet.
      Returns:
        The TFTPPacket object corresponding to the datagram.
      Throws:
        `TFTPPacketException` - If the datagram does not contain a valid TFTP packet.

    - #### setAddress

          public final void setAddress(InetAddress address)

      Sets the host address where the packet is going to be sent.
      Parameters:
        `address` - the address to set

    - #### setPort

          public final void setPort(int port)

      Sets the port where the packet is going to be sent.
      Parameters:
        `port` - the port to set

    - #### toString

          public String toString()

      For debugging
      Overrides:
        `toString` in class `Object`