5c14415811
* win32.cc: fixed tab, indentation and whitespace inconsistencies removed jvm.h include added includes java/lang/UnsupportedOperationException.h, java/io/IOException.h, java/net/SocketException.h (WSAEventWrapper): class implementation (_Jv_WinStrError): implemented both overloads (_Jv_ThrowIOException): implemented both overloads (_Jv_ThrowSocketException): implemented both overloads (_Jv_select): implemented * include/win32.h: fixed tab, indentation and whitespace inconsistencies wrapped <windows.h> include with #define WIN32_LEAN_AND_MEAN added jvm.h include (WSAEventWrapper): added class declaration (_Jv_WinStrError): added both overload declarations (_Jv_ThrowIOException): added both overload declarations (_Jv_ThrowSocketException): added both overload declarations removed ENOTCONN, ECONNRESET and ENOPROTOOPT defines (_Jv_select): added declaration (_Jv_socket): removed (_Jv_connect): removed (_Jv_close): removed (_Jv_bind): removed (_Jv_accept): removed (_Jv_listen): removed (_Jv_write): removed (_Jv_read): removed * java/io/natFileDescriptorWin32.cc: fixed tab, indentation and whitespace inconsistencies replaced <windows.h> #include with <platform.h> removed jvm.h include (testCanUseGetHandleInfo): new function which tests whether Win32 GetHandleInformation() call can be used with console buffer handles (only supported on >=WinNT 5.0) (winerr): removed (superseded by _Jv_WinStrError in include/win32.h) (valid): rewrote implementation using GetHandleInformation() (sync): changed exception throwing to use error string and exception helper methods declared in include/win32.h (open): likewise (write): likewise (setLength): likewise (close): likewise (seek): likewise (getFilePointer): likewise (read): likewise * java/io/natFileWin32.cc: fixed tab, indentation and whitespace inconsistencies replaced <windows.h> #include with <platform.h> removed jvm.h include (_access): use JV_TEMP_UTF_STRING (_stat): likewise (performMkDir): use JV_TEMP_UTF_STRING (performRenameTo): likewise (performDelete): likewise (performCreate): likewise (performSetReadOnly): likewise (performSetLastModified): likewise * java/lang/natWin32Process.cc: fixed tab, indentation and whitespace inconsistencies replaced <windows.h> #include with <platform.h> removed includes gcj/cni.h, jvm.h (new_string): removed (startProcess): use JV_TEMP_UTF_STRING, changed exception throwing to use error string and exception helper methods declared in include/win32.h * java/net/natInetAddressWin32.cc: fixed tab, indentation and whitespace inconsistencies replaced <windows.h> #include with <platform.h> removed jvm.h include removed DISABLE_JAVA_NET conditional code removed POSIX conditional code not relevant to Win32 (aton): use JV_TEMP_UTF_STRING removed POSIX conditional code not relevant to Win32 (lookup): likewise (getLocalHostName): likewise * java/net/natNetworkInterfaceWin32.cc: fixed tab, indentation and whitespace inconsistencies removed unnecessary windows.h, winsock.h and gcj/cni.h includes removed DISABLE_JAVA_NET conditional code removed POSIX conditional code not relevant to Win32 (winsock2GetRealNetworkInterfaces): new function to compute network interfaces via Winsock2 API (determineGetRealNetworkInterfacesFN): new function for returning a function pointer to the function used to compute network interfaces. (getRealNetworkInterfaces): implemented * java/net/natPlainDatagramSocketImplWin32.cc: fixed tab, indentation and whitespace inconsistencies removed gcj/cni.h include removed DISABLE_JAVA_NET conditional code removed POSIX conditional code not relevant to Win32 changed net POSIXisms to Win32isms replaced _Jv socket-related calls with their real Win32 equivalents changed exception throwing to use error string and exception helper methods declared in include/win32.h (peekData): implemented timeout support (receive): likewise * java/net/natPlainSocketImplWin32.cc: fixed tab, indentation and whitespace inconsistencies removed gcj/cni.h and gcj/javaprims.h includes removed DISABLE_JAVA_NET conditional code removed POSIX conditional code not relevant to Win32 changed net POSIXisms to Win32isms replaced _Jv socket-related calls with their real Win32 equivalents changed exception throwing to use error string and exception helper methods declared in include/win32.h (throwConnectException): helper function for connect() (connect): implemented timeout support (accept): likewise (doRead): new helper function common to both read() method overloads, includes timeout support (read): implemented both overloads in terms of doRead() (available): implemented using ioctlsocket() From-SVN: r70904
169 lines
4.0 KiB
C++
169 lines
4.0 KiB
C++
/* Copyright (C) 2003 Free Software Foundation
|
|
|
|
This file is part of libgcj.
|
|
|
|
This software is copyrighted work licensed under the terms of the
|
|
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
|
|
details. */
|
|
|
|
#include <config.h>
|
|
#include <platform.h>
|
|
|
|
#undef STRICT
|
|
|
|
#include <java/net/InetAddress.h>
|
|
#include <java/net/UnknownHostException.h>
|
|
#include <java/lang/SecurityException.h>
|
|
|
|
jbyteArray
|
|
java::net::InetAddress::aton (jstring host)
|
|
{
|
|
JV_TEMP_UTF_STRING (hostname, host);
|
|
char* bytes = NULL;
|
|
int blen = 0;
|
|
unsigned long laddr = inet_addr (hostname);
|
|
if (laddr != INADDR_NONE)
|
|
{
|
|
bytes = (char*) &laddr;
|
|
blen = 4;
|
|
}
|
|
if (blen == 0)
|
|
return NULL;
|
|
jbyteArray result = JvNewByteArray (blen);
|
|
memcpy (elements (result), bytes, blen);
|
|
return result;
|
|
}
|
|
|
|
jint
|
|
java::net::InetAddress::getFamily (jbyteArray bytes)
|
|
{
|
|
int len = bytes->length;
|
|
if (len == 4)
|
|
return AF_INET;
|
|
#ifdef HAVE_INET6
|
|
else if (len == 16)
|
|
return AF_INET6;
|
|
#endif /* HAVE_INET6 */
|
|
else
|
|
JvFail ("unrecognized size");
|
|
}
|
|
|
|
|
|
JArray<java::net::InetAddress*> *
|
|
java::net::InetAddress::lookup (jstring host, java::net::InetAddress* iaddr,
|
|
jboolean all)
|
|
{
|
|
struct hostent *hptr = NULL;
|
|
if (host != NULL)
|
|
{
|
|
JV_TEMP_UTF_STRING (hostname, host);
|
|
|
|
// FIXME: this is insufficient if some other piece of code calls
|
|
// this gethostbyname.
|
|
JvSynchronize sync (java::net::InetAddress::localhostAddress);
|
|
hptr = gethostbyname (hostname);
|
|
}
|
|
else
|
|
{
|
|
jbyteArray bytes = iaddr->addr;
|
|
char *chars = (char*) elements (bytes);
|
|
int len = bytes->length;
|
|
int type;
|
|
char *val;
|
|
if (len == 4)
|
|
{
|
|
val = chars;
|
|
type = iaddr->family = AF_INET;
|
|
}
|
|
#ifdef HAVE_INET6
|
|
else if (len == 16)
|
|
{
|
|
val = (char *) &chars;
|
|
type = iaddr->family = AF_INET6;
|
|
}
|
|
#endif /* HAVE_INET6 */
|
|
else
|
|
JvFail ("unrecognized size");
|
|
|
|
// FIXME: this is insufficient if some other piece of code calls
|
|
// this gethostbyaddr.
|
|
JvSynchronize sync (java::net::InetAddress::localhostAddress);
|
|
hptr = gethostbyaddr (val, len, type);
|
|
}
|
|
if (hptr != NULL)
|
|
{
|
|
if (!all)
|
|
host = JvNewStringUTF (hptr->h_name);
|
|
java::lang::SecurityException *ex = checkConnect (host);
|
|
if (ex != NULL)
|
|
{
|
|
if (iaddr == NULL || iaddr->addr == NULL)
|
|
throw ex;
|
|
hptr = NULL;
|
|
}
|
|
}
|
|
if (hptr == NULL)
|
|
{
|
|
if (iaddr != NULL && iaddr->addr != NULL)
|
|
{
|
|
iaddr->hostName = iaddr->getHostAddress();
|
|
return NULL;
|
|
}
|
|
else
|
|
throw new java::net::UnknownHostException(host);
|
|
}
|
|
|
|
int count;
|
|
if (all)
|
|
{
|
|
char** ptr = hptr->h_addr_list;
|
|
count = 0;
|
|
while (*ptr++) count++;
|
|
}
|
|
else
|
|
count = 1;
|
|
|
|
JArray<java::net::InetAddress*> *result;
|
|
java::net::InetAddress** iaddrs;
|
|
if (all)
|
|
{
|
|
result = java::net::InetAddress::allocArray (count);
|
|
iaddrs = elements (result);
|
|
}
|
|
else
|
|
{
|
|
result = NULL;
|
|
iaddrs = &iaddr;
|
|
}
|
|
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
if (iaddrs[i] == NULL)
|
|
iaddrs[i] = new java::net::InetAddress (NULL, NULL);
|
|
if (iaddrs[i]->hostName == NULL)
|
|
iaddrs[i]->hostName = host;
|
|
if (iaddrs[i]->addr == NULL)
|
|
{
|
|
char *bytes = hptr->h_addr_list[i];
|
|
iaddrs[i]->addr = JvNewByteArray (hptr->h_length);
|
|
iaddrs[i]->family = getFamily (iaddrs[i]->addr);
|
|
memcpy (elements (iaddrs[i]->addr), bytes, hptr->h_length);
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
jstring
|
|
java::net::InetAddress::getLocalHostname ()
|
|
{
|
|
char buffer[400];
|
|
if (gethostname (buffer, sizeof(buffer)))
|
|
return NULL;
|
|
// It is admittedly non-optimal to convert the hostname to Unicode
|
|
// only to convert it back in getByName, but simplicity wins. Note
|
|
// that unless there is a SecurityManager, we only get called once
|
|
// anyway, thanks to the InetAddress.localhost cache.
|
|
return JvNewStringUTF (buffer);
|
|
}
|