X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;f=src%2Ffilter_http_client.cpp;h=6cb963352dc173b72eb9274a0a27de25de74fea8;hb=1792cb2b795187eb86cbd9780e0d7b71ea3a270c;hp=cba6f48a70d2b8315824abdb132be46c62aa9aae;hpb=519cf04ede8ce910b4048b98c8150adb8d983204;p=metaproxy-moved-to-github.git diff --git a/src/filter_http_client.cpp b/src/filter_http_client.cpp index cba6f48..6cb9633 100644 --- a/src/filter_http_client.cpp +++ b/src/filter_http_client.cpp @@ -71,19 +71,23 @@ void yf::HTTPClient::Rep::proxy(mp::Package &package) Z_GDU *res_gdu = 0; mp::odr o; yaz_url_t yaz_url = yaz_url_create(); - const char *h = strchr(hreq->path, '/'); - std::string uri; + const char *http_proxy = + z_HTTP_header_remove(&hreq->headers, "X-Metaproxy-Proxy"); - if (proxy_host.length()) - yaz_url_set_proxy(yaz_url, proxy_host.c_str()); + if (!http_proxy) + http_proxy = proxy_host.c_str(); - if (h > hreq->path+1 && !memcmp(h-1, "://", 3)) - uri = hreq->path; /* we have a host already */ - else + if (*http_proxy) + yaz_url_set_proxy(yaz_url, http_proxy); + + std::string uri; + if (hreq->path[0] == '/') { if (default_host.length()) uri = default_host + hreq->path; } + else + uri = hreq->path; Z_HTTP_Response *http_response = 0; if (uri.length()) http_response = @@ -93,6 +97,7 @@ void yf::HTTPClient::Rep::proxy(mp::Package &package) if (http_response) { res_gdu = o.create_HTTP_Response(package.session(), hreq, 200); + z_HTTP_header_remove(&http_response->headers, "Transfer-Encoding"); res_gdu->u.HTTP_Response = http_response; } else