#include <inet_address.h>
Nevrax France
Definition at line 64 of file inet_address.h.
Public Member Functions | |
std::string | asIPString () const |
Returns IP address and port as a string. (ex: "195.68.21.195:80"). | |
std::string | asString () const |
Returns hostname and port as a string. (ex: "www.nevrax.org:80 (195.68.21.195)"). | |
CInetAddress (const CInetAddress &other) | |
Copy constructor. | |
CInetAddress (const std::string &hostNameAndPort) | |
CInetAddress (const std::string &hostName, uint16 port) | |
Alternate constructor (calls setByName()). | |
CInetAddress () | |
Default Constructor. The address is set to INADDR_ANY. | |
const std::string & | hostName () const |
Returns hostname. (ex: "www.nevrax.org"). | |
uint32 | internalIPAddress () const |
Returns internal IP address. | |
uint32 | internalNetAddress () const |
Returns the internal network address (it s the network address for example 192.168.0.0 for a C class). | |
std::string | ipAddress () const |
Returns readable IP address. (ex: "195.68.21.195"). | |
bool | is127001 () const |
Returns true if this CInetAddress is 127.0.0.1. | |
bool | isValid () const |
Returns if object (address and port) is valid. | |
CInetAddress & | operator= (const CInetAddress &other) |
Assignment operator. | |
uint16 | port () const |
Returns port. | |
void | serial (NLMISC::IStream &s) |
Serialize. | |
CInetAddress & | setByName (const std::string &hostname) |
Resolves a name. | |
void | setNameAndPort (const std::string &hostNameAndPort) |
Sets hostname and port (ex: www.nevrax.com:80). | |
void | setPort (uint16 port) |
Sets port. | |
void | setSockAddr (const sockaddr_in *saddr) |
const sockaddr_in * | sockAddr () const |
Returns internal socket address (read only). | |
~CInetAddress () | |
Destructor. | |
Static Public Member Functions | |
std::vector< CInetAddress > | localAddresses () |
CInetAddress | localHost () |
Creates a CInetAddress object with local host address, port=0. | |
Static Public Attributes | |
bool | RetrieveNames = false |
If true, setSockAddr() always tries to retrieve the host name from the address. | |
Protected Member Functions | |
CInetAddress (const in_addr *ip) | |
Constructor with ip address, port=0. | |
Private Member Functions | |
void | init () |
Private Attributes | |
std::string | _HostName |
sockaddr_in * | _SockAddr |
bool | _Valid |
Friends | |
bool | operator< (const CInetAddress &a1, const CInetAddress &a2) |
Comparison < operator. | |
bool | operator== (const CInetAddress &a1, const CInetAddress &a2) |
Comparison == operator. |
|
Default Constructor. The address is set to INADDR_ANY.
Definition at line 64 of file inet_address.cpp. References _SockAddr, and init(). Referenced by localAddresses(), and localHost().
|
|
Alternate constructor (calls setByName()).
Definition at line 98 of file inet_address.cpp. References init(), setByName(), setPort(), and uint16.
|
|
Alternate constructor (calls setByName()) example: CInetAddress("www.nevrax.com:80") Definition at line 109 of file inet_address.cpp. References init(), and setNameAndPort().
00110 { 00111 init(); 00112 setNameAndPort( hostNameAndPort ); 00113 } |
|
Copy constructor.
Definition at line 119 of file inet_address.cpp. References _HostName, _SockAddr, _Valid, and init().
|
|
Destructor.
Definition at line 195 of file inet_address.cpp. References _SockAddr.
00196 { 00197 delete _SockAddr; 00198 // _Valid = false; 00199 } |
|
Constructor with ip address, port=0.
Definition at line 75 of file inet_address.cpp. References _HostName, _SockAddr, _Valid, init(), and ipAddress().
00076 { 00077 init(); 00078 _SockAddr->sin_port = 0; 00079 memcpy( &_SockAddr->sin_addr, ip, sizeof(in_addr) ); 00080 00081 // get the host name to be displayed 00082 hostent *phostent = gethostbyaddr( (char*)&ip->s_addr, 4, AF_INET ); 00083 if ( phostent == NULL ) 00084 { 00085 _HostName = ipAddress(); 00086 } 00087 else 00088 { 00089 _HostName = string( phostent->h_name ); 00090 } 00091 _Valid = true; 00092 } |
|
Returns IP address and port as a string. (ex: "195.68.21.195:80").
Definition at line 397 of file inet_address.cpp. References ipAddress(), port(), and NLMISC::toString(). Referenced by NLNET::CLoginServer::init(), NLNET::NLMISC_DYNVARIABLE(), serial(), and NLNET::setListenAddress().
00398 { 00399 // stringstream ss; 00400 // ss << ipAddress() << ":" << port(); 00401 // return ss.str(); 00402 return ipAddress() + ":" + NLMISC::toString(port()); 00403 } |
|
Returns hostname and port as a string. (ex: "www.nevrax.org:80 (195.68.21.195)").
Definition at line 385 of file inet_address.cpp. References hostName(), ipAddress(), port(), and NLMISC::toString(). Referenced by NLNET::CUdpSock::bind(), NLNET::cbServerAskUniversalTime(), NLNET::cbShardValidation(), NLNET::CTcpSock::disconnect(), NLNET::CDummyTcpSock::disconnect(), NLNET::CNamingClient::info(), NLNET::CListenSock::init(), NLNET::CNamingClient::lookupAndConnect(), NLNET::IService::main(), NLNET::CUdpSock::receive(), NLNET::CNonBlockingBufSock::receivePart(), NLNET::sendEMailCommand(), and NLNET::CUnifiedNetwork::update().
00386 { 00387 // stringstream ss; 00388 // ss << hostName() << ":" << port() << " (" << ipAddress() << ")"; 00389 // return ss.str(); 00390 return hostName() + ":" + NLMISC::toString(port()) + " (" + ipAddress() + ")"; 00391 } |
|
Returns hostname. (ex: "www.nevrax.org").
Definition at line 367 of file inet_address.cpp. References _HostName. Referenced by asString().
00368 { 00369 return _HostName; 00370 } |
|
Definition at line 180 of file inet_address.cpp. References _SockAddr, and _Valid. Referenced by CInetAddress().
|
|
Returns internal IP address.
Definition at line 315 of file inet_address.cpp. References _SockAddr, and uint32. Referenced by internalNetAddress(), and is127001().
00316 { 00317 return _SockAddr->sin_addr.s_addr; 00318 } |
|
Returns the internal network address (it s the network address for example 192.168.0.0 for a C class).
Definition at line 320 of file inet_address.cpp. References internalIPAddress(), and uint32.
00321 { 00322 uint32 ip = internalIPAddress(); 00323 if ((ip&0x00000080) == 0) 00324 { 00325 // A class 00326 return ip & 0x000000FF; 00327 } 00328 else if ((ip&0x00000040) == 0) 00329 { 00330 // B class 00331 return ip & 0x0000FFFF; 00332 } 00333 else if ((ip&0x00000020) == 0) 00334 { 00335 // C class 00336 return ip & 0x00FFFFFF; 00337 } 00338 else if ((ip&0x00000010) == 0) 00339 { 00340 // D class 00341 return ip & 0xFFFFFFFF; 00342 } 00343 else 00344 { 00345 return ip; 00346 } 00347 } |
|
Returns readable IP address. (ex: "195.68.21.195").
Definition at line 355 of file inet_address.cpp. References _SockAddr. Referenced by asIPString(), asString(), CInetAddress(), localHost(), and setSockAddr().
00356 { 00357 /*stringstream ss; // or use inet_ntoa 00358 ss << inet_ntoa ( _SockAddr->sin_addr ); 00359 return ss.str();*/ 00360 return string( inet_ntoa( _SockAddr->sin_addr ) ); 00361 } |
|
Returns true if this CInetAddress is 127.0.0.1.
Definition at line 503 of file inet_address.cpp. References internalIPAddress().
00504 { 00505 return (internalIPAddress () == htonl(0x7F000001)); 00506 } |
|
Returns if object (address and port) is valid.
Definition at line 297 of file inet_address.cpp. References _SockAddr, and _Valid. Referenced by NLNET::CUnifiedNetwork::init(), and NLNET::CUnifiedNetwork::update().
|
|
Returns the list of the local host addresses (with port=0) (especially useful if the host is multihomed) Definition at line 467 of file inet_address.cpp. References CInetAddress(), and uint.
00468 { 00469 // 1. Get local host name 00470 const uint maxlength = 80; 00471 char localhost [maxlength]; 00472 if ( gethostname( localhost, maxlength ) == SOCKET_ERROR ) 00473 { 00474 throw ESocket( "Unable to get local hostname" ); 00475 } 00476 00477 // 2. Get address list 00478 vector<CInetAddress> vect; 00479 00480 uint i = 0; 00481 do 00482 { 00483 hostent *phostent = gethostbyname( localhost ); 00484 if ( phostent == NULL ) 00485 throw ESocket( (string("Hostname resolution failed for ")+string(localhost)).c_str() ); 00486 00487 if (phostent->h_addr_list[i] == 0) 00488 break; 00489 00490 vect.push_back( CInetAddress( (const in_addr*)(phostent->h_addr_list[i]) ) ); 00491 i++; 00492 } 00493 while (true); 00494 00495 if(vect.empty()) 00496 { 00497 throw ESocket( (string("No network card detected for ")+string(localhost)).c_str() ); 00498 } 00499 00500 return vect; 00501 } |
|
Creates a CInetAddress object with local host address, port=0.
Definition at line 447 of file inet_address.cpp. References CInetAddress(), ipAddress(), nlwarning, and uint.
00448 { 00449 const uint maxlength = 80; 00450 char localhost [maxlength]; 00451 if ( gethostname( localhost, maxlength ) != 0 ) 00452 throw ESocket( "Unable to get local hostname" ); 00453 CInetAddress localaddr = CInetAddress( string(localhost) ); 00454 00455 if ( localaddr.ipAddress() == "127.0.0.1" ) 00456 { 00457 nlwarning ("LNETL0: No network card detected! using localhost (127.0.0.1)"); 00458 } 00459 00460 return localaddr; 00461 } |
|
Assignment operator.
Definition at line 131 of file inet_address.cpp. References _HostName, _SockAddr, and _Valid.
|
|
Returns port.
Definition at line 376 of file inet_address.cpp. References _SockAddr, and uint16. Referenced by asIPString(), asString(), and NLNET::operator<().
00377 { 00378 return ntohs( _SockAddr->sin_port ); 00379 } |
|
Serialize.
Definition at line 409 of file inet_address.cpp. References _SockAddr, _Valid, asIPString(), NLMISC::IStream::isReading(), s, NLMISC::CMemStream::serial(), setNameAndPort(), setSockAddr(), NLMISC::CMemStream::stringMode(), and uint8.
00410 { 00411 NLMISC::CMemStream *ms = dynamic_cast<NLMISC::CMemStream*>(&s); 00412 if ( ms && ms->stringMode() ) 00413 { 00414 // String stream 00415 string addrs; 00416 if ( ms->isReading() ) 00417 { 00418 ms->serial( addrs ); 00419 setNameAndPort( addrs ); 00420 } 00421 else 00422 { 00423 addrs = asIPString(); 00424 ms->serial( addrs ); 00425 } 00426 s.serial( _Valid ); 00427 } 00428 else 00429 { 00430 // Binary stream 00431 s.serialBuffer( (uint8*)_SockAddr, sizeof(*_SockAddr) ); // this is possible only because the contents of _SockAddr is platform-independant ! 00432 s.serial( _Valid ); 00433 00434 if(_Valid) 00435 { 00436 // retreive the fullname 00437 setSockAddr (_SockAddr); 00438 } 00439 00440 } 00441 } |
|
Resolves a name.
Definition at line 224 of file inet_address.cpp. References _HostName, _SockAddr, _Valid, and nldebug. Referenced by CInetAddress(), and setNameAndPort().
00225 { 00226 // Try to convert directly for addresses such as a.b.c.d 00227 in_addr iaddr; 00228 #ifdef NL_OS_WINDOWS 00229 iaddr.S_un.S_addr = inet_addr( hostName.c_str() ); 00230 if ( iaddr.S_un.S_addr == INADDR_NONE ) 00231 #elif defined NL_OS_UNIX 00232 iaddr.s_addr = inet_addr( hostName.c_str() ); 00233 if ( iaddr.s_addr == INADDR_NONE ) 00234 #endif 00235 { 00236 00237 // Otherwise use the traditional DNS look-up 00238 hostent *phostent = gethostbyname( hostName.c_str() ); 00239 if ( phostent == NULL ) 00240 { 00241 _Valid = false; 00242 nldebug( "LNETL0: Network error: resolution of hostname '%s' failed", hostName.c_str() ); 00243 // return *this; 00244 throw ESocket( (string("Hostname resolution failed for ")+hostName).c_str() ); 00245 } 00246 _HostName = string( phostent->h_name ); 00247 memcpy( &_SockAddr->sin_addr, phostent->h_addr, sizeof(in_addr) ); 00248 } 00249 else 00250 { 00251 _HostName = hostName; 00252 memcpy( &_SockAddr->sin_addr, &iaddr, sizeof(iaddr) ); 00253 } 00254 _Valid = true; 00255 return *this; 00256 } |
|
Sets hostname and port (ex: www.nevrax.com:80).
Definition at line 204 of file inet_address.cpp. References setByName(), setPort(), and uint32. Referenced by CInetAddress(), and serial().
00205 { 00206 uint32 pos = hostNameAndPort.find_first_of (':'); 00207 if (pos != string::npos) 00208 { 00209 setPort( atoi(hostNameAndPort.substr(pos + 1).c_str()) ); 00210 } 00211 else 00212 { 00213 setPort( 0 ); 00214 } 00215 00216 // if pos == -1, it will copy all the string 00217 setByName( hostNameAndPort.substr (0, pos) ); 00218 } |
|
Sets port.
Definition at line 262 of file inet_address.cpp. References _SockAddr, and uint16. Referenced by CInetAddress(), NLNET::CListenSock::init(), and setNameAndPort().
00263 { 00264 _SockAddr->sin_port = htons( port ); 00265 00266 } |
|
Sets internal socket address directly (contents is copied). It also retrieves the host name if CInetAddress::RetrieveNames is true. Definition at line 272 of file inet_address.cpp. References _HostName, _SockAddr, _Valid, and ipAddress(). Referenced by serial().
00273 { 00274 memcpy( _SockAddr, saddr, sizeof(*saddr) ); 00275 00276 // Get host name 00277 // Warning: when it can't find it, it take more than 4 seconds 00278 if ( CInetAddress::RetrieveNames ) 00279 { 00280 hostent *phostent = gethostbyaddr( (char*)&saddr->sin_addr.s_addr, 4, AF_INET ); 00281 if ( phostent == NULL ) 00282 { 00283 _HostName = ipAddress(); 00284 } 00285 else 00286 { 00287 _HostName = string( phostent->h_name ); 00288 } 00289 } 00290 _Valid = true; 00291 } |
|
Returns internal socket address (read only).
Definition at line 306 of file inet_address.cpp. References _SockAddr. Referenced by NLNET::CUdpSock::bind().
00307 { 00308 return _SockAddr; 00309 } |
|
Comparison < operator.
Definition at line 153 of file inet_address.cpp.
00154 { 00155 #ifdef NL_OS_WINDOWS 00156 if ( a1._SockAddr->sin_addr.S_un.S_addr == a2._SockAddr->sin_addr.S_un.S_addr ) 00157 { 00158 return ( a1.port() < a2.port() ); 00159 } 00160 else 00161 { 00162 return ( a1._SockAddr->sin_addr.S_un.S_addr < a2._SockAddr->sin_addr.S_un.S_addr ); 00163 } 00164 #elif defined NL_OS_UNIX 00165 if ( a1._SockAddr->sin_addr.s_addr == a2._SockAddr->sin_addr.s_addr ) 00166 { 00167 return ( a1.port() < a2.port() ); 00168 } 00169 else 00170 { 00171 return ( a1._SockAddr->sin_addr.s_addr < a2._SockAddr->sin_addr.s_addr ); 00172 } 00173 #endif 00174 } |
|
Comparison == operator.
Definition at line 143 of file inet_address.cpp.
|
|
Definition at line 161 of file inet_address.h. Referenced by CInetAddress(), hostName(), operator=(), setByName(), and setSockAddr(). |
|
Definition at line 162 of file inet_address.h. Referenced by CInetAddress(), init(), internalIPAddress(), ipAddress(), isValid(), NLNET::operator<(), operator=(), NLNET::operator==(), port(), serial(), setByName(), setPort(), setSockAddr(), sockAddr(), and ~CInetAddress(). |
|
Definition at line 163 of file inet_address.h. Referenced by CInetAddress(), init(), isValid(), operator=(), serial(), setByName(), and setSockAddr(). |
|
If true, setSockAddr() always tries to retrieve the host name from the address.
Definition at line 58 of file inet_address.cpp. |