home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / kaffe-0.5p4-src.tgz / tar.out / contrib / kaffe / lib / net / java.net / InetAddress.c < prev    next >
C/C++ Source or Header  |  1996-09-28  |  3KB  |  136 lines

  1. /*
  2.  * java.net.InetAddress.c
  3.  *
  4.  * Copyright (c) 1996 Systems Architecture Research Centre,
  5.  *           City University, London, UK.
  6.  *
  7.  * See the file "license.terms" for information on usage and redistribution
  8.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  9.  *
  10.  * Written by Tim Wilkinson <tim@sarc.city.ac.uk>, February 1996.
  11.  */
  12.  
  13. #include <assert.h>
  14. #include <sys/types.h>
  15. #include <netinet/in.h>
  16. #include <sys/socket.h>
  17. #include <netdb.h>
  18. #include <native.h>
  19. #include "../../kaffevm/itypes.h"
  20. #include "java.net.stubs/InetAddress.h"
  21. #include "nets.h"
  22.  
  23. #define    HOSTNMSZ    80
  24.  
  25. /*
  26.  * Get localhost name.
  27.  */
  28. struct Hjava_lang_String*
  29. java_net_InetAddress_getLocalHostName(struct Hjava_net_InetAddress* none)
  30. {
  31.     char hostname[HOSTNMSZ];
  32.  
  33.     if (gethostname(hostname, HOSTNMSZ-1) < 0) {
  34.         strcpy("localhost", hostname);
  35.     }
  36.     return (makeJavaString(hostname, strlen(hostname)));
  37. }
  38.  
  39. /*
  40.  * Provide one of my local address (I guess).
  41.  */
  42. void
  43. java_net_InetAddress_makeAnyLocalAddress(struct Hjava_net_InetAddress* none, struct Hjava_net_InetAddress* this)
  44. {
  45.     unhand(this)->hostName = 0;
  46.     unhand(this)->address = htonl(INADDR_ANY);
  47.     unhand(this)->family = AF_INET;
  48. }
  49.  
  50. /*
  51.  * Convert a hostname to the primary host address.
  52.  */
  53. HArrayOfByte*
  54. java_net_InetAddress_lookupHostAddr(struct Hjava_net_InetAddress* none, struct Hjava_lang_String* str)
  55. {
  56.     char name[MAXHOSTNAME];
  57.     struct hostent* ent;
  58.     object* obj;
  59.  
  60.     javaString2CString(str, name, sizeof(name));
  61.  
  62.     ent = gethostbyname(name);
  63.     if (ent == 0) {
  64.         SignalError(0, "java.net.UnknownHostException", SYS_HERROR);
  65.     }
  66.  
  67.     /* Copy in the network address */
  68.     obj = AllocArray(sizeof(jint), TYPE_Byte);
  69.     assert(obj != 0);
  70.     *(jint*)(obj+1) = *(jint*)ent->h_addr_list[0];
  71.  
  72.     return ((HArrayOfByte*)obj);
  73. }
  74.  
  75. /*
  76.  * Convert a hostname to an array of host addresses.
  77.  */
  78. HArrayOfArray* /* HArrayOfArrayOfBytes */
  79. java_net_InetAddress_lookupAllHostAddr(struct Hjava_net_InetAddress* none, struct Hjava_lang_String* str)
  80. {
  81.     char name[MAXHOSTNAME];
  82.     struct hostent* ent;
  83.     object* obj;
  84.     object* array;
  85.     int i;
  86.     int alength;
  87.  
  88.     javaString2CString(str, name, sizeof(name));
  89.  
  90.     ent = gethostbyname(name);
  91.     if (ent == 0) {
  92.         SignalError(0, "java.net.UnknownHostException", SYS_HERROR);
  93.     }
  94.  
  95.     for (alength = 0; ent->h_addr_list[alength]; alength++)
  96.       ;
  97.  
  98.     array = AllocObjectArray(alength, "[[B");
  99.     assert(array != 0);
  100.  
  101.     for (i = 0; i < alength; i++) {
  102.         /* Copy in the network address */
  103.         obj = AllocArray(sizeof(jint), TYPE_Byte);
  104.         assert(obj != 0);
  105.         *(jint*)(obj+1) = *(jint*)ent->h_addr_list[i];
  106.         ((object**)(array+1))[i] = obj;
  107.     }
  108.  
  109.     return ((HArrayOfArray*)array);
  110. }
  111.  
  112. /*
  113.  * Convert a network order address into the hostname.
  114.  */
  115. struct Hjava_lang_String*
  116. java_net_InetAddress_getHostByAddr(struct Hjava_net_InetAddress* none, jint addr)
  117. {
  118.     struct hostent* ent;
  119.  
  120.     ent = gethostbyaddr((char*)&addr, sizeof(jint), AF_INET);
  121.     if (ent == 0) {
  122.         SignalError(0, "java.net.UnknownHostException", SYS_HERROR);
  123.     }
  124.  
  125.     return (makeJavaString((char*)ent->h_name, strlen(ent->h_name)));
  126. }
  127.  
  128. /*
  129.  * Return the inet address family.
  130.  */
  131. jint
  132. java_net_InetAddress_getInetFamily(struct Hjava_net_InetAddress* none)
  133. {
  134.     return (AF_INET);
  135. }
  136.