1 /* $Id: filter_zeerex_explain.cpp,v 1.1 2006-12-28 14:59:44 marc Exp $
2 Copyright (c) 2005-2006, Index Data.
4 See the LICENSE file for details
11 #include "gduutil.hpp"
12 #include "sru_util.hpp"
13 #include "filter_zeerex_explain.hpp"
16 #include <yaz/z-core.h>
18 #include <yaz/pquery.h>
20 #include <boost/thread/mutex.hpp>
27 namespace mp = metaproxy_1;
28 namespace mp_util = metaproxy_1::util;
29 namespace yf = mp::filter;
32 namespace metaproxy_1 {
34 class ZeeRexExplain::Impl {
36 void configure(const xmlNode *xmlnode);
37 void process(metaproxy_1::Package &package) const;
43 yf::ZeeRexExplain::ZeeRexExplain() : m_p(new Impl)
47 yf::ZeeRexExplain::~ZeeRexExplain()
48 { // must have a destructor because of boost::scoped_ptr
51 void yf::ZeeRexExplain::configure(const xmlNode *xmlnode)
53 m_p->configure(xmlnode);
56 void yf::ZeeRexExplain::process(mp::Package &package) const
58 m_p->process(package);
61 void yf::ZeeRexExplain::Impl::configure(const xmlNode *xmlnode)
65 void yf::ZeeRexExplain::Impl::process(mp::Package &package) const
67 Z_GDU *zgdu_req = package.request().get();
69 // ignoring all non HTTP_Request packages
70 if (!zgdu_req || !(zgdu_req->which == Z_GDU_HTTP_Request)){
75 // only working on HTTP_Request packages now
77 mp::odr odr_de(ODR_DECODE);
78 Z_SRW_PDU *sru_pdu_req = 0;
80 mp::odr odr_en(ODR_ENCODE);
81 //Z_SRW_PDU *sru_pdu_res = 0;
82 Z_SRW_PDU *sru_pdu_res = yaz_srw_get(odr_en, Z_SRW_explain_response);
89 // if SRU package could not be decoded, send minimal explain and
91 if (! (sru_pdu_req = mp_util::decode_sru_request(package, odr_de, odr_en,
93 charset, stylesheet)))
95 mp_util::build_simple_explain(package, odr_en, sru_pdu_res, 0);
96 mp_util::build_sru_response(package, odr_en, soap,
97 sru_pdu_res, charset, stylesheet);
98 package.session().close();
103 // SRU request package translation to Z3950 package
105 // std::cout << *sru_pdu_req << "\n";
107 // std::cout << "SRU empty\n";
110 if (sru_pdu_req->which != Z_SRW_explain_request){
111 // Let pass all other SRU actions
115 // except valid SRU explain request, construct ZeeRex Explain response
117 Z_SRW_explainRequest *er_req = sru_pdu_req->u.explain_request;
119 mp_util::build_simple_explain(package, odr_en, sru_pdu_res, er_req);
121 mp_util::build_sru_response(package, odr_en, soap,
122 sru_pdu_res, charset, stylesheet);
127 // should never arrive here
128 package.session().close();
134 static mp::filter::Base* filter_creator()
136 return new mp::filter::ZeeRexExplain;
140 struct metaproxy_1_filter_struct metaproxy_1_filter_zeerex_explain = {
151 * indent-tabs-mode: nil
152 * c-file-style: "stroustrup"
154 * vim: shiftwidth=4 tabstop=8 expandtab