AC_MSG_ERROR([YAZ++ development libraries missing])
fi
CPPFLAGS="$YAZPPINC $CPPFLAGS"
-AC_MSG_CHECKING([if YAZ is version 4.2.50 or later])
+AC_MSG_CHECKING([if YAZ is version 4.2.59 or later])
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[#include <yaz/yaz-version.h>]],
[[
-#if YAZ_VERSIONL < 0x40232
+#if YAZ_VERSIONL < 0x4023B
#error too old
#endif
]])],
Maintainer: Adam Dickmeiss <adam@indexdata.dk>
Priority: extra
Build-Depends: debhelper (>= 5),
- libyaz4-dev (>= 4.2.50),
+ libyaz4-dev (>= 4.2.59),
libyazpp5-dev (>= 1.4.1),
libxslt1-dev,
libboost-dev,
## Copyright (C) 2005-2013 Index Data
pkginclude_HEADERS= filter.hpp origin.hpp package.hpp \
- router.hpp session.hpp util.hpp xmlutil.hpp router_chain.hpp
+ router.hpp router_chain.hpp router_xml.hpp \
+ session.hpp util.hpp xmlutil.hpp
--- /dev/null
+/* This file is part of Metaproxy.
+ Copyright (C) 2005-2013 Index Data
+
+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 this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef ROUTER_XML_HPP
+#define ROUTER_XML_HPP
+
+#include <metaproxy/router.hpp>
+
+#include <libxml/tree.h>
+#include <boost/scoped_ptr.hpp>
+
+namespace metaproxy_1
+{
+ class RouterXML : public metaproxy_1::Router
+ {
+ class Rep;
+ class Route;
+ class Pos;
+ public:
+ RouterXML(xmlDocPtr doc,
+ bool test_only, const char *file_include_path);
+ RouterXML(std::string xmlconf,
+ bool test_only);
+
+ ~RouterXML();
+
+ virtual RoutePos *createpos() const;
+ void start();
+ void stop();
+ private:
+ boost::scoped_ptr<Rep> m_p;
+ };
+
+};
+#endif
+
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * c-file-style: "Stroustrup"
+ * indent-tabs-mode: nil
+ * End:
+ * vim: shiftwidth=4 tabstop=8 expandtab
+ */
+
Source: metaproxy-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-root
Prefix: %{_prefix} /etc/metaproxy
-BuildRequires: pkgconfig, libyaz4-devel >= 4.2.50, libyazpp5-devel >= 1.4.1
+BuildRequires: pkgconfig, libyaz4-devel >= 4.2.59, libyazpp5-devel >= 1.4.1
BuildRequires: libxslt-devel, boost-devel
Conflicts: cf-engine <= 2.12.5
Packager: Adam Dickmeiss <adam@indexdata.dk>
bin_SCRIPTS = metaproxy-config
filter_src = \
- factory_filter.cpp factory_filter.hpp \
- factory_static.cpp factory_static.hpp \
filter_auth_simple.cpp filter_auth_simple.hpp \
filter_backend_test.cpp filter_backend_test.hpp \
filter_bounce.cpp filter_bounce.hpp \
filter_virt_db.cpp filter_virt_db.hpp \
filter_z3950_client.cpp filter_z3950_client.hpp \
filter_zeerex_explain.cpp filter_zeerex_explain.hpp \
- filter_zoom.cpp filter_zoom.hpp \
- router_flexml.hpp router_flexml.cpp
+ filter_zoom.cpp filter_zoom.hpp
lib_LTLIBRARIES = libmetaproxy.la
libmetaproxy_la_LDFLAGS = -version-info 4:0:0 -export-dynamic
libmetaproxy_la_SOURCES = \
+ factory_filter.cpp factory_filter.hpp \
+ factory_static.cpp factory_static.hpp \
filter.cpp \
gduutil.cpp gduutil.hpp \
origin.cpp \
util.cpp \
html_parser.hpp html_parser.cpp \
router_chain.cpp \
+ router_flexml.hpp router_flexml.cpp \
+ router_xml.cpp \
xmlutil.cpp
libmetaproxy_la_LIBADD = $(YAZPPLALIB) \
return (it->second());
}
-bool mp::FactoryFilter::have_dl_support()
-{
-#if HAVE_DLFCN_H
- return true;
-#else
- return false;
-#endif
-}
-
bool mp::FactoryFilter::add_creator_dl(const std::string &fi,
const std::string &path)
{
bool add_creator_dl(const std::string &fi, const std::string &path);
- bool have_dl_support();
-
class NotFound : public std::runtime_error {
public:
NotFound(const std::string msg);
mp::FactoryStatic::FactoryStatic()
{
#ifdef HAVE_DLFCN_H
+#else
struct metaproxy_1_filter_struct *buildins[] = {
&metaproxy_1_filter_auth_simple,
&metaproxy_1_filter_backend_test,
Z_GDU *res_gdu = 0;
mp::odr o;
yaz_url_t yaz_url = yaz_url_create();
- std::string uri;
+ const char *http_proxy =
+ z_HTTP_header_remove(&hreq->headers, "X-Metaproxy-Proxy");
+
+ if (!http_proxy)
+ http_proxy = proxy_host.c_str();
- if (proxy_host.length())
- yaz_url_set_proxy(yaz_url, proxy_host.c_str());
+ if (*http_proxy)
+ yaz_url_set_proxy(yaz_url, http_proxy);
+ std::string uri;
if (hreq->path[0] == '/')
{
if (default_host.length())
if (http_response)
{
res_gdu = o.create_HTTP_Response(package.session(), hreq, 200);
- Z_HTTP_Header **hp = &http_response->headers;
- while (*hp)
- {
- if (!yaz_matchstr((*hp)->name, "Transfer-Encoding"))
- *hp = (*hp)->next;
- else
- hp = &(*hp)->next;
- }
+ z_HTTP_header_remove(&http_response->headers, "Transfer-Encoding");
res_gdu->u.HTTP_Response = http_response;
}
else
mp::odr &odr_en,
Z_SRW_PDU *sru_pdu_res,
Z_SRW_searchRetrieveRequest const *sr_req,
- std::string zurl
+ std::string zurl,
+ std::string db_append
) const;
bool z3950_present_request(
bool enable_package_log = false;
std::string zurl;
+ std::string dbargs;
Z_SRW_extra_arg *arg;
for ( arg = sru_pdu_req->extra_args; arg; arg = arg->next)
package.log_enable();
}
}
+ else if (!strncmp(arg->name, "x-client-", 9) && arg->value)
+ {
+ if (dbargs.length())
+ dbargs += '&';
+ dbargs += mp_util::uri_encode(arg->name + 9);
+ dbargs += '=';
+ dbargs += mp_util::uri_encode(arg->value);
+ }
+
assert(sru_pdu_req);
// filter acts as sink for SRU explain requests
zurl, sru_pdu_res, sru_pdu_req))
{
ok = z3950_search_request(package, odr_en,
- sru_pdu_res, sr_req, zurl);
+ sru_pdu_res, sr_req, zurl, dbargs);
if (ok
&& sru_pdu_res->u.response->numberOfRecords
Z_SRW_PDU *sru_pdu_res,
Z_SRW_searchRetrieveRequest
const *sr_req,
- std::string zurl) const
+ std::string zurl,
+ std::string dbappend) const
{
assert(sru_pdu_res->u.response);
&z_searchRequest->num_databaseNames,
&z_searchRequest->databaseNames))
{
- z_searchRequest->num_databaseNames = 1;
- z_searchRequest->databaseNames = (char**)
- odr_malloc(odr_en, sizeof(char *));
+ std::string db;
if (sr_req->database)
- z_searchRequest->databaseNames[0]
- = odr_strdup(odr_en, const_cast<char *>(sr_req->database));
+ db = sr_req->database;
else
- z_searchRequest->databaseNames[0]
- = odr_strdup(odr_en, "Default");
+ db = "Default";
+
+ if (dbappend.length())
+ {
+ db += ",";
+ db += dbappend;
+ }
+ z_searchRequest->num_databaseNames = 1;
+ z_searchRequest->databaseNames = (char**)
+ odr_malloc(odr_en, sizeof(char *));
+ z_searchRequest->databaseNames[0] = odr_strdup(odr_en, db.c_str());
}
Z_Query *z_query = (Z_Query *) odr_malloc(odr_en, sizeof(Z_Query));
#include <metaproxy/filter.hpp>
#include <metaproxy/package.hpp>
#include <metaproxy/util.hpp>
-#include "router_flexml.hpp"
-#include "factory_static.hpp"
+#include <metaproxy/router_xml.hpp>
#if HAVE_UNISTD_H
#include <unistd.h>
namespace mp = metaproxy_1;
-mp::RouterFleXML *routerp = 0;
+mp::RouterXML *routerp = 0;
static void set_log_prefix(void)
{
signal(SIGTERM, sig_term_handler);
signal(SIGUSR1, sig_usr1_handler);
#endif
- routerp = (mp::RouterFleXML*) data;
+ routerp = (mp::RouterXML*) data;
routerp->start();
mp::Package pack;
wrbuf_puts(base_path, ".");
ret = 0;
try {
- mp::FactoryStatic factory;
- mp::RouterFleXML *router =
- new mp::RouterFleXML(doc, factory, test_config, wrbuf_cstr(base_path));
+ mp::RouterXML *router =
+ new mp::RouterXML(doc, test_config, wrbuf_cstr(base_path));
if (!test_config)
{
--- /dev/null
+/* This file is part of Metaproxy.
+ Copyright (C) 2005-2013 Index Data
+
+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 this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "config.hpp"
+#include <metaproxy/router_xml.hpp>
+#include "router_flexml.hpp"
+#include "factory_static.hpp"
+
+namespace mp = metaproxy_1;
+
+namespace metaproxy_1 {
+ class RouterXML::Rep {
+ public:
+ Rep(xmlDocPtr, bool, const char *);
+ Rep(std::string, bool);
+ ~Rep();
+ FactoryStatic m_factory;
+ boost::scoped_ptr<Router> m_flexml;
+ };
+}
+
+mp::RouterXML::Rep::Rep(xmlDocPtr doc, bool test_only,
+ const char *include_path)
+ : m_factory(),
+ m_flexml(new RouterFleXML(doc, m_factory, test_only, include_path))
+{
+}
+
+mp::RouterXML::Rep::Rep(std::string xmlconf, bool test_only)
+ : m_factory(),
+ m_flexml(new RouterFleXML(xmlconf, m_factory, test_only))
+{
+}
+
+mp::RouterXML::Rep::~Rep()
+{
+}
+
+mp::RouterXML::RouterXML(xmlDocPtr doc,
+ bool test_only, const char *file_include_path)
+ : m_p(new Rep(doc, test_only, file_include_path))
+{
+}
+
+mp::RouterXML::RouterXML(std::string xmlconf, bool test_only)
+ : m_p(new Rep(xmlconf, test_only))
+{
+}
+
+mp::RouterXML::~RouterXML()
+{
+}
+
+mp::RoutePos *mp::RouterXML::createpos() const
+{
+ return m_p->m_flexml->createpos();
+}
+
+void mp::RouterXML::start()
+{
+ m_p->m_flexml->start();
+}
+
+void mp::RouterXML::stop()
+{
+ m_p->m_flexml->stop();
+}
+
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * c-file-style: "Stroustrup"
+ * indent-tabs-mode: nil
+ * End:
+ * vim: shiftwidth=4 tabstop=8 expandtab
+ */
+
$(OBJDIR)\plainfile.obj \
$(OBJDIR)\router_chain.obj \
$(OBJDIR)\router_flexml.obj \
+ $(OBJDIR)\router_xml.obj \
$(OBJDIR)\session.obj \
$(OBJDIR)\sru_util.obj \
$(OBJDIR)\thread_pool_observer.obj \