int TWebNetCltV::FetchUrl(const PUrl& Url, const int& _FetchId, TStr ConnUid){ IAssert(Url->IsOk(usHttp)); //FetchingP=true; // prepare fetch-id & http-request int FetchId=_FetchId; if (_FetchId==-1){ FetchId=GetNextFetchId();} PHttpRq HttpRq=THttpRq::New(Url, FetchId); // prepare host-port-string TStr HostNm=Url->GetHostNm(); int PortN=Url->GetPortN(); TStr ConnIdStr=TWebNetClt::GetConnIdStr(HostNm, PortN, ConnUid); // check if already connected PWebNetClt WebNetClt; if (IsGetWebNetClt(ConnIdStr, WebNetClt)){ if (WebNetClt->IsConnected()){ // already connected; send http-request WebNetClt->SendHttpRq(HttpRq); } else { // not connected; process of connecting WebNetClt->PushToWaitQ(FetchId, HttpRq); } } else { // not connected; connect //SaveToErrLog((TStr("NetCltConnect: ")+ConnIdStr).CStr()); WebNetClt=TWebNetClt::New(HostNm, PortN, this, ConnIdStr, Notify); AddWebNetClt(ConnIdStr, WebNetClt); WebNetClt->PushToWaitQ(FetchId, HttpRq); } //FetchingP=false; return FetchId; }
void TWebPgFetchEvent::OnGetHost(const PSockHost& SockHost) { if (SockHost->IsOk()){ UrlStrV.Add(CurUrl->GetUrlStr()); OppSockClosed=false; SockMem.Clr(); Sock=TSock::New(this); int PortN; if (ProxyStr.Empty()){ PortN=CurUrl->GetPortN(); } else { TStr ProxyHostNm; TStr PortNStr; ProxyStr.SplitOnCh(ProxyHostNm, ':', PortNStr); PortN=PortNStr.GetInt(80); } Sock->PutTimeOut(TimeOutMSecs); Sock->Connect(SockHost, PortN); } else { OnFetchError("Invalid Host"); } }