(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.1.2.5 and 1.5

version 1.1.2.5, 2007/06/18 14:13:07 version 1.5, 2008/12/02 09:00:47
Line 1 
Line 1 
 //%2007////////////////////////////////////////////////////////////////////////  //%LICENSE////////////////////////////////////////////////////////////////
 // //
 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development  // Licensed to The Open Group (TOG) under one or more contributor license
 // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.  // agreements.  Refer to the OpenPegasusNOTICE.txt file distributed with
 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;  // this work for additional information regarding copyright ownership.
 // IBM Corp.; EMC Corporation, The Open Group.  // Each contributor licenses this file to you under the OpenPegasus Open
 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;  // Source License; you may not use this file except in compliance with the
 // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.  // License.
 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;  
 // EMC Corporation; VERITAS Software Corporation; The Open Group.  
 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;  
 // EMC Corporation; Symantec Corporation; The Open Group.  
 // //
 // Permission is hereby granted, free of charge, to any person obtaining a copy  // Permission is hereby granted, free of charge, to any person obtaining a
 // of this software and associated documentation files (the "Software"), to  // copy of this software and associated documentation files (the "Software"),
 // deal in the Software without restriction, including without limitation the  // to deal in the Software without restriction, including without limitation
 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or  // the rights to use, copy, modify, merge, publish, distribute, sublicense,
 // sell copies of the Software, and to permit persons to whom the Software is  // and/or sell copies of the Software, and to permit persons to whom the
 // furnished to do so, subject to the following conditions:  // Software is furnished to do so, subject to the following conditions:
 // //
 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN  // The above copyright notice and this permission notice shall be included
 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED  // in all copies or substantial portions of the Software.
 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT  
 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR  
 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT  
 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  
 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION  
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  
 // //
 //==============================================================================  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
   // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
   // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
   // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
   // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
   // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
   // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   //
   //////////////////////////////////////////////////////////////////////////
 // //
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
  
Line 389 
Line 387 
  
 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 434 
 #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;
   
           if ((octet != 4) && (src[i++] != '.'))
               return false;
  
     return  1 == convertTextToBinary(AT_IPV4, (const char*) addr,          if ((octet == 4) && (src[i] != ':') && src[i] != char(0))
                      (void*)&iaddr);              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.1.2.5  
changed lines
  Added in v.1.5

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2