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 ; }