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

Diff for /pegasus/src/Pegasus/Common/HostAddress.cpp between version 1.2 and 1.3

version 1.2, 2007/06/26 20:26:13 version 1.3, 2007/10/31 07:57:45
Line 389 
Line 389 
  
 void HostAddress::_parseAddress() void HostAddress::_parseAddress()
 { {
     if (_hostAddrStr == String::EMPTY)      if (_hostAddrStr.size() == 0)
     {  
         return;         return;
     }  
     if ((_isValid = isValidIPV6Address(_hostAddrStr)))      if (isValidIPV4Address(_hostAddrStr))
     {     {
         _addrType = AT_IPV6;          _isValid = true;
           _addrType = AT_IPV4;
     }     }
     else if( (_isValid = isValidIPV4Address(_hostAddrStr)))      else if (isValidIPV6Address(_hostAddrStr))
     {     {
         _addrType = AT_IPV4;          _isValid = true;
           _addrType = AT_IPV6;
     }     }
     else if((_isValid = isValidHostName(_hostAddrStr)))      else if (isValidHostName(_hostAddrStr))
     {     {
           _isValid = true;
         _addrType = AT_HOSTNAME;         _addrType = AT_HOSTNAME;
     }     }
 } }
  
 Boolean HostAddress::isValidIPV6Address (const String &ipv6Address) Boolean HostAddress::isValidIPV6Address (const String &ipv6Address)
 { {
     int i = 0;      const Uint16* p = (const Uint16*)ipv6Address.getChar16Data();
     while (ipv6Address[i])      int numColons = 0;
     {  
         if (!isascii(ipv6Address[i++]))      while (*p)
         {         {
           if (*p > 127)
             return false;             return false;
   
           if (*p == ':')
               numColons++;
   
           p++;
         }         }
     }  
       // No need to check whether IPV6 if no colons found.
   
       if (numColons == 0)
           return false;
  
     CString addr = ipv6Address.getCString();     CString addr = ipv6Address.getCString();
 #ifdef PEGASUS_ENABLE_IPV6 #ifdef PEGASUS_ENABLE_IPV6
Line 424 
Line 436 
 #else #else
     char iaddr[PEGASUS_IN6_ADDR_SIZE];     char iaddr[PEGASUS_IN6_ADDR_SIZE];
 #endif #endif
     return  1 == convertTextToBinary(AT_IPV6, (const char*) addr,      return  convertTextToBinary(AT_IPV6, (const char*)addr, (void*)&iaddr) == 1;
                      (void*)&iaddr);  
 } }
  
 Boolean HostAddress::isValidIPV4Address (const String &ipv4Address) Boolean HostAddress::isValidIPV4Address (const String &ipv4Address)
 { {
     int i = 0;      const Uint16* src = (const Uint16*)ipv4Address.getChar16Data();
     while (ipv4Address[i])      Uint16 octetValue[4] = {0};
   
       for (Uint32 octet = 1, i = 0; octet <= 4; octet++)
     {     {
         if (!isascii(ipv4Address[i++]))          int j = 0;
   
           if (!(isascii(src[i]) && isdigit(src[i])))
               return false;
   
           while (isascii(src[i]) && isdigit(src[i]))
         {         {
               if (j == 3)
             return false;             return false;
         }  
               octetValue[octet-1] = octetValue[octet-1] * 10 + (src[i] - '0');
               i++;
               j++;
     }     }
  
     CString addr = ipv4Address.getCString();          if (octetValue[octet-1] > 255)
     struct in_addr iaddr;              return false;
  
     return  1 == convertTextToBinary(AT_IPV4, (const char*) addr,          if ((octet != 4) && (src[i++] != '.'))
                      (void*)&iaddr);              return false;
   
           if ((octet == 4) && (src[i] != ':') && src[i] != char(0))
               return false;
 } }
  
 Boolean HostAddress::isValidHostName (const String &hostName)      return true;
   }
   
   Boolean HostAddress::isValidHostName (const String &hostName_)
 { {
       const Uint16* hostName = (const Uint16*)hostName_.getChar16Data();
   
     Uint32 i = 0;     Uint32 i = 0;
     Boolean expectHostSegment = true;     Boolean expectHostSegment = true;
     Boolean hostSegmentIsNumeric;     Boolean hostSegmentIsNumeric;


Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2