Add RouterXML in public API MP-450
authorAdam Dickmeiss <adam@indexdata.dk>
Wed, 12 Jun 2013 12:08:33 +0000 (14:08 +0200)
committerAdam Dickmeiss <adam@indexdata.dk>
Wed, 12 Jun 2013 12:08:33 +0000 (14:08 +0200)
include/metaproxy/Makefile.am
include/metaproxy/router_xml.hpp [new file with mode: 0644]
src/Makefile.am
src/metaproxy_prog.cpp
src/router_xml.cpp [new file with mode: 0644]
win/makefile

index 0f38914..9c80072 100644 (file)
@@ -2,5 +2,6 @@
 ## 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
 
diff --git a/include/metaproxy/router_xml.hpp b/include/metaproxy/router_xml.hpp
new file mode 100644 (file)
index 0000000..2792ba7
--- /dev/null
@@ -0,0 +1,60 @@
+/* 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
+ */
+
index f3b0500..af16f6b 100644 (file)
@@ -58,6 +58,7 @@ libmetaproxy_la_SOURCES = \
        url_recipe.cpp \
        util.cpp \
        router_chain.cpp \
+       router_xml.cpp \
        xmlutil.cpp
 
 libmetaproxy_la_LIBADD = $(YAZPPLALIB) \
index bfa1b77..a4ec7f0 100644 (file)
@@ -30,8 +30,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #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>
@@ -45,7 +44,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
 namespace mp = metaproxy_1;
 
-mp::RouterFleXML *routerp = 0;
+mp::RouterXML *routerp = 0;
 
 static void set_log_prefix(void)
 {
@@ -84,7 +83,7 @@ static void work_common(void *data)
     signal(SIGTERM, sig_term_handler);
     signal(SIGUSR1, sig_usr1_handler);
 #endif
-    routerp = (mp::RouterFleXML*) data;
+    routerp = (mp::RouterXML*) data;
     routerp->start();
 
     mp::Package pack;
@@ -247,9 +246,8 @@ static int sc_main(
         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)
         {
 
diff --git a/src/router_xml.cpp b/src/router_xml.cpp
new file mode 100644 (file)
index 0000000..9abba65
--- /dev/null
@@ -0,0 +1,92 @@
+/* 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
+ */
+
index 3f9575d..5f1a546 100644 (file)
@@ -245,6 +245,7 @@ PROJECT_DLL_OBJS = \
        $(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 \