- std::cout << "Got Z3950 Scan PDU\n";
- //Z_ScanRequest *req = gdu->u.z3950->u.scanRequest;
- //package.request() = gdu;
- }
+ Z_APDU *apdu_req = gdu->u.z3950;
+ if (apdu_req->which == Z_APDU_searchRequest)
+ {
+ int error_code = 0;
+ const char *addinfo = 0;
+ mp::odr odr;
+ Z_SearchRequest *req = apdu_req->u.searchRequest;
+
+ xmlDocPtr doc_input = 0;
+ yaz_query2xml(req->query, &doc_input);
+
+ if (!doc_input)
+ {
+ error_code = YAZ_BIB1_MALFORMED_QUERY;
+ addinfo = "converion from Query to XML failed";
+ }
+ else
+ {
+ if (m_stylesheet)
+ {
+ xmlDocPtr doc_res = xsltApplyStylesheet(m_stylesheet,
+ doc_input, 0);
+ if (!doc_res)
+ {
+ error_code = YAZ_BIB1_MALFORMED_QUERY;
+ addinfo = "XSLT transform failed for query";
+ }
+ else
+ {
+ const xmlNode *root_element = xmlDocGetRootElement(doc_res);
+ yaz_xml2query(root_element, &req->query, odr,
+ &error_code, &addinfo);
+ xmlFreeDoc(doc_res);
+ }
+ }
+ xmlFreeDoc(doc_input);
+ }
+ package.request() = gdu;
+ if (error_code)
+ {
+ Z_APDU *f_apdu =
+ odr.create_searchResponse(apdu_req, error_code, addinfo);
+ package.response() = f_apdu;
+ return;
+ }
+ }
+ }