X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;f=src%2Ffilter_z3950_client.cpp;h=6ea58e4f2351d14e2f72d40f6aa7fb6775965158;hb=f3e215cc00b02e3d92016f095295af2ba4649e2f;hp=12fcb8c48173923f0f66a8c9eaa8b4b36df333bb;hpb=efd02482054ac750a9dcd3d10fa349e26c5e7e65;p=metaproxy-moved-to-github.git diff --git a/src/filter_z3950_client.cpp b/src/filter_z3950_client.cpp index 12fcb8c..6ea58e4 100644 --- a/src/filter_z3950_client.cpp +++ b/src/filter_z3950_client.cpp @@ -35,6 +35,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include #include #include +#include #include #include @@ -486,6 +487,8 @@ void yf::Z3950Client::Rep::send_and_receive(Package &package, if (gdu->u.z3950->which == Z_APDU_close) c->m_has_closed = true; + Z_APDU *apdu = gdu->u.z3950; + // prepare connect c->m_time_elapsed = 0; c->m_waiting = true; @@ -510,7 +513,27 @@ void yf::Z3950Client::Rep::send_and_receive(Package &package, { return; } - + const char *peer_name2 = package.origin().get_address().c_str(); + mp::odr odr; + if (apdu->which == Z_APDU_initRequest && peer_name2) + { + Z_OtherInformation **oi = &apdu->u.initRequest->otherInfo; + char *peer_name1 = + yaz_oi_get_string_oid(oi, yaz_oid_userinfo_client_ip, 1, 1); + char *pcomb = (char *) + odr_malloc(odr, (peer_name1 ? strlen(peer_name1) : 0) + + strlen(peer_name2) + 4); + strcpy(pcomb, ""); + if (peer_name1) + { + strcat(pcomb, peer_name1); + strcat(pcomb, ", "); + } + strcat(pcomb, peer_name2); + yaz_oi_set_string_oid(&apdu->u.initRequest->otherInfo, + odr, yaz_oid_userinfo_client_ip, + 1, pcomb); + } // prepare response c->m_time_elapsed = 0; c->m_waiting = true;