123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- /* Copyright (C) 2003, 2006 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/VMInetAddress.h>
- #include <java/net/UnknownHostException.h>
- jstring
- java::net::VMInetAddress::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.
- return JvNewStringUTF (buffer);
- }
- jbyteArray
- java::net::VMInetAddress::lookupInaddrAny ()
- {
- unsigned long laddr = INADDR_ANY;
- char *bytes = (char *) &laddr;
- int blen = sizeof (laddr);
- jbyteArray result = JvNewByteArray (blen);
- memcpy (elements (result), bytes, blen);
- return result;
- }
- jstring
- java::net::VMInetAddress::getHostByAddr (jbyteArray addr)
- {
- struct hostent *hptr = NULL;
- char *bytes = (char*) elements (addr);
- int len = addr->length;
- int type;
- char *val;
- if (len == 4)
- {
- val = bytes;
- type = AF_INET;
- }
- #ifdef HAVE_INET6
- else if (len == 16)
- {
- val = (char *) &bytes;
- type = 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::VMInetAddress::class$);
- hptr = gethostbyaddr (val, len, type);
- if (hptr == NULL)
- throw new java::net::UnknownHostException ();
- return JvNewStringUTF (hptr->h_name);
- }
- JArray<jbyteArray> *
- java::net::VMInetAddress::getHostByName (jstring host)
- {
- struct hostent *hptr = NULL;
- JV_TEMP_UTF_STRING (hostname, host);
- // FIXME: this is insufficient if some other piece of code calls
- // this gethostbyname.
- JvSynchronize sync (&java::net::VMInetAddress::class$);
- hptr = gethostbyname (hostname);
- if (hptr == NULL)
- throw new java::net::UnknownHostException (host);
- int count = 0;
- char ** ptr = hptr->h_addr_list;
- while (*ptr++) count++;
- JArray<jbyteArray> *result =
- (JArray<jbyteArray> *) _Jv_NewObjectArray (
- count, _Jv_GetArrayClass(JvPrimClass(byte), NULL), NULL);
- jbyteArray* addrs = elements (result);
- for (int i = 0; i < count; i++)
- {
- addrs[i] = JvNewByteArray (hptr->h_length);
- memcpy (elements (addrs[i]), hptr->h_addr_list[i], hptr->h_length);
- }
- return result;
- }
- jbyteArray
- java::net::VMInetAddress::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;
- }
|