Commit 47791352 by Michael Koch Committed by Michael Koch

2003-12-04 Michael Koch <konqueror@gmx.de>

	* java/net/DatagramPacket.java
	(length): Made packge-private to make it accessible via CNI.
	(maxlen): New field.
	(DatagramPacket): Cleaned up.
	(setSocketAddress): Add message to exception.
	(setData): Call other setData().
	(setData): Call setLength().
	(setLength): Initialize maxlen too.
	* gnu/java/net/natPlainDatagramSocketImplPosix.cc (peekData):
	Get maximal length from maxlen field, set length field directly.
	(receive): Likewise.
	* gnu/java/net/natPlainDatagramSocketImplWin32.cc (peekData):
	Get maximal length from maxlen field, set length field directly.
	(receive): Likewise.

From-SVN: r74278
parent 7f1156ed
2003-12-04 Michael Koch <konqueror@gmx.de>
* java/net/DatagramPacket.java
(length): Made packge-private to make it accessible via CNI.
(maxlen): New field.
(DatagramPacket): Cleaned up.
(setSocketAddress): Add message to exception.
(setData): Call other setData().
(setData): Call setLength().
(setLength): Initialize maxlen too.
* gnu/java/net/natPlainDatagramSocketImplPosix.cc (peekData):
Get maximal length from maxlen field, set length field directly.
(receive): Likewise.
* gnu/java/net/natPlainDatagramSocketImplWin32.cc (peekData):
Get maximal length from maxlen field, set length field directly.
(receive): Likewise.
2003-12-03 Mohan Embar <gnustuff@thisiscool.com> 2003-12-03 Mohan Embar <gnustuff@thisiscool.com>
* gnu/java/nio/natSelectorImplPosix.cc * gnu/java/nio/natSelectorImplPosix.cc
......
...@@ -209,7 +209,7 @@ gnu::java::net::PlainDatagramSocketImpl::peekData (::java::net::DatagramPacket * ...@@ -209,7 +209,7 @@ gnu::java::net::PlainDatagramSocketImpl::peekData (::java::net::DatagramPacket *
union SockAddr u; union SockAddr u;
socklen_t addrlen = sizeof(u); socklen_t addrlen = sizeof(u);
jbyte *dbytes = elements (p->getData()) + p->getOffset(); jbyte *dbytes = elements (p->getData()) + p->getOffset();
jint maxlen = p->getData()->length - p->getOffset(); jint maxlen = p->maxlen - p->getOffset();
ssize_t retlen = 0; ssize_t retlen = 0;
// Do timeouts via select since SO_RCVTIMEO is not always available. // Do timeouts via select since SO_RCVTIMEO is not always available.
...@@ -255,7 +255,7 @@ gnu::java::net::PlainDatagramSocketImpl::peekData (::java::net::DatagramPacket * ...@@ -255,7 +255,7 @@ gnu::java::net::PlainDatagramSocketImpl::peekData (::java::net::DatagramPacket *
p->setAddress (new ::java::net::InetAddress (raddr, NULL)); p->setAddress (new ::java::net::InetAddress (raddr, NULL));
p->setPort (rport); p->setPort (rport);
p->setLength ((jint) retlen); p->length = (int) retlen;
return rport; return rport;
error: error:
...@@ -329,7 +329,7 @@ gnu::java::net::PlainDatagramSocketImpl::receive (::java::net::DatagramPacket *p ...@@ -329,7 +329,7 @@ gnu::java::net::PlainDatagramSocketImpl::receive (::java::net::DatagramPacket *p
union SockAddr u; union SockAddr u;
socklen_t addrlen = sizeof(u); socklen_t addrlen = sizeof(u);
jbyte *dbytes = elements (p->getData()) + p->getOffset(); jbyte *dbytes = elements (p->getData()) + p->getOffset();
jint maxlen = p->getData()->length - p->getOffset(); jint maxlen = p->maxlen - p->getOffset();
ssize_t retlen = 0; ssize_t retlen = 0;
// Do timeouts via select since SO_RCVTIMEO is not always available. // Do timeouts via select since SO_RCVTIMEO is not always available.
...@@ -375,7 +375,7 @@ gnu::java::net::PlainDatagramSocketImpl::receive (::java::net::DatagramPacket *p ...@@ -375,7 +375,7 @@ gnu::java::net::PlainDatagramSocketImpl::receive (::java::net::DatagramPacket *p
p->setAddress (new ::java::net::InetAddress (raddr, NULL)); p->setAddress (new ::java::net::InetAddress (raddr, NULL));
p->setPort (rport); p->setPort (rport);
p->setLength ((jint) retlen); p->length = (jint) retlen;
return; return;
error: error:
......
...@@ -203,7 +203,7 @@ gnu::java::net::PlainDatagramSocketImpl::peekData(::java::net::DatagramPacket *p ...@@ -203,7 +203,7 @@ gnu::java::net::PlainDatagramSocketImpl::peekData(::java::net::DatagramPacket *p
union SockAddr u; union SockAddr u;
socklen_t addrlen = sizeof(u); socklen_t addrlen = sizeof(u);
jbyte *dbytes = elements (p->getData()) + p->getOffset(); jbyte *dbytes = elements (p->getData()) + p->getOffset();
jint maxlen = p->getData()->length - p->getOffset(); jint maxlen = p->maxlen - p->getOffset();
ssize_t retlen = 0; ssize_t retlen = 0;
if (timeout > 0) if (timeout > 0)
...@@ -241,7 +241,7 @@ gnu::java::net::PlainDatagramSocketImpl::peekData(::java::net::DatagramPacket *p ...@@ -241,7 +241,7 @@ gnu::java::net::PlainDatagramSocketImpl::peekData(::java::net::DatagramPacket *p
p->setAddress (new ::java::net::InetAddress (raddr, NULL)); p->setAddress (new ::java::net::InetAddress (raddr, NULL));
p->setPort (rport); p->setPort (rport);
p->setLength ((jint) retlen); p->length = (jint) retlen;
return rport; return rport;
error: error:
...@@ -318,7 +318,7 @@ gnu::java::net::PlainDatagramSocketImpl::receive (::java::net::DatagramPacket *p ...@@ -318,7 +318,7 @@ gnu::java::net::PlainDatagramSocketImpl::receive (::java::net::DatagramPacket *p
union SockAddr u; union SockAddr u;
socklen_t addrlen = sizeof(u); socklen_t addrlen = sizeof(u);
jbyte *dbytes = elements (p->getData()) + p->getOffset(); jbyte *dbytes = elements (p->getData()) + p->getOffset();
jint maxlen = p->getData()->length - p->getOffset(); jint maxlen = p->maxlen - p->getOffset();
ssize_t retlen = 0; ssize_t retlen = 0;
if (timeout > 0) if (timeout > 0)
...@@ -359,7 +359,7 @@ gnu::java::net::PlainDatagramSocketImpl::receive (::java::net::DatagramPacket *p ...@@ -359,7 +359,7 @@ gnu::java::net::PlainDatagramSocketImpl::receive (::java::net::DatagramPacket *p
p->setAddress (new ::java::net::InetAddress (raddr, NULL)); p->setAddress (new ::java::net::InetAddress (raddr, NULL));
p->setPort (rport); p->setPort (rport);
p->setLength ((jint) retlen); p->length = (jint) retlen;
return; return;
error: error:
......
...@@ -78,13 +78,18 @@ public final class DatagramPacket ...@@ -78,13 +78,18 @@ public final class DatagramPacket
private int offset; private int offset;
/** /**
* The length of the data buffer to send * The length of the data buffer to send.
*/ */
private int length; int length;
/** /**
* The maximal length of the buffer.
*/
int maxlen;
/**
* The address to which the packet should be sent or from which it * The address to which the packet should be sent or from which it
* was received * was received.
*/ */
private InetAddress address; private InetAddress address;
...@@ -106,21 +111,9 @@ public final class DatagramPacket ...@@ -106,21 +111,9 @@ public final class DatagramPacket
*/ */
public DatagramPacket(byte[] buf, int offset, int length) public DatagramPacket(byte[] buf, int offset, int length)
{ {
if (buf == null) setData(buf, offset, length);
throw new NullPointerException("Null buffer"); address = null;
if (offset < 0) port = -1;
throw new IllegalArgumentException("Invalid offset: " + offset);
if (length < 0)
throw new IllegalArgumentException("Invalid length: " + length);
if (offset + length > buf.length)
throw new IllegalArgumentException("Potential buffer overflow - offset: "
+ offset + " length: " + length);
buffer = buf;
this.offset = offset;
this.length = length;
this.address = null;
this.port = -1;
} }
/** /**
...@@ -150,25 +143,9 @@ public final class DatagramPacket ...@@ -150,25 +143,9 @@ public final class DatagramPacket
public DatagramPacket(byte[] buf, int offset, int length, public DatagramPacket(byte[] buf, int offset, int length,
InetAddress address, int port) InetAddress address, int port)
{ {
if (buf == null) setData(buf, offset, length);
throw new NullPointerException("Null buffer"); setAddress(address);
if (offset < 0) setPort(port);
throw new IllegalArgumentException("Invalid offset: " + offset);
if (length < 0)
throw new IllegalArgumentException("Invalid length: " + length);
if (offset + length > buf.length)
throw new IllegalArgumentException("Potential buffer overflow - offset: "
+ offset + " length: " + length);
if (port < 0 || port > 65535)
throw new IllegalArgumentException("Invalid port: " + port);
if (address == null)
throw new NullPointerException("Null address");
buffer = buf;
this.offset = offset;
this.length = length;
this.address = address;
this.port = port;
} }
/** /**
...@@ -203,8 +180,13 @@ public final class DatagramPacket ...@@ -203,8 +180,13 @@ public final class DatagramPacket
SocketAddress address) SocketAddress address)
throws SocketException throws SocketException
{ {
this(buf, offset, length, ((InetSocketAddress)address).getAddress(), if (! (address instanceof InetSocketAddress))
((InetSocketAddress)address).getPort()); throw new IllegalArgumentException("unsupported address type");
InetSocketAddress tmp = (InetSocketAddress) address;
setData(buf, offset, length);
setAddress(tmp.getAddress());
setPort(tmp.getPort());
} }
/** /**
...@@ -223,8 +205,7 @@ public final class DatagramPacket ...@@ -223,8 +205,7 @@ public final class DatagramPacket
public DatagramPacket(byte[] buf, int length, SocketAddress address) public DatagramPacket(byte[] buf, int length, SocketAddress address)
throws SocketException throws SocketException
{ {
this(buf, 0, length, ((InetSocketAddress)address).getAddress(), this(buf, 0, length, address);
((InetSocketAddress)address).getPort());
} }
/** /**
...@@ -330,9 +311,10 @@ public final class DatagramPacket ...@@ -330,9 +311,10 @@ public final class DatagramPacket
public void setSocketAddress(SocketAddress address) public void setSocketAddress(SocketAddress address)
throws IllegalArgumentException throws IllegalArgumentException
{ {
if (address == null) throw new IllegalArgumentException(); if (address == null)
throw new IllegalArgumentException("address may not be null");
InetSocketAddress tmp = (InetSocketAddress)address; InetSocketAddress tmp = (InetSocketAddress) address;
this.address = tmp.getAddress(); this.address = tmp.getAddress();
this.port = tmp.getPort(); this.port = tmp.getPort();
} }
...@@ -359,14 +341,9 @@ public final class DatagramPacket ...@@ -359,14 +341,9 @@ public final class DatagramPacket
* *
* @since 1.1 * @since 1.1
*/ */
public synchronized void setData(byte[] buf) public void setData(byte[] buf)
{ {
// This form of setData requires setLength to be called separately setData(buf, 0, buf.length);
// and subsequently.
if (buf == null)
throw new NullPointerException("Null buffer");
buffer = buf;
} }
/** /**
...@@ -388,15 +365,10 @@ public final class DatagramPacket ...@@ -388,15 +365,10 @@ public final class DatagramPacket
throw new NullPointerException("Null buffer"); throw new NullPointerException("Null buffer");
if (offset < 0) if (offset < 0)
throw new IllegalArgumentException("Invalid offset: " + offset); throw new IllegalArgumentException("Invalid offset: " + offset);
if (length < 0)
throw new IllegalArgumentException("Invalid length: " + length);
if (offset + length > buf.length)
throw new IllegalArgumentException("Potential buffer overflow - offset: "
+ offset + " length: " + length);
buffer = buf; buffer = buf;
this.offset = offset; this.offset = offset;
this.length = length; setLength(length);
} }
/** /**
...@@ -418,6 +390,6 @@ public final class DatagramPacket ...@@ -418,6 +390,6 @@ public final class DatagramPacket
+ offset + " length: " + length); + offset + " length: " + length);
this.length = length; this.length = length;
this.maxlen = length;
} }
} // class DatagramPacket }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment