1 /* Copyright (C) 2003, 2006 Free Software Foundation
3 This file is part of libgcj.
5 This software is copyrighted work licensed under the terms of the
6 Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
14 #include <java/net/VMInetAddress.h>
15 #include <java/net/UnknownHostException.h>
18 java::net::VMInetAddress::getLocalHostname ()
21 if (gethostname (buffer
, sizeof(buffer
)))
23 // It is admittedly non-optimal to convert the hostname to Unicode
24 // only to convert it back in getByName, but simplicity wins.
25 return JvNewStringUTF (buffer
);
29 java::net::VMInetAddress::lookupInaddrAny ()
31 unsigned long laddr
= INADDR_ANY
;
32 char *bytes
= (char *) &laddr
;
33 int blen
= sizeof (laddr
);
34 jbyteArray result
= JvNewByteArray (blen
);
35 memcpy (elements (result
), bytes
, blen
);
40 java::net::VMInetAddress::getHostByAddr (jbyteArray addr
)
42 struct hostent
*hptr
= NULL
;
43 char *bytes
= (char*) elements (addr
);
44 int len
= addr
->length
;
55 val
= (char *) &bytes
;
58 #endif /* HAVE_INET6 */
60 JvFail ("unrecognized size");
62 // FIXME: this is insufficient if some other piece of code calls
63 // this gethostbyaddr.
64 JvSynchronize
sync (&java::net::VMInetAddress::class$
);
65 hptr
= gethostbyaddr (val
, len
, type
);
68 throw new java::net::UnknownHostException ();
70 return JvNewStringUTF (hptr
->h_name
);
74 java::net::VMInetAddress::getHostByName (jstring host
)
76 struct hostent
*hptr
= NULL
;
77 JV_TEMP_UTF_STRING (hostname
, host
);
79 // FIXME: this is insufficient if some other piece of code calls
80 // this gethostbyname.
81 JvSynchronize
sync (&java::net::VMInetAddress::class$
);
82 hptr
= gethostbyname (hostname
);
85 throw new java::net::UnknownHostException (host
);
88 char ** ptr
= hptr
->h_addr_list
;
89 while (*ptr
++) count
++;
91 JArray
<jbyteArray
> *result
=
92 (JArray
<jbyteArray
> *) _Jv_NewObjectArray (
93 count
, _Jv_GetArrayClass(JvPrimClass(byte
), NULL
), NULL
);
94 jbyteArray
* addrs
= elements (result
);
96 for (int i
= 0; i
< count
; i
++)
98 addrs
[i
] = JvNewByteArray (hptr
->h_length
);
99 memcpy (elements (addrs
[i
]), hptr
->h_addr_list
[i
], hptr
->h_length
);
105 java::net::VMInetAddress::aton (jstring host
)
107 JV_TEMP_UTF_STRING (hostname
, host
);
110 unsigned long laddr
= inet_addr (hostname
);
111 if (laddr
!= INADDR_NONE
)
113 bytes
= (char *) &laddr
;
118 jbyteArray result
= JvNewByteArray (blen
);
119 memcpy (elements (result
), bytes
, blen
);