Testing for all Replace rules in use
[metaproxy-moved-to-github.git] / src / filter_http_client.cpp
index cba6f48..6cb9633 100644 (file)
@@ -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