Commit a8c0eeb1 authored by jan.koester's avatar jan.koester
Browse files

fixed

parent 7e22374e
Loading
Loading
Loading
Loading
+28 −13
Original line number Diff line number Diff line
@@ -521,6 +521,15 @@ const std::vector<char> libhttppp::HttpClient::_h2Request(

const std::vector<char> libhttppp::HttpClient::Get(libhttppp::HttpRequest &nreq)
{
    std::stringstream host;
    host << _url.getHost() << ":" << _url.getPort();

    nreq.setHeaderData("host")->push_back(host.str());
    nreq.setRequestType(GETREQUEST);

    if (nreq.getRequestURL().empty())
      nreq.setRequestURL(_url.getPath());

    // HTTP/2: delegate to binary framing path
    if (_isH2) {
        return _h2Request("GET", nreq);
@@ -532,14 +541,6 @@ const std::vector<char> libhttppp::HttpClient::Get(libhttppp::HttpRequest &nreq)
        // ---------------------------------------------------------
        // 0) Build request headers
        // ---------------------------------------------------------
        std::stringstream host;
        host << _url.getHost() << ":" << _url.getPort();

        nreq.setHeaderData("host")->push_back(host.str());
        nreq.setRequestType(GETREQUEST);

        if (nreq.getRequestURL().empty())
            nreq.setRequestURL(_url.getPath());
        if (nreq.getRequestVersion().empty())
            nreq.setRequestVersion(HTTPVERSION(1.1));

@@ -2321,6 +2322,16 @@ int libhttppp::HttpRequest::getRequestType(){
}

const std::string &libhttppp::HttpRequest::getRequestURL(){
  if (_cachedRequestURL.empty() && !_cachedRequest.empty()) {
    _cachedRequestURL = extractPath(_cachedRequest);
  }
  if (_cachedRequestURL.empty()) {
    auto *hPath = getHeaderData(":path");
    if (hPath && hPath->getfirstValue()) {
      _cachedRequest = hPath->getfirstValue()->getvalue();
      _cachedRequestURL = extractPath(_cachedRequest);
    }
  }
  return _cachedRequestURL;
}

@@ -2368,6 +2379,7 @@ void libhttppp::HttpRequest::setRequestData(const std::string &data, size_t len)
  _cachedRequest.clear();
  _cachedRequest.resize(len);
  _cachedRequest.insert(0,data);
  _cachedRequestURL = extractPath(_cachedRequest);
  // Update :path pseudo-header in _firstHeaderData
  auto *hPath = setHeaderData(":path");
  if (hPath) { hPath->clear(); hPath->push_back(_cachedRequest); }
@@ -2422,13 +2434,16 @@ void libhttppp::HttpRequest::setRequestType(int req){
}

void libhttppp::HttpRequest::setRequestURL(const std::string &url){
  if(!url.empty())
    _cachedRequestURL=url;
  else
  if(!url.empty()){
    _cachedRequest = url;
    _cachedRequestURL = extractPath(url);
  }else{
    _cachedRequest.clear();
    _cachedRequestURL.clear();
  // Update :path pseudo-header in _firstHeaderData
  }
  // Update :path pseudo-header in _firstHeaderData with the full target
  auto *hPath = setHeaderData(":path");
  if (hPath) { hPath->clear(); hPath->push_back(_cachedRequestURL); }
  if (hPath) { hPath->clear(); hPath->push_back(_cachedRequest); }
}