More informative GFS WRT Extended Services
[yaz-moved-to-github.git] / src / seshigh.c
index 1ff40da..5a4f4ef 100644 (file)
@@ -2,7 +2,7 @@
  * Copyright (C) 1995-2005, Index Data ApS
  * See the file LICENSE for details.
  *
- * $Id: seshigh.c,v 1.64 2005-11-08 15:08:02 adam Exp $
+ * $Id: seshigh.c,v 1.68 2006-03-13 11:59:27 adam Exp $
  */
 /**
  * \file seshigh.c
@@ -64,6 +64,7 @@
 #include <yaz/oid.h>
 #include <yaz/log.h>
 #include <yaz/logrpn.h>
+#include <yaz/querytowrbuf.h>
 #include <yaz/statserv.h>
 #include <yaz/diagbib1.h>
 #include <yaz/charneg.h>
@@ -1086,37 +1087,35 @@ static void srw_bend_scan(association *assoc, request *req,
              (*assoc->init->bend_scan))(assoc->backend, bsrr);
         }
         else if (srw_req->query_type == Z_SRW_query_type_cql
-                 && assoc->init->bend_srw_scan)
+                 && assoc->init->bend_scan && assoc->cql_transform)
         {
-            if (assoc->cql_transform)
-            {
-                int srw_error;
-                bsrr->scanClause = 0;
-                bsrr->attributeset = VAL_NONE;
-                bsrr->term = odr_malloc(assoc->decode, sizeof(*bsrr->term));
-                srw_error = cql2pqf_scan(assoc->encode,
-                                             srw_req->scanClause.cql,
-                                             assoc->cql_transform,
-                                             bsrr->term);
-                if (srw_error)
-                    yaz_add_srw_diagnostic(assoc->encode, &srw_res->diagnostics,
-                                           &srw_res->num_diagnostics,
-                                           srw_error, 0);
-                else
-                {
-                    ((int (*)(void *, bend_scan_rr *))
-                     (*assoc->init->bend_scan))(assoc->backend, bsrr);
-                }
-            }
+            int srw_error;
+            bsrr->scanClause = 0;
+            bsrr->attributeset = VAL_NONE;
+            bsrr->term = odr_malloc(assoc->decode, sizeof(*bsrr->term));
+            srw_error = cql2pqf_scan(assoc->encode,
+                                     srw_req->scanClause.cql,
+                                     assoc->cql_transform,
+                                     bsrr->term);
+            if (srw_error)
+                yaz_add_srw_diagnostic(assoc->encode, &srw_res->diagnostics,
+                                       &srw_res->num_diagnostics,
+                                       srw_error, 0);
             else
             {
-                bsrr->term = 0;
-                bsrr->attributeset = VAL_NONE;
-                bsrr->scanClause = srw_req->scanClause.cql;
                 ((int (*)(void *, bend_scan_rr *))
-                 (*assoc->init->bend_srw_scan))(assoc->backend, bsrr);
+                 (*assoc->init->bend_scan))(assoc->backend, bsrr);
             }
         }
+        else if (srw_req->query_type == Z_SRW_query_type_cql
+                 && assoc->init->bend_srw_scan)
+        {
+            bsrr->term = 0;
+            bsrr->attributeset = VAL_NONE;
+            bsrr->scanClause = srw_req->scanClause.cql;
+            ((int (*)(void *, bend_scan_rr *))
+             (*assoc->init->bend_srw_scan))(assoc->backend, bsrr);
+        }
         else
         {
             yaz_add_srw_diagnostic(assoc->encode, &srw_res->diagnostics,
@@ -1476,8 +1475,8 @@ static void process_http_request(association *assoc, request *req)
         }
         else if (sr->which == Z_SRW_update_request)
         {
-            yaz_log(YLOG_DEBUG, "handling SRW UpdateRequest");
             Z_SRW_PDU *res = yaz_srw_get(o, Z_SRW_update_response);
+            yaz_log(YLOG_DEBUG, "handling SRW UpdateRequest");
             if (num_diagnostic)
             {   
                 res->u.update_response->diagnostics = diagnostic;
@@ -1988,7 +1987,7 @@ static Z_APDU *process_initRequest(association *assoc, request *reqb)
                 assoc->init->implementation_name,
                 odr_prepend(assoc->encode, "GFS", resp->implementationName));
 
-    version = odr_strdup(assoc->encode, "$Revision: 1.64 $");
+    version = odr_strdup(assoc->encode, "$Revision: 1.68 $");
     if (strlen(version) > 10)   /* check for unexpanded CVS strings */
         version[strlen(version)-2] = '\0';
     resp->implementationVersion = odr_prepend(assoc->encode,
@@ -2437,7 +2436,7 @@ static Z_APDU *response_searchRequest(association *assoc, request *reqb,
             wrbuf_printf(wr, "OK %d", bsrt->hits);
         wrbuf_printf(wr, " %s 1+%d ",
                      req->resultSetName, returnedrecs);
-        wrbuf_put_zquery(wr, req->query);
+        yaz_query_to_wrbuf(wr, req->query);
         
         yaz_log(log_request, "Search %s", wrbuf_buf(wr));
         wrbuf_free(wr, 1);
@@ -2741,9 +2740,8 @@ static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd)
                       *req->preferredPositionInResponse : 1),
                      *req->numberOfTermsRequested,
                      (res->stepSize ? *res->stepSize : 0));
-        wrbuf_scan_term(wr, req->termListAndStartPoint, 
-                        bsrr->attributeset);
-        
+        yaz_scan_to_wrbuf(wr, req->termListAndStartPoint, 
+                          bsrr->attributeset);
         yaz_log(log_request, "Scan %s", wrbuf_buf(wr) );
         wrbuf_free(wr, 1);
     }
@@ -3022,6 +3020,7 @@ static Z_APDU *process_segmentRequest (association *assoc, request *reqb)
 static Z_APDU *process_ESRequest(association *assoc, request *reqb, int *fd)
 {
     bend_esrequest_rr esrequest;
+    const char *ext_name = "unknown";
 
     Z_ExtendedServicesRequest *req =
         reqb->apdu_request->u.extendedServicesRequest;
@@ -3029,8 +3028,6 @@ static Z_APDU *process_ESRequest(association *assoc, request *reqb, int *fd)
 
     Z_ExtendedServicesResponse *resp = apdu->u.extendedServicesResponse;
 
-    yaz_log(log_requestdetail,"Got EsRequest");
-
     esrequest.esr = reqb->apdu_request->u.extendedServicesRequest;
     esrequest.stream = assoc->encode;
     esrequest.decode = assoc->decode;
@@ -3041,7 +3038,24 @@ static Z_APDU *process_ESRequest(association *assoc, request *reqb, int *fd)
     esrequest.association = assoc;
     esrequest.taskPackage = 0;
     esrequest.referenceId = req->referenceId;
+
     
+    if (esrequest.esr && esrequest.esr->taskSpecificParameters)
+    {
+        switch(esrequest.esr->taskSpecificParameters->which)
+        {
+        case Z_External_itemOrder:
+            ext_name = "ItemOrder"; break;
+        case Z_External_update:
+            ext_name = "Update"; break;
+        case Z_External_update0:
+            ext_name = "Update0"; break;
+        case Z_External_ESAdmin:
+            ext_name = "Admin"; break;
+
+        }
+    }
+
     (*assoc->init->bend_esrequest)(assoc->backend, &esrequest);
     
     /* If the response is being delayed, return NULL */
@@ -3053,13 +3067,13 @@ static Z_APDU *process_ESRequest(association *assoc, request *reqb, int *fd)
     if (esrequest.errcode == -1)
     {
         /* Backend service indicates request will be processed */
-        yaz_log(log_request,"EsRequest OK: Accepted !");
+        yaz_log(log_request, "Extended Service: %s (accepted)", ext_name);
         *resp->operationStatus = Z_ExtendedServicesResponse_accepted;
     }
     else if (esrequest.errcode == 0)
     {
         /* Backend service indicates request will be processed */
-        yaz_log(log_request,"EsRequest OK: Done !");
+        yaz_log(log_request, "Extended Service: %s (done)", ext_name);
         *resp->operationStatus = Z_ExtendedServicesResponse_done;
     }
     else
@@ -3068,7 +3082,7 @@ static Z_APDU *process_ESRequest(association *assoc, request *reqb, int *fd)
             zget_DiagRecs(assoc->encode, esrequest.errcode,
                           esrequest.errstring);
         /* Backend indicates error, request will not be processed */
-        yaz_log(YLOG_DEBUG,"Request could not be processed...failure !");
+        yaz_log(log_request, "Extended Service: %s (failed)", ext_name);
         *resp->operationStatus = Z_ExtendedServicesResponse_failure;
         resp->num_diagnostics = diagRecs->num_diagRecs;
         resp->diagnostics = diagRecs->diagRecs;