OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libjava/] [java/] [net/] [natVMInetAddressWin32.cc] - Rev 867

Go to most recent revision | Compare with Previous | Blame | View Log

/* 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;
}
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.