+ m_p->release_frontend(package);
+}
+
+
+void mp::filter::VirtualDB::configure(const xmlNode * ptr, bool test_only)
+{
+ for (ptr = ptr->children; ptr; ptr = ptr->next)
+ {
+ if (ptr->type != XML_ELEMENT_NODE)
+ continue;
+ if (!strcmp((const char *) ptr->name, "pass-vhosts"))
+ {
+ m_p->pass_vhosts = mp::xml::get_bool(ptr->children, false);
+ }
+ else if (!strcmp((const char *) ptr->name, "virtual"))
+ {
+ std::string database;
+ std::list<std::string> targets;
+ xmlNode *v_node = ptr->children;
+ for (; v_node; v_node = v_node->next)
+ {
+ if (v_node->type != XML_ELEMENT_NODE)
+ continue;
+
+ if (mp::xml::is_element_mp(v_node, "database"))
+ database = mp::xml::get_text(v_node);
+ else if (mp::xml::is_element_mp(v_node, "target"))
+ targets.push_back(mp::xml::get_text(v_node));
+ else
+ throw mp::filter::FilterException
+ ("Bad element "
+ + std::string((const char *) v_node->name)
+ + " in virtual section"
+ );
+ }
+ std::string route = mp::xml::get_route(ptr);
+ add_map_db2targets(database, targets, route);
+ }
+ else
+ {
+ throw mp::filter::FilterException
+ ("Bad element "
+ + std::string((const char *) ptr->name)
+ + " in virt_db filter");
+ }
+ }
+}
+
+static mp::filter::Base* filter_creator()
+{
+ return new mp::filter::VirtualDB;
+}
+
+extern "C" {
+ struct metaproxy_1_filter_struct metaproxy_1_filter_virt_db = {
+ 0,
+ "virt_db",
+ filter_creator
+ };