aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/net/DatagramPacket.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java/net/DatagramPacket.java')
-rw-r--r--libjava/java/net/DatagramPacket.java372
1 files changed, 230 insertions, 142 deletions
diff --git a/libjava/java/net/DatagramPacket.java b/libjava/java/net/DatagramPacket.java
index a2482f9237f..7ca6c51a22b 100644
--- a/libjava/java/net/DatagramPacket.java
+++ b/libjava/java/net/DatagramPacket.java
@@ -44,67 +44,66 @@ package java.net;
*/
/**
- * This class models a packet of data that is to be sent across the network
- * using a connectionless protocol such as UDP. It contains the data
- * to be send, as well as the destination address and port. Note that
- * datagram packets can arrive in any order and are not guaranteed to be
- * delivered at all.
- * <p>
- * This class can also be used for receiving data from the network.
- * <p>
- * Note that for all method below where the buffer length passed by the
- * caller cannot exceed the actually length of the byte array passed as
- * the buffer, if this condition is not true, then the method silently
- * reduces the length value to maximum allowable value.
- *
- * Written using on-line Java Platform 1.2 API Specification, as well
- * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
- * Status: Believed complete and correct.
- *
- * @author Warren Levy <warrenl@cygnus.com>
- * @author Aarom M. Renn (arenn@urbanophile.com) (Documentation comments)
- * @date April 28, 1999.
- */
-
+ * This class models a packet of data that is to be sent across the network
+ * using a connectionless protocol such as UDP. It contains the data
+ * to be send, as well as the destination address and port. Note that
+ * datagram packets can arrive in any order and are not guaranteed to be
+ * delivered at all.
+ * <p>
+ * This class can also be used for receiving data from the network.
+ * <p>
+ * Note that for all method below where the buffer length passed by the
+ * caller cannot exceed the actually length of the byte array passed as
+ * the buffer, if this condition is not true, then the method silently
+ * reduces the length value to maximum allowable value.
+ *
+ * Written using on-line Java Platform 1.2 API Specification, as well
+ * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
+ * Status: Believed complete and correct.
+ *
+ * @author Warren Levy <warrenl@cygnus.com>
+ * @author Aarom M. Renn (arenn@urbanophile.com) (Documentation comments)
+ * @date April 28, 1999.
+ */
public final class DatagramPacket
{
-/**
- * The data buffer to send
- */
+ /**
+ * The data buffer to send
+ */
private byte[] buffer;
-/**
- * This is the offset into the buffer to start sending from or receiving to.
- */
+ /**
+ * This is the offset into the buffer to start sending from or receiving to.
+ */
private int offset;
-/**
- * The length of the data buffer to send
- */
+ /**
+ * The length of the data buffer to send
+ */
private int length;
-/**
- * The address to which the packet should be sent or from which it
- * was received
- */
+ /**
+ * The address to which the packet should be sent or from which it
+ * was received
+ */
private InetAddress address;
-/**
- * The port to which the packet should be sent or from which it was
- * was received.
- */
+ /**
+ * The port to which the packet should be sent or from which it was
+ * was received.
+ */
private int port;
-/**
- * This method initializes a new instance of <code>DatagramPacket</code>
- * which has the specified buffer, offset, and length.
- *
- * @param buf The buffer for holding the incoming datagram.
- * @param offset The offset into the buffer to start writing.
- * @param length The maximum number of bytes to read.
- *
- * @since Java 1.2
- */
+ /**
+ * This method initializes a new instance of <code>DatagramPacket</code>
+ * which has the specified buffer, offset, and length.
+ *
+ * @param buf The buffer for holding the incoming datagram.
+ * @param offset The offset into the buffer to start writing.
+ * @param length The maximum number of bytes to read.
+ *
+ * @since 1.2
+ */
public DatagramPacket(byte[] buf, int offset, int length)
{
if (buf == null)
@@ -124,30 +123,30 @@ public final class DatagramPacket
this.port = -1;
}
-/**
- * Initializes a new instance of <code>DatagramPacket</code> for
- * receiving packets from the network.
- *
- * @param buf A buffer for storing the returned packet data
- * @param length The length of the buffer (must be <= buf.length)
- */
+ /**
+ * Initializes a new instance of <code>DatagramPacket</code> for
+ * receiving packets from the network.
+ *
+ * @param buf A buffer for storing the returned packet data
+ * @param length The length of the buffer (must be <= buf.length)
+ */
public DatagramPacket(byte[] buf, int length)
{
this(buf, 0, length);
}
-/**
- * Initializes a new instance of <code>DatagramPacket</code> for
- * transmitting packets across the network.
- *
- * @param buf A buffer containing the data to send
- * @param offset The offset into the buffer to start writing from.
- * @param len The length of the buffer (must be <= buf.length)
- * @param addr The address to send to
- * @param port The port to send to
- *
- * @since Java 1.2
- */
+ /**
+ * Initializes a new instance of <code>DatagramPacket</code> for
+ * transmitting packets across the network.
+ *
+ * @param buf A buffer containing the data to send
+ * @param offset The offset into the buffer to start writing from.
+ * @param len The length of the buffer (must be <= buf.length)
+ * @param addr The address to send to
+ * @param port The port to send to
+ *
+ * @since 1.2
+ */
public DatagramPacket(byte[] buf, int offset, int length,
InetAddress address, int port)
{
@@ -172,86 +171,130 @@ public final class DatagramPacket
this.port = port;
}
-/**
- * Initializes a new instance of <code>DatagramPacket</code> for
- * transmitting packets across the network.
- *
- * @param buf A buffer containing the data to send
- * @param length The length of the buffer (must be <= buf.length)
- * @param address The address to send to
- * @param port The port to send to
- */
+ /**
+ * Initializes a new instance of <code>DatagramPacket</code> for
+ * transmitting packets across the network.
+ *
+ * @param buf A buffer containing the data to send
+ * @param length The length of the buffer (must be <= buf.length)
+ * @param address The address to send to
+ * @param port The port to send to
+ */
public DatagramPacket(byte[] buf, int length, InetAddress address, int port)
{
this(buf, 0, length, address, port);
}
-/**
- * Returns the address that this packet is being sent to or, if it was used
- * to receive a packet, the address that is was received from. If the
- * constructor that doesn not take an address was used to create this object
- * and no packet was actually read into this object, then this method
- * returns <code>null</code>.
- *
- * @return The address for this packet.
- */
+ /**
+ * Initializes a new instance of <code>DatagramPacket</code> for
+ * transmitting packets across the network.
+ *
+ * @param buf A buffer containing the data to send
+ * @param offset The offset into the buffer to start writing from.
+ * @param length The length of the buffer (must be <= buf.length)
+ * @param address The socket address to send to
+ *
+ * @exception SocketException If an error occurs
+ * @exception IllegalArgumentException If address type is not supported
+ *
+ * @since 1.4
+ */
+ public DatagramPacket(byte[] buf, int offset, int length,
+ SocketAddress address)
+ throws SocketException
+ {
+ this(buf, offset, length, ((InetSocketAddress)address).getAddress(),
+ ((InetSocketAddress)address).getPort());
+ }
+
+ /**
+ * Initializes a new instance of <code>DatagramPacket</code> for
+ * transmitting packets across the network.
+ *
+ * @param buf A buffer containing the data to send
+ * @param length The length of the buffer (must be <= buf.length)
+ * @param address The socket address to send to
+ *
+ * @exception SocketException If an error occurs
+ * @exception IllegalArgumentException If address type is not supported
+ *
+ * @since 1.4
+ */
+ public DatagramPacket(byte[] buf, int length, SocketAddress address)
+ throws SocketException
+ {
+ this(buf, 0, length, ((InetSocketAddress)address).getAddress(),
+ ((InetSocketAddress)address).getPort());
+ }
+
+ /**
+ * Returns the address that this packet is being sent to or, if it was used
+ * to receive a packet, the address that is was received from. If the
+ * constructor that doesn not take an address was used to create this object
+ * and no packet was actually read into this object, then this method
+ * returns <code>null</code>.
+ *
+ * @return The address for this packet.
+ */
public synchronized InetAddress getAddress()
{
return address;
}
-/**
- * Returns the port number this packet is being sent to or, if it was used
- * to receive a packet, the port that it was received from. If the
- * constructor that doesn not take an address was used to create this object
- * and no packet was actually read into this object, then this method
- * will return 0.
- *
- * @return The port number for this packet
- */
+ /**
+ * Returns the port number this packet is being sent to or, if it was used
+ * to receive a packet, the port that it was received from. If the
+ * constructor that doesn not take an address was used to create this object
+ * and no packet was actually read into this object, then this method
+ * will return 0.
+ *
+ * @return The port number for this packet
+ */
public synchronized int getPort()
{
return port;
}
-/**
- * Returns the data buffer for this packet
- *
- * @return This packet's data buffer
- */
+ /**
+ * Returns the data buffer for this packet
+ *
+ * @return This packet's data buffer
+ */
public synchronized byte[] getData()
{
return buffer;
}
-/**
- * This method returns the current offset value into the data buffer
- * where data will be sent from.
- *
- * @return The buffer offset.
- *
- * @since Java 1.2
- */
+ /**
+ * This method returns the current offset value into the data buffer
+ * where data will be sent from.
+ *
+ * @return The buffer offset.
+ *
+ * @since 1.2
+ */
public synchronized int getOffset()
{
return offset;
}
-/**
- * Returns the length of the data in the buffer
- *
- * @return The length of the data
- */
+ /**
+ * Returns the length of the data in the buffer
+ *
+ * @return The length of the data
+ */
public synchronized int getLength()
{
return length;
}
-/**
- * This sets the address to which the data packet will be transmitted.
- *
- * @param addr The destination address
- */
+ /**
+ * This sets the address to which the data packet will be transmitted.
+ *
+ * @param addr The destination address
+ *
+ * @since 1.1
+ */
public synchronized void setAddress(InetAddress iaddr)
{
if (iaddr == null)
@@ -260,11 +303,13 @@ public final class DatagramPacket
address = iaddr;
}
-/**
- * This sets the port to which the data packet will be transmitted.
- *
- * @param port The destination port
- */
+ /**
+ * This sets the port to which the data packet will be transmitted.
+ *
+ * @param port The destination port
+ *
+ * @since 1.1
+ */
public synchronized void setPort(int iport)
{
if (iport < 0 || iport > 65535)
@@ -273,11 +318,47 @@ public final class DatagramPacket
port = iport;
}
-/**
- * Sets the data buffer for this packet.
- *
- * @param buf The new buffer for this packet
- */
+ /**
+ * Sets the address of the remote host this package will be sent
+ *
+ * @param address The socket address of the remove host
+ *
+ * @exception IllegalArgumentException If address type is not supported
+ *
+ * @since 1.4
+ */
+ public void setSocketAddress(SocketAddress address)
+ throws IllegalArgumentException
+ {
+ if (address == null) throw new IllegalArgumentException();
+
+ InetSocketAddress tmp = (InetSocketAddress)address;
+ this.address = tmp.getAddress();
+ this.port = tmp.getPort();
+ }
+
+ /**
+ * Gets the socket address of the host this packet
+ * will be sent to/is coming from
+ *
+ * @return The socket address of the remote host
+ *
+ * @since 1.4
+ */
+ public SocketAddress getSocketAddress()
+ {
+ return new InetSocketAddress (address, port);
+ }
+
+ /**
+ * Sets the data buffer for this packet.
+ *
+ * @param buf The new buffer for this packet
+ *
+ * @exception NullPointerException If the argument is null
+ *
+ * @since 1.1
+ */
public synchronized void setData(byte[] buf)
{
// This form of setData requires setLength to be called separately
@@ -288,15 +369,17 @@ public final class DatagramPacket
buffer = buf;
}
-/**
- * This method sets the data buffer for the packet.
- *
- * @param buf The byte array containing the data for this packet.
- * @param offset The offset into the buffer to start reading data from.
- * @param length The number of bytes of data in the buffer.
- *
- * @since Java 1.2
- */
+ /**
+ * This method sets the data buffer for the packet.
+ *
+ * @param buf The byte array containing the data for this packet.
+ * @param offset The offset into the buffer to start reading data from.
+ * @param length The number of bytes of data in the buffer.
+ *
+ * @exception NullPointerException If the argument is null
+ *
+ * @since 1.2
+ */
public synchronized void setData(byte[] buf, int offset, int length)
{
// This form of setData must be used if offset is to be changed.
@@ -316,11 +399,16 @@ public final class DatagramPacket
this.length = length;
}
-/**
- * Sets the length of the data in the buffer.
- *
- * @param length The new length. (Where len <= buf.length)
- */
+ /**
+ * Sets the length of the data in the buffer.
+ *
+ * @param length The new length. (Where len &lt;= buf.length)
+ *
+ * @exception IllegalArgumentException If the length is negative or
+ * if the length is greater than the packet's data buffer length
+ *
+ * @since 1.1
+ */
public synchronized void setLength(int length)
{
if (length < 0)