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;
}
Ejemplo n.º 2
0
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");
  }
}