Main Page   Packages   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

InetAddress Class Reference

#include <InetAddress.hpp>

List of all members.

Public Methods

 InetAddress ()
 InetAddress (const InetAddress &src)
const InetAddress & operator= (const InetAddress &src)
 InetAddress (const char *hostname)
const char * getHostAddress () const
const char * getHostName () const
void setAddress (const char *hostname)
const char * toString () const
const InetAddress getByName (const char *host) const
const InetAddress * getAllByName (const char *host) const
bool equals (const InetAddress &right) const
bool operator== (const InetAddress &right) const
const char * getAddress () const
unsigned long getAddress2 () const
bool isMulticastAddress () const

Static Public Methods

InetAddress InetAddress::getLocalHost ()

Private Attributes

in_addr * ip
hostent * h


Constructor & Destructor Documentation

InetAddress::InetAddress  
 

Definition at line 11 of file InetAddress.cpp.

Referenced by getByName().

00012 {
00013   char host[81];
00014   memset( host, 0, 81 );
00015   gethostname( host, 80 );
00016   setAddress( host );
00017 }

InetAddress::InetAddress const InetAddress &    src
 

Definition at line 114 of file InetAddress.cpp.

00115 {
00116   setAddress( src.getAddress() );
00117 }

InetAddress::InetAddress const char *    hostname
 

Definition at line 64 of file InetAddress.cpp.

00065 {
00066   setAddress(hostname);
00067 }


Member Function Documentation

InetAddress InetAddress::InetAddress::getLocalHost   [inline, static]
 

Definition at line 62 of file InetAddress.hpp.

00063   {
00064     static InetAddress I;
00065     return I;
00066   }

bool InetAddress::equals const InetAddress &    right const
 

Definition at line 125 of file InetAddress.cpp.

00126 {
00127   return (right.getAddress2() == ip->s_addr);
00128 }

const char * InetAddress::getAddress   const
 

Definition at line 135 of file InetAddress.cpp.

Referenced by InetAddress(), and operator=().

00136 {
00137 /*
00138   char ret[5]; // 0..4
00139   memcpy( ret, (char*)ip, 4 ); // 0..3
00140   ret[4] = 0;
00141 
00142   return ret;     // Memory leak ???????
00143 */
00144   return (const char*)ip;
00145 }

unsigned long InetAddress::getAddress2   const
 

Definition at line 147 of file InetAddress.cpp.

Referenced by TcpServerSocket::TcpServerSocket(), TcpSocket::TcpSocket(), equals(), and operator==().

00148 {
00149   return ip->s_addr;
00150 }

const InetAddress * InetAddress::getAllByName const char *    host const
 

Definition at line 199 of file InetAddress.cpp.

00200 {
00201   InetAddress *ret   = NULL;
00202   int n_entries      = 0;
00203   int i              = 0;
00204   struct hostent *he = gethostbyname(host);
00205   struct in_addr *ip = NULL;
00206 
00207   if ( he == NULL ) 
00208   {
00209     switch( h_errno ) 
00210     {
00211       case HOST_NOT_FOUND:
00212         fprintf( stderr, "Host not found: %s \n", host );
00213         break;
00214       case NO_DATA:
00215         fprintf( stderr, "Host \"%s\" has no address \n", host );
00216         break;
00217       case NO_RECOVERY:
00218         fprintf( stderr, "Irrecoverable error while getting address for host %s \n", host );
00219         break;
00220       case TRY_AGAIN:
00221         fprintf( stderr, "Temporary error condition, try again", host );
00222         break;
00223       default:
00224         fprintf( stderr, "Unknown error occured. %d : %s \n", h_errno, strerror( h_errno ) );
00225     }
00226     return NULL;
00227   }
00228   
00229   // BUG ???????? ........................\/
00230   for(i=0;*he->h_addr_list[i] != '\0';i++);      // count number of addresses
00231 
00232   n_entries = i;
00233   ret = new InetAddress[i+1];
00234   
00235   for(i=0;i < n_entries;i++) 
00236   {
00237     ip = (struct in_addr *)he->h_addr_list[i];       // get the address number i
00238     ret[i].setAddress(inet_ntoa(*ip));               // create a new InetAddress object 
00239                                                      // from a struct in_addr
00240   }
00241 
00242   // DELETE ??!? Memory leak
00243   
00244   return ret;
00245 }

const InetAddress InetAddress::getByName const char *    host const
 

Definition at line 192 of file InetAddress.cpp.

00193 {
00194   return InetAddress( host );
00195 }

const char * InetAddress::getHostAddress   const
 

Definition at line 69 of file InetAddress.cpp.

00070 {
00071   return inet_ntoa(*ip);
00072 }

const char * InetAddress::getHostName   const
 

Definition at line 74 of file InetAddress.cpp.

Referenced by TcpSocket::getHost().

00075 {
00076 //  char * ret = (char *) malloc(strlen(h->h_name));   // Memory leak!
00077 //  strcpy(ret,h->h_name);
00078 
00079   // Might memory leak too?
00080   return strdup( h->h_name );  //ret; 
00081 }

__inline bool InetAddress::isMulticastAddress   const
 

Definition at line 153 of file InetAddress.cpp.

00154 {
00155   return ((ntohl(ip->s_addr) & 0x80000000) == 0x80000000);
00156 }

const InetAddress & InetAddress::operator= const InetAddress &    src
 

Definition at line 119 of file InetAddress.cpp.

00120 {
00121   setAddress( src.getAddress() );
00122   return *this;
00123 }

bool InetAddress::operator== const InetAddress &    right const
 

Definition at line 130 of file InetAddress.cpp.

00131 {
00132   return (right.getAddress2() == ip->s_addr);
00133 }

void InetAddress::setAddress const char *    hostname
 

Definition at line 83 of file InetAddress.cpp.

Referenced by InetAddress(), getAllByName(), and operator=().

00084 {
00085    h = gethostbyname( hostname );
00086    if( h == NULL ) 
00087    {
00088      switch(h_errno) 
00089      {
00090        case HOST_NOT_FOUND:
00091          fprintf( stderr, "Host not found: %s\n", hostname );
00092          break;
00093        case NO_ADDRESS:
00094          fprintf( stderr, "Host %s has no address \n", hostname );
00095          break;
00096        case NO_RECOVERY:
00097          fprintf( stderr, "Irrecoverable error while getting address for host %s \n", hostname );
00098          break;
00099        case TRY_AGAIN:
00100          fprintf( stderr, "Temporary errorcondition, try again %s \n", hostname );
00101          break;
00102        default:
00103          fprintf( stderr, "Unknown error occured. %d : %s \n", h_errno, strerror( h_errno ) );
00104      }
00105 
00106    } // End if
00107 
00108    ip = (in_addr*)( h->h_addr );
00109 }

const char * InetAddress::toString   const
 

Definition at line 167 of file InetAddress.cpp.

00168 {
00169   return inet_ntoa( *ip );
00170 }


Member Data Documentation

struct hostent* InetAddress::h [private]
 

Definition at line 71 of file InetAddress.hpp.

struct in_addr* InetAddress::ip [private]
 

Definition at line 70 of file InetAddress.hpp.


The documentation for this class was generated from the following files:
Generated on Sun Oct 14 18:48:40 2001 for Standard J2K Library by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001