Return TypeFunction nameArguments
boolIsUrl(hzUrl&,unsigned int&,hzChain::Iter&,)

Declared and defined in file: hzUrl.cpp

Function Logic:

0:START 1:hzUrl::Clear nLen hzChain::Iter::eof 2:ci.eof() 3:Return false 4:!xi.eof()&&*xi<=(char)32; 5:*xi=='h' 6:xi==http:// 7:items nLen xi 8:xi==https:// 9:items nLen xi 10:!xi.eof()&&IsUrlnorm(*xi); 11:hzChain::AddByte 12:*xi==(char)46 13:items items 14:nPeriodCont==2 15:Return false 16:nPeriodCont items 17:nAlpha<3||nPeriod<2 18:Return false 19:*xi==(char)58 20:items IsDigit 21:!IsDigit(*xi) 22:Return false 23:!xi.eof()&&IsDigit(*xi); 24:nPort nPort 25:nPort>0x10000 26:Return false 27:*xi==(char)47 28:!xi.eof()&&IsUrlnorm(*xi); 29:*xi==(char)46 30:items 31:items 32:*xi==(char)63 33:!xi.eof()&&IsUrlresv(*xi); 34:*xi==(char)37 35:items IsHex 36:!IsHex(*xi) 37:Return false 38:items IsHex 39:!IsHex(*xi) 40:Return false 41:nLen 42:*xi<=(char)32 43:items 44:*xi==(char)46 45:items 46:S url hzUrl::Whole 47:!url.Whole() 48:Return false 49:hzString::Length nLen 50:Return false

Function body:

bool IsUrl (hzUrl& url, unsigned int& nLen, hzChain::Iter& ci)
{
   _hzfunc("IsUrl") ;
   hzChain     W ;
   chIter      xi ;
   hzString    S ;
   uint32_t    nPeriod = 0;
   uint32_t    nPeriodCont = 0;
   uint32_t    nAlpha = 0;
   uint32_t    nPort = 0;
   url.Clear() ;
   nLen = 0;
   if (ci.eof())
       return false ;
   for (xi = ci ; !xi.eof() && *xi <&eq; CHAR_SPACE ; xi++) ;
   if (*xi == ''h'')
   {
       if (xi == "http://")
           { W << "http://" ; nLen = 7; xi += 7; }
       if (xi == "https://")
           { W << "https://" ; nLen = 8; xi += 8; }
   }
   for (; !xi.eof() && IsUrlnorm(*xi) ; xi++)
   {
       W.AddByte(*xi) ;
       if (*xi == CHAR_PERIOD)
       {
           nPeriod++ ;
           nPeriodCont++ ;
           if (nPeriodCont == 2)
               return false ;
       }
       else
       {
           nPeriodCont = 0;
           nAlpha++ ;
       }
   }
   if (nAlpha < 3|| nPeriod < 2)
       return false ;
   if (*xi == CHAR_COLON)
   {
       xi++ ;
       if (!IsDigit(*xi))
           return false ;
       for (nPort = 0; !xi.eof() && IsDigit(*xi) ; xi++)
       {
           nPort *= 10;nPort += (*xi - ''0'');
       }
       if (nPort > 0x10000)
           return false ;
   }
   if (*xi == CHAR_FWSLASH)
   {
       for (xi++ ; !xi.eof() && IsUrlnorm(*xi) ; xi++)
       {
           if (*xi == CHAR_PERIOD)
               nPeriod++ ;
           else
               nAlpha++ ;
       }
       if (*xi == CHAR_QUERY)
       {
           for (xi++ ; !xi.eof() && IsUrlresv(*xi) ; xi++)
           {
               if (*xi == CHAR_PERCENT)
               {
                   xi++ ;
                   if (!IsHex(*xi))
                       return false ;
                   xi++ ;
                   if (!IsHex(*xi))
                       return false ;
                   nLen += 2;
               }
           }
       }
   }
   if (*xi <&eq; CHAR_SPACE)
   {
       xi-- ;
       if (*xi == CHAR_PERIOD)
           xi-- ;
   }
   S = W ;
   url = *S ;
   if (!url.Whole())
       return false ;
   nLen = S.Length() ;
   return false ;
}