+<?xml version="1.0"?>
+<!-- imagined config for yp2..
+ The router system understands yp2, sequence and filter elements.
+ Everything else interpreted by filters.
+ Each filter is invoked in a sequence (unless a filter invokes another
+ sequence.. A start sequence must be determined somehow.
+ -->
+<yp2 xmlns="http://indexdata.dk/yp2/config/1">
+ <start route="id_hytg"/>
+ <filters>
+ <filter id="front_default" type="frontend-net">
+ <!-- the Z39.50/HTTP frontend -->
+ <port>@:210</port>
+ </filter>
+ <filter id="log_out" type="log"> <!-- apply logging always -->
+ <logfile>out.log</logfile>
+ </filter>
+ <filter id="log_cerr" type="log"> <!-- apply logging always -->
+ <logfile>std::cerr</logfile>
+ </filter>
+ </filters>
+
+ <routes>
+ <route id="start">
+ <filter refid="log_cout"/>
+ <filter type="cond"> <!-- conditional -->
+ <if test="port=210 and db=public" route="A"/>
+ <if test="port=210 and db=other" route="B"/>
+ <switch>
+ <case test="blabla" route="C"/>
+ <case test="blabla2" route="C2"/>
+ <default route="C3"/>
+ </switch>
+ </filter>
+ <filter refid="log_out"/>
+ <filter refid="log_cerr"/>
+ <filter type="log"> <!-- apply logging always -->
+ <logfile>mylog.log</logfile>
+ </filter>
+ <filter name="reject"> <!-- reject .. -->
+ </filter>
+ </route>
+ <route id="public">
+ <filter type="z3950-client">
+ <target>localhost:9999/A</target>
+ </filter>
+ </route>
+ <route id="internal">
+ <filter type="z3950-client">
+ <target>localhost:9999/B</target>
+ </filter>
+ </route>
+ <route id="internal">
+ <xml:include href="file://module2.xml#filter45"/>
+ <xml:include href="file://module4.xml#filter145"/>
+ </route>
+ <route id="AB">
+ <filter type="multi">
+ <package route="A"/>
+ <package route="B"/>
+ <merge type="simple"/>
+ </filter>
+ </route>
+ </routes>
+</yp2>
+
+<!-- functions:
+ db returns Z39.50 database(s)
+ path HTTP path
+ HTTP-header Any HTTP header (including content-type)
+ request-type Init,Search,HTTP,...
+ origin IP of origin
+ port Port
+
+
+mother object filter-dom-hash
+ deletes pointers to contexts and filters on program exit
+hash filter-type -> hash-filter-id -> Context
+ -> filter-binary-pointer
+
+moher object router pointer hash
+
+created in mother thread, read only structures.
+
+Context* filter.configure(dom );
+
+
+
+process(Context con)
+
+where each filter can have is own context class
+
+yp2::filter::Log::Context : public Context
+
+
+Filters are constructed with a FilterFactory class which exposes a
+method
+
+Filter* createFilter(std::string type)
+
+ .. which returns a filter
+instance. (The interface pointer that is). The FilterFactory may later
+offer function
+ loadModule(std::string filename);
+or even
+ loadModules(std::string filenamemask);
+
+
+
+-->
+
+<!-- observation: the logic could be controlled by a XSLT! -->