summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2003-11-28 23:43:18 +0000
committerMark Wielaard <mark@klomp.org>2003-11-28 23:43:18 +0000
commit051fbd476799474c9d9f017812892bcba37bb4f3 (patch)
treede0fead09e53bc49543dd59acabcdffafb868ddf
parent3bb32f3d21d5df673dfb61e4d1f1a7f037590127 (diff)
downloadclasspath-051fbd476799474c9d9f017812892bcba37bb4f3.tar.gz
2003-11-28 Michael Koch <konqueror@gmx.de>
* gnu/java/net/PlainDatagramSocketImpl.java (sendTo): Added offset argument. * include/gnu_java_net_PlainDatagramSocketImpl.h: Regenerated. * native/jni/java-net/gnu_java_net_PlainDatagramSocketImpl.c (receive0): Use completely available space in buffer array. (sendTo): Use offset.
-rw-r--r--ChangeLog9
-rw-r--r--gnu/java/net/PlainDatagramSocketImpl.java5
-rw-r--r--include/gnu_java_net_PlainDatagramSocketImpl.h2
-rw-r--r--native/jni/java-net/gnu_java_net_PlainDatagramSocketImpl.c26
4 files changed, 28 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index 399bda9d4..25c0b0d82 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2003-11-28 Michael Koch <konqueror@gmx.de>
+
+ * gnu/java/net/PlainDatagramSocketImpl.java
+ (sendTo): Added offset argument.
+ * include/gnu_java_net_PlainDatagramSocketImpl.h: Regenerated.
+ * native/jni/java-net/gnu_java_net_PlainDatagramSocketImpl.c
+ (receive0): Use completely available space in buffer array.
+ (sendTo): Use offset.
+
2003-11-28 Ito Kazumitsu <kaz@maczuka.gcd.org>
* java/text/SimpleDateFormat.java (compileFormat):
diff --git a/gnu/java/net/PlainDatagramSocketImpl.java b/gnu/java/net/PlainDatagramSocketImpl.java
index d7f78660b..358205fac 100644
--- a/gnu/java/net/PlainDatagramSocketImpl.java
+++ b/gnu/java/net/PlainDatagramSocketImpl.java
@@ -169,12 +169,13 @@ public final class PlainDatagramSocketImpl extends DatagramSocketImpl
* @param addr The address to send to
* @param port The port to send to
* @param buf The buffer to send
+ * @param offset The offset of the data in the buffer to send
* @param len The length of the data to send
*
* @exception IOException If an error occurs
*/
private native void sendto (InetAddress addr, int port,
- byte[] buf, int len)
+ byte[] buf, int offset, int len)
throws IOException;
/**
@@ -189,7 +190,7 @@ public final class PlainDatagramSocketImpl extends DatagramSocketImpl
synchronized(SEND_LOCK)
{
sendto(packet.getAddress(), packet.getPort(), packet.getData(),
- packet.getLength());
+ packet.getOffset(), packet.getLength());
}
}
diff --git a/include/gnu_java_net_PlainDatagramSocketImpl.h b/include/gnu_java_net_PlainDatagramSocketImpl.h
index 40a5a033b..9d1aa8ba4 100644
--- a/include/gnu_java_net_PlainDatagramSocketImpl.h
+++ b/include/gnu_java_net_PlainDatagramSocketImpl.h
@@ -12,7 +12,7 @@ extern "C"
extern JNIEXPORT void JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_bind (JNIEnv *env, jobject, jint, jobject);
extern JNIEXPORT void JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_create (JNIEnv *env, jobject);
-extern JNIEXPORT void JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_sendto (JNIEnv *env, jobject, jobject, jint, jbyteArray, jint);
+extern JNIEXPORT void JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_sendto (JNIEnv *env, jobject, jobject, jint, jbyteArray, jint, jint);
extern JNIEXPORT void JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_receive0 (JNIEnv *env, jobject, jobject);
extern JNIEXPORT void JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_setOption (JNIEnv *env, jobject, jint, jobject);
extern JNIEXPORT jobject JNICALL Java_gnu_java_net_PlainDatagramSocketImpl_getOption (JNIEnv *env, jobject, jint);
diff --git a/native/jni/java-net/gnu_java_net_PlainDatagramSocketImpl.c b/native/jni/java-net/gnu_java_net_PlainDatagramSocketImpl.c
index 0380adb51..779ad5679 100644
--- a/native/jni/java-net/gnu_java_net_PlainDatagramSocketImpl.c
+++ b/native/jni/java-net/gnu_java_net_PlainDatagramSocketImpl.c
@@ -161,7 +161,7 @@ Java_gnu_java_net_PlainDatagramSocketImpl_receive0(JNIEnv *env, jobject this,
jobject packet)
{
#ifndef WITHOUT_NETWORK
- unsigned int addr, port, len, bytes_read;
+ unsigned int addr, port, maxlen, offset, bytes_read;
jclass cls, addr_cls;
jmethodID mid;
jarray arr;
@@ -174,7 +174,8 @@ Java_gnu_java_net_PlainDatagramSocketImpl_receive0(JNIEnv *env, jobject this,
addr = 0;
port = 0;
- len = 0;
+ maxlen = 0;
+ offset = 0;
bytes_read = 0;
if(packet == NULL)
@@ -205,26 +206,29 @@ Java_gnu_java_net_PlainDatagramSocketImpl_receive0(JNIEnv *env, jobject this,
return;
}
- /* Now get the length from the packet */
- mid = (*env)->GetMethodID(env, cls, "getLength", "()I");
+ /* Now get the offset from the packet */
+ mid = (*env)->GetMethodID(env, cls, "getOffset", "()I");
if (mid == NULL)
{
- JCL_ThrowException(env, IO_EXCEPTION, "Internal error: getLength");
+ JCL_ThrowException(env, IO_EXCEPTION, "Internal error: getOffset");
return;
}
- len = (*env)->CallIntMethod(env, packet, mid);
+ offset = (*env)->CallIntMethod(env, packet, mid);
if ((*env)->ExceptionOccurred(env))
{
- JCL_ThrowException(env, IO_EXCEPTION, "Internal error: call getLength");
+ JCL_ThrowException(env, IO_EXCEPTION, "Internal error: call getOffset");
return;
}
- DBG("PlainDatagramSocketImpl.receive(): Got the length\n");
+ DBG("PlainDatagramSocketImpl.receive(): Got the offset\n");
+
+ /* Now get the maximal available length from the packet */
+ maxlen = (*env)->GetArrayLength(env,arr) - offset;
/* Receive the packet */
/* should we try some sort of validation on the length? */
- bytes_read = _javanet_recvfrom(env, this, arr, 0, len, &addr, &port);
+ bytes_read = _javanet_recvfrom(env, this, arr, offset, maxlen, &addr, &port);
if ((bytes_read == -1) || (*env)->ExceptionOccurred(env))
{
JCL_ThrowException(env, IO_EXCEPTION, "Internal error: receive");
@@ -341,7 +345,7 @@ Java_gnu_java_net_PlainDatagramSocketImpl_receive0(JNIEnv *env, jobject this,
JNIEXPORT void JNICALL
Java_gnu_java_net_PlainDatagramSocketImpl_sendto(JNIEnv *env, jobject this,
jobject addr, jint port, jarray buf,
- jint len)
+ jint offset, jint len)
{
#ifndef WITHOUT_NETWORK
jint netAddress;
@@ -355,7 +359,7 @@ Java_gnu_java_net_PlainDatagramSocketImpl_sendto(JNIEnv *env, jobject this,
DBG("PlainDatagramSocketImpl.sendto(): have addr\n");
- _javanet_sendto(env, this, buf, 0, len, netAddress, port);
+ _javanet_sendto(env, this, buf, offset, len, netAddress, port);
if ((*env)->ExceptionOccurred(env))
{ JCL_ThrowException(env, IO_EXCEPTION, "Internal error: send data"); return; }