zoom: add facililty to dump APDUs.
authorAdam Dickmeiss <adam@indexdata.dk>
Fri, 29 Jul 2011 14:19:07 +0000 (16:19 +0200)
committerAdam Dickmeiss <adam@indexdata.dk>
Fri, 29 Jul 2011 14:19:07 +0000 (16:19 +0200)
Triggered by <log apdu="true"/> in the zoom filter configuation.

src/filter_zoom.cpp
xml/schema/filter_zoom.rnc
xml/schema/filter_zoom.rng
xml/schema/filter_zoom.xsd

index 2ac339d..f2b8f54 100644 (file)
@@ -145,6 +145,7 @@ namespace metaproxy_1 {
             std::string file_path;
             std::string content_proxy_server;
             std::string content_tmp_file;
+            bool apdu_log;
             CCL_bibset bibset;
             std::string element_transform;
             std::string element_raw;
@@ -360,7 +361,8 @@ void yf::Zoom::Impl::release_frontend(mp::Package &package)
     }
 }
 
-yf::Zoom::Impl::Impl() : element_transform("pz2") , element_raw("raw")
+yf::Zoom::Impl::Impl() :
+    apdu_log(false), element_transform("pz2") , element_raw("raw")
 {
     bibset = ccl_qual_mk();
 }
@@ -587,6 +589,19 @@ void yf::Zoom::Impl::configure(const xmlNode *ptr, bool test_only,
                                                        attr->name));
             }
         }
+        else if (!strcmp((const char *) ptr->name, "log"))
+        { 
+            const struct _xmlAttr *attr;
+            for (attr = ptr->properties; attr; attr = attr->next)
+            {
+                if (!strcmp((const char *) attr->name, "apdu"))
+                    apdu_log = mp::xml::get_bool(attr->children, false);
+                else
+                    throw mp::filter::FilterException(
+                        "Bad attribute " + std::string((const char *)
+                                                       attr->name));
+            }
+        }
         else
         {
             throw mp::filter::FilterException
@@ -713,7 +728,9 @@ yf::Zoom::BackendPtr yf::Zoom::Frontend::get_backend_from_databases(
         b->set_option("rpnCharset", sptr->query_encoding);
 
     b->set_option("timeout", "40");
-
+    
+    if (m_p->apdu_log) 
+        b->set_option("apdulog", "1");
 
     std::string authentication = sptr->authentication;
     std::string proxy = sptr->cfProxy;
index 40ff2ca..3696773 100644 (file)
@@ -53,6 +53,9 @@ filter_zoom =
   element mp:contentProxy {
     attribute server { xsd:string }?,
     attribute tmp_file { xsd:string }?
+  }?,
+  element mp:log {
+    attribute apdu { xsd:boolean }?
   }?
 
 
index bffc0cc..6b69c99 100644 (file)
         </optional>
       </element>
     </optional>
+    <optional>
+      <element name="mp:log">
+        <optional>
+          <attribute name="apdu">
+            <data type="boolean"/>
+          </attribute>
+        </optional>
+      </element>
+    </optional>
   </define>
 </grammar>
index 13ec017..a9b5def 100644 (file)
@@ -9,6 +9,7 @@
       <xs:element minOccurs="0" maxOccurs="unbounded" ref="mp:fieldmap"/>
       <xs:element minOccurs="0" ref="mp:cclmap"/>
       <xs:element minOccurs="0" ref="mp:contentProxy"/>
+      <xs:element minOccurs="0" ref="mp:log"/>
     </xs:sequence>
   </xs:group>
   <xs:element name="torus">
       <xs:attribute name="tmp_file" type="xs:string"/>
     </xs:complexType>
   </xs:element>
+  <xs:element name="log">
+    <xs:complexType>
+      <xs:attribute name="apdu" type="xs:boolean"/>
+    </xs:complexType>
+  </xs:element>
   <xs:attributeGroup name="filter_zoom">
     <xs:attribute name="type" use="required">
       <xs:simpleType>