X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Futil.cpp;h=b107f3ccbc7f8cccf4570feda91c578f74802f86;hb=263db488835e22820d79a4ffa46fb892b7837fd4;hp=0783b1da0a8224df57b870ba511eabeda00facc6;hpb=cac118fe88baae4092e18e55736e173d44aa7ad7;p=metaproxy-moved-to-github.git diff --git a/src/util.cpp b/src/util.cpp index 0783b1d..b107f3c 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -1,7 +1,22 @@ -/* $Id: util.cpp,v 1.21 2006-10-02 13:44:48 marc Exp $ - Copyright (c) 2005-2006, Index Data. +/* $Id: util.cpp,v 1.29 2007-05-09 21:23:09 adam Exp $ + Copyright (c) 2005-2007, Index Data. - See the LICENSE file for details +This file is part of Metaproxy. + +Metaproxy is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +Metaproxy is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with Metaproxy; see the file LICENSE. If not, write to the +Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. */ #include "config.hpp" @@ -10,7 +25,8 @@ #include #include #include -#include // for yaz_query_to_wrbuf() +#include +#include #include @@ -19,6 +35,24 @@ namespace mp = metaproxy_1; // Doxygen doesn't like mp::util, so we use this instead namespace mp_util = metaproxy_1::util; +const char * +mp_util::record_composition_to_esn(Z_RecordComposition *comp) +{ + if (comp && comp->which == Z_RecordComp_complex) + { + if (comp->u.complex->generic + && comp->u.complex->generic->elementSpec + && (comp->u.complex->generic->elementSpec->which == + Z_ElementSpec_elementSetName)) + return comp->u.complex->generic->elementSpec->u.elementSetName; + } + else if (comp && comp->which == Z_RecordComp_simple && + comp->u.simple->which == Z_ElementSetNames_generic) + return comp->u.simple->u.generic; + return 0; +} + + std::string mp_util::http_header_value(const Z_HTTP_Header* header, const std::string name) @@ -69,6 +103,32 @@ std::string mp_util::http_headers_debug(const Z_HTTP_Request &http_req) } +void mp_util::http_response(metaproxy_1::Package &package, + const std::string &content, + int http_code) +{ + + Z_GDU *zgdu_req = package.request().get(); + Z_GDU *zgdu_res = 0; + mp::odr odr; + zgdu_res + = odr.create_HTTP_Response(package.session(), + zgdu_req->u.HTTP_Request, + http_code); + + zgdu_res->u.HTTP_Response->content_len = content.size(); + zgdu_res->u.HTTP_Response->content_buf + = (char*) odr_malloc(odr, zgdu_res->u.HTTP_Response->content_len); + + strncpy(zgdu_res->u.HTTP_Response->content_buf, + content.c_str(), zgdu_res->u.HTTP_Response->content_len); + + //z_HTTP_header_add(odr, &hres->headers, + // "Content-Type", content_type.c_str()); + package.response() = zgdu_res; +} + + int mp_util::memcmp2(const void *buf1, int len1, const void *buf2, int len2) { @@ -171,7 +231,7 @@ std::string mp_util::zQueryToString(Z_Query *query) query_str = std::string(wrbuf_buf(w), wrbuf_len(w)); // destroy wrbuf - wrbuf_free(w, 1); + wrbuf_destroy(w); } } @@ -251,10 +311,10 @@ int mp_util::get_or_remove_vhost_otherinfo( { // check virtual host const char *vhost = - yaz_oi_get_string_oidval(otherInformation, - VAL_PROXY, - cat /* categoryValue */, - remove_flag /* delete flag */); + yaz_oi_get_string_oid(otherInformation, + yaz_oid_userinfo_proxy, + cat /* categoryValue */, + remove_flag /* delete flag */); if (!vhost) break; vhosts.push_back(std::string(vhost)); @@ -283,15 +343,24 @@ void mp_util::set_vhost_otherinfo( { int cat; std::list::const_iterator it = vhosts.begin(); + for (cat = 1; it != vhosts.end() ; cat++, it++) { - yaz_oi_set_string_oidval(otherInformation, odr, - VAL_PROXY, cat, it->c_str()); + yaz_oi_set_string_oid(otherInformation, odr, + yaz_oid_userinfo_proxy, cat, it->c_str()); } } +void mp_util::set_vhost_otherinfo( + Z_OtherInformation **otherInformation, ODR odr, + const std::string vhost, const int cat) +{ + yaz_oi_set_string_oid(otherInformation, odr, + yaz_oid_userinfo_proxy, cat, vhost.c_str()); +} + void mp_util::split_zurl(std::string zurl, std::string &host, - std::list &db) + std::list &db) { const char *zurl_cstr = zurl.c_str(); const char *sep = strchr(zurl_cstr, '/');