X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Ffilter_http_client.cpp;h=e3d611675460d35b53866e4a90c9813b84a253c3;hb=98db99f0e90608d5dcdd0e6adeea38f9d6936e4e;hp=9e9512a4a6992db55c5c0d38228d10460e60d979;hpb=99d83cbd75e1a9ff8e0275bd081afc514555fb4b;p=metaproxy-moved-to-github.git diff --git a/src/filter_http_client.cpp b/src/filter_http_client.cpp index 9e9512a..e3d6116 100644 --- a/src/filter_http_client.cpp +++ b/src/filter_http_client.cpp @@ -52,6 +52,7 @@ namespace metaproxy_1 { std::string default_host; int max_redirects; bool x_forwarded_for; + bool bind_host; Rep(); }; } @@ -61,6 +62,7 @@ yf::HTTPClient::Rep::Rep() { max_redirects = 0; x_forwarded_for = false; + bind_host = false; } yf::HTTPClient::HTTPClient() : m_p(new Rep) @@ -114,24 +116,38 @@ void yf::HTTPClient::Rep::proxy(mp::Package &package) } else uri = hreq->path; - Z_HTTP_Response *http_response = 0; - if (uri.length()) - http_response = - yaz_url_exec(yaz_url, uri.c_str(), hreq->method, - hreq->headers, hreq->content_buf, - hreq->content_len); - if (http_response) + + if (bind_host) { - 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; + std::string host = package.origin().get_bind_address(); + uri.append(" "); + uri.append(host); } - else + if (!uri.length()) { res_gdu = o.create_HTTP_Response_details( package.session(), - hreq, 502, - yaz_url_get_error(yaz_url)); + hreq, 404, + "http_client: no target URI specified"); + } + else + { + Z_HTTP_Response * http_response = + yaz_url_exec(yaz_url, uri.c_str(), hreq->method, + hreq->headers, hreq->content_buf, + hreq->content_len); + 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 + { + res_gdu = o.create_HTTP_Response_details( + package.session(), + hreq, 502, yaz_url_get_error(yaz_url)); + } } package.response() = res_gdu; yaz_url_destroy(yaz_url); @@ -178,6 +194,10 @@ void mp::filter::HTTPClient::configure(const xmlNode * ptr, bool test_only, { m_p->x_forwarded_for = mp::xml::get_bool(ptr, 0); } + else if (!strcmp((const char *) ptr->name, "bind_host")) + { + m_p->bind_host = mp::xml::get_bool(ptr, 0); + } else { throw mp::filter::FilterException