| Return Type | Function name | Arguments |
|---|---|---|
| bool | IsUrl | (hzUrl&,unsigned int&,hzChain::Iter&,) |
Declared and defined in file: hzUrl.cpp
Function Logic:
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 ;
}