diff options
author | Mark Wielaard <mark@klomp.org> | 2002-12-02 00:28:09 +0000 |
---|---|---|
committer | Mark Wielaard <mark@klomp.org> | 2002-12-02 00:28:09 +0000 |
commit | f4d36391edcbbcb3ddb2e9d65102c1c2584677f6 (patch) | |
tree | 5393b10728e80e926ee75661947a7376f9560cba | |
parent | 730c19d7f9ae6bee0035613e9983557109b7e9d1 (diff) | |
download | classpath-f4d36391edcbbcb3ddb2e9d65102c1c2584677f6.tar.gz |
2002-12-01 Mark Wielaard <mark@klomp.org>
* native/jni/java-net/java_net_InetAddress.c (getHostByName):
JCL_ThrowException takes hostname, not host.
* native/jni/java-net/javanet.c (_javanet_set_remhost_addr): New
method.
(_javanet_set_remhost): Use new method.
(_javanet_connect): Likewise.
* java/net/InetAddress.java (toString): Include hostname or alias if
known, but don't lookup.
* java/net/Socket.java (setSocketImplFactory): Throw SocketException
when fac == null.
2002-12-01 Julian Dolby <dolby@us.ibm.com>
* native/jni/java-net/java_net_PlainSocketImpl.c (available):
Implement.
-rw-r--r-- | ChangeLog | 18 | ||||
-rw-r--r-- | java/net/InetAddress.java | 13 | ||||
-rw-r--r-- | java/net/Socket.java | 3 | ||||
-rw-r--r-- | native/jni/java-net/java_net_InetAddress.c | 4 | ||||
-rw-r--r-- | native/jni/java-net/java_net_PlainSocketImpl.c | 43 | ||||
-rw-r--r-- | native/jni/java-net/javanet.c | 21 |
6 files changed, 91 insertions, 11 deletions
@@ -1,3 +1,21 @@ +2002-12-01 Mark Wielaard <mark@klomp.org> + + * native/jni/java-net/java_net_InetAddress.c (getHostByName): + JCL_ThrowException takes hostname, not host. + * native/jni/java-net/javanet.c (_javanet_set_remhost_addr): New + method. + (_javanet_set_remhost): Use new method. + (_javanet_connect): Likewise. + * java/net/InetAddress.java (toString): Include hostname or alias if + known, but don't lookup. + * java/net/Socket.java (setSocketImplFactory): Throw SocketException + when fac == null. + +2002-12-01 Julian Dolby <dolby@us.ibm.com> + + * native/jni/java-net/java_net_PlainSocketImpl.c (available): + Implement. + 2002-12-01 Tom Tromey <tromey@redhat.com> Bug compatibility: diff --git a/java/net/InetAddress.java b/java/net/InetAddress.java index 4e371e4a1..51192d2ba 100644 --- a/java/net/InetAddress.java +++ b/java/net/InetAddress.java @@ -1,5 +1,5 @@ /* InetAddress.java -- Class to model an Internet address - Copyright (C) 1998, 1999 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -640,7 +640,16 @@ isMulticastAddress() public String toString() { - return(getHostAddress()); + StringBuffer sb; + if (hostName != null) + sb = new StringBuffer(hostName).append('/'); + else if (hostname_alias != null) + sb = new StringBuffer(hostname_alias).append('/'); + else + sb = new StringBuffer(); + + sb.append(getHostAddress()); + return(sb.toString()); } /** diff --git a/java/net/Socket.java b/java/net/Socket.java index e6cd8fa82..09835d695 100644 --- a/java/net/Socket.java +++ b/java/net/Socket.java @@ -892,6 +892,9 @@ public class Socket if (sm != null) sm.checkSetFactory(); + if (fac == null) + throw new SocketException("SocketImplFactory cannot be null"); + factory = fac; } diff --git a/native/jni/java-net/java_net_InetAddress.c b/native/jni/java-net/java_net_InetAddress.c index 4fd1d5903..da8d53e24 100644 --- a/native/jni/java-net/java_net_InetAddress.c +++ b/native/jni/java-net/java_net_InetAddress.c @@ -1,5 +1,5 @@ /* InetAddress.c - Native methods for InetAddress class - Copyright (C) 1998 Free Software Foundation, Inc. + Copyright (C) 1998, 2002 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -178,7 +178,7 @@ Java_java_net_InetAddress_getHostByName(JNIEnv *env, jclass class, jstring host) hp = gethostbyname(hostname); if (!hp) { - JCL_ThrowException(env, UNKNOWN_HOST_EXCEPTION, host); + JCL_ThrowException(env, UNKNOWN_HOST_EXCEPTION, hostname); return (jobjectArray)NULL; } (*env)->ReleaseStringUTFChars(env, host, hostname); diff --git a/native/jni/java-net/java_net_PlainSocketImpl.c b/native/jni/java-net/java_net_PlainSocketImpl.c index 539ce4835..9aa2f58f2 100644 --- a/native/jni/java-net/java_net_PlainSocketImpl.c +++ b/native/jni/java-net/java_net_PlainSocketImpl.c @@ -1,5 +1,5 @@ /* PlainSocketImpl.c - Native methods for PlainSocketImpl class - Copyright (C) 1998 Free Software Foundation, Inc. + Copyright (C) 1998, 2002 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -36,7 +36,13 @@ obligated to do so. If you do not wish to do so, delete this exception statement from your version. */ +#include <errno.h> +#include <sys/ioctl.h> +#include <asm/ioctls.h> +#include <string.h> + #include <jni.h> +#include <jcl.h> #include "java_net_PlainSocketImpl.h" @@ -124,6 +130,41 @@ Java_java_net_PlainSocketImpl_accept(JNIEnv *env, jobject this, jobject impl) /*************************************************************************/ +JNIEXPORT jint JNICALL +Java_java_net_PlainSocketImpl_available(JNIEnv *env, jobject this) +{ + int fd; + int count = 0; + jclass cls; + jfieldID fid; + + cls = (*env)->GetObjectClass(env, this); + if (cls == 0) + { + JCL_ThrowException(env, IO_EXCEPTION, "internal error"); + return 0; + } + + fid = (*env)->GetFieldID(env, cls, "native_fd", "I"); + if (fid == 0) + { + JCL_ThrowException(env, IO_EXCEPTION, "internal error"); + return 0; + } + + fd = (*env)->GetIntField(env, this, fid); + + if (ioctl(fd, FIONREAD, &count) == -1) + { + JCL_ThrowException(env, IO_EXCEPTION, strerror(errno)); + return 0; + } + else + return count; +} + +/*************************************************************************/ + /* * This method sets the specified option for a socket */ diff --git a/native/jni/java-net/javanet.c b/native/jni/java-net/javanet.c index 902c0dbdb..bf9ca957b 100644 --- a/native/jni/java-net/javanet.c +++ b/native/jni/java-net/javanet.c @@ -1,5 +1,5 @@ /* javanet.c - Common internal functions for the java.net package - Copyright (C) 1998 Free Software Foundation, Inc. + Copyright (C) 1998, 2002 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -272,6 +272,8 @@ _javanet_create_inetaddress(JNIEnv *env, int netaddr) /*************************************************************************/ +static void _javanet_set_remhost_addr(JNIEnv*, jobject, jobject); + /* * Set's the value of the "addr" field in PlainSocketImpl with a new * InetAddress for the specified addr @@ -279,8 +281,6 @@ _javanet_create_inetaddress(JNIEnv *env, int netaddr) static void _javanet_set_remhost(JNIEnv *env, jobject this, int netaddr) { - jclass this_cls; - jfieldID fid; jobject ia; DBG("_javanet_set_remhost(): Entered _javanet_set_remhost\n"); @@ -290,6 +290,15 @@ _javanet_set_remhost(JNIEnv *env, jobject this, int netaddr) if (ia == NULL) return; + _javanet_set_remhost_addr(env, this, ia); +} + +static void +_javanet_set_remhost_addr(JNIEnv *env, jobject this, jobject ia) +{ + jclass this_cls; + jfieldID fid; + /* Set the variable in the object */ this_cls = (*env)->FindClass(env, "java/net/SocketImpl"); if (this_cls == NULL) @@ -299,10 +308,10 @@ _javanet_set_remhost(JNIEnv *env, jobject this, int netaddr) if (fid == NULL) return; - DBG("_javanet_set_remhost(): Found address field\n"); + DBG("_javanet_set_remhost_addr(): Found address field\n"); (*env)->SetObjectField(env, this, fid, ia); - DBG("_javanet_set_remhost(): Set field\n"); + DBG("_javanet_set_remhost_addr(): Set field\n"); } /*************************************************************************/ @@ -496,7 +505,7 @@ _javanet_connect(JNIEnv *env, jobject this, jobject addr, jint port) return; } - _javanet_set_remhost(env, this, ntohl(si.sin_addr.s_addr)); + _javanet_set_remhost_addr(env, this, addr); if ((*env)->ExceptionOccurred(env)) { close(fd); |