(file) Return to System.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

Diff for /pegasus/src/Pegasus/Common/System.cpp between version 1.78 and 1.80

version 1.78, 2010/04/09 08:23:14 version 1.80, 2012/07/03 15:23:11
Line 60 
Line 60 
  
 Boolean System::bindVerbose = false; Boolean System::bindVerbose = false;
  
 MutexType System::_mutexForGetHostName = PEGASUS_MUTEX_INITIALIZER;  Mutex System::_mutexForGetHostName;
   
   Mutex System::_mutexForGetFQHN;
   
   String System::_hostname;
   String System::_fullyQualifiedHostname;
  
 MutexType System::_mutexForGetFQHN = PEGASUS_MUTEX_INITIALIZER;  
  
 Boolean System::copyFile(const char* fromPath, const char* toPath) Boolean System::copyFile(const char* fromPath, const char* toPath)
 { {
Line 247 
Line 251 
  
 String System::getHostName() String System::getHostName()
 { {
     static String _hostname;  
   
     // Use double-checked locking pattern to avoid overhead of     // Use double-checked locking pattern to avoid overhead of
     // mutex on subsequent calls.     // mutex on subsequent calls.
  
     if (0 == _hostname.size())     if (0 == _hostname.size())
     {     {
         mutex_lock(&_mutexForGetHostName);          AutoMutex lock(_mutexForGetHostName);
  
         if (0 == _hostname.size())         if (0 == _hostname.size())
         {         {
Line 265 
Line 267 
             hostname[sizeof(hostname)-1] = 0;             hostname[sizeof(hostname)-1] = 0;
             _hostname.assign(hostname);             _hostname.assign(hostname);
         }         }
   
         mutex_unlock(&_mutexForGetHostName);  
     }     }
  
     return _hostname;     return _hostname;
Line 337 
Line 337 
  
 String System::getFullyQualifiedHostName() String System::getFullyQualifiedHostName()
 { {
     static String _hostname;  
     // Use double-checked locking pattern to avoid overhead of     // Use double-checked locking pattern to avoid overhead of
     // mutex on subsequent calls.     // mutex on subsequent calls.
  
     if (0 == _hostname.size())      if (0 == _fullyQualifiedHostname.size())
     {     {
         mutex_lock(&_mutexForGetFQHN);          AutoMutex lock(_mutexForGetFQHN);
  
         if (0 == _hostname.size())          if (0 == _fullyQualifiedHostname.size())
         {  
             try  
             {             {
                 _hostname = _getFullyQualifiedHostName();              _fullyQualifiedHostname = _getFullyQualifiedHostName();
             }             }
             catch (...)  
             {  
                 mutex_unlock(&_mutexForGetFQHN);  
                 throw;  
             }             }
   
       return _fullyQualifiedHostname;
         }         }
  
         mutex_unlock(&_mutexForGetFQHN);  void System::setHostName(const String & hostName)
   {
       AutoMutex lock(_mutexForGetHostName);
       _hostname.assign(hostName);
     }     }
  
     return _hostname;  void System::setFullyQualifiedHostName(const String & fullHostName)
   {
       AutoMutex lock(_mutexForGetFQHN);
       _fullyQualifiedHostname.assign(fullHostName);
 } }
  
   
 Boolean System::getHostIP(const String &hostName, int *af, String &hostIP) Boolean System::getHostIP(const String &hostName, int *af, String &hostIP)
 { {
       CString hostNameCString = hostName.getCString();
       const char* hostNamePtr;
   
       // In case hostName equals _hostname or _fullyQualifiedHostname
       // we need to use the system-supplied hostname instead for IP resolution
       // _hostname or _fullyQualifiedHostname might be configured values
       // which cannot be resolved by the system to an IP address
       if (String::equalNoCase(hostName, _hostname) ||
           String::equalNoCase(hostName, _fullyQualifiedHostname))
       {
           char localHostName[PEGASUS_MAXHOSTNAMELEN];
           gethostname(localHostName, PEGASUS_MAXHOSTNAMELEN);
   
           hostNamePtr= (const char*) localHostName;
       }
       else
       {
           hostNamePtr = hostNameCString;
       }
 #ifdef PEGASUS_ENABLE_IPV6 #ifdef PEGASUS_ENABLE_IPV6
     struct addrinfo *info, hints;     struct addrinfo *info, hints;
     memset (&hints, 0, sizeof(struct addrinfo));     memset (&hints, 0, sizeof(struct addrinfo));
Line 375 
Line 396 
     hints.ai_family = *af;     hints.ai_family = *af;
     hints.ai_protocol = IPPROTO_TCP;     hints.ai_protocol = IPPROTO_TCP;
     hints.ai_socktype = SOCK_STREAM;     hints.ai_socktype = SOCK_STREAM;
     if (!getAddrInfo(hostName.getCString(), 0, &hints, &info))      if (!getAddrInfo(hostNamePtr, 0, &hints, &info))
     {     {
         char ipAddress[PEGASUS_INET_ADDRSTR_LEN];         char ipAddress[PEGASUS_INET_ADDRSTR_LEN];
         HostAddress::convertBinaryToText(info->ai_family,         HostAddress::convertBinaryToText(info->ai_family,
Line 392 
Line 413 
     hints.ai_family = *af;     hints.ai_family = *af;
     hints.ai_protocol = IPPROTO_TCP;     hints.ai_protocol = IPPROTO_TCP;
     hints.ai_socktype = SOCK_STREAM;     hints.ai_socktype = SOCK_STREAM;
     if (!getAddrInfo(hostName.getCString(), 0, &hints, &info))      if (!getAddrInfo(hostNamePtr, 0, &hints, &info))
     {     {
         char ipAddress[PEGASUS_INET6_ADDRSTR_LEN];         char ipAddress[PEGASUS_INET6_ADDRSTR_LEN];
         HostAddress::convertBinaryToText(info->ai_family,         HostAddress::convertBinaryToText(info->ai_family,
Line 410 
Line 431 
     struct hostent* hostEntry;     struct hostent* hostEntry;
     struct in_addr inaddr;     struct in_addr inaddr;
     String ipAddress;     String ipAddress;
     CString hostNameCString = hostName.getCString();  
     const char* hostNamePtr = hostNameCString;  
  
     char hostEntryBuffer[8192];     char hostEntryBuffer[8192];
     struct hostent hostEntryStruct;     struct hostent hostEntryStruct;
Line 668 
Line 687 
  
 Boolean System::isLocalHost(const String &hostName) Boolean System::isLocalHost(const String &hostName)
 { {
       // if value of hostName is "localhost" or equals the value of _hostname or
       // equals the value of _fullyQualifiedHostname we can safely assume it to
       // be the local host
       if (String::equalNoCase(hostName,String("localhost")) ||
           String::equalNoCase(hostName, _hostname) ||
           String::equalNoCase(hostName, _fullyQualifiedHostname))
       {
           return true;
       }
   
 // Get all ip addresses on the node and compare them with the given hostname. // Get all ip addresses on the node and compare them with the given hostname.
 #ifdef PEGASUS_ENABLE_IPV6 #ifdef PEGASUS_ENABLE_IPV6
     CString csName = hostName.getCString();     CString csName = hostName.getCString();
Line 808 
Line 837 
  
     if (!hostNameIsIPNotation)  // if hostname is not an IP address     if (!hostNameIsIPNotation)  // if hostname is not an IP address
     {     {
         // localhost ?  
         if (String::equalNoCase(hostName,String("localhost"))) return true;  
         char localHostName[PEGASUS_MAXHOSTNAMELEN];         char localHostName[PEGASUS_MAXHOSTNAMELEN];
         CString cstringLocalHostName = System::getHostName().getCString();         CString cstringLocalHostName = System::getHostName().getCString();
         strcpy(localHostName, (const char*) cstringLocalHostName);         strcpy(localHostName, (const char*) cstringLocalHostName);


Legend:
Removed from v.1.78  
changed lines
  Added in v.1.80

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2