Added option -1 that runs server once (for profiling purposes).
[yaz-moved-to-github.git] / server / seshigh.c
index 78d65d8..e89e830 100644 (file)
@@ -4,7 +4,17 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: seshigh.c,v $
- * Revision 1.90  1999-05-27 13:02:20  adam
+ * Revision 1.93  1999-07-06 12:17:15  adam
+ * Added option -1 that runs server once (for profiling purposes).
+ *
+ * Revision 1.92  1999/06/17 10:54:45  adam
+ * Added facility to specify implementation version - and name
+ * for server.
+ *
+ * Revision 1.91  1999/06/01 14:29:12  adam
+ * Work on Extended Services.
+ *
+ * Revision 1.90  1999/05/27 13:02:20  adam
  * Assigned OID for old DB Update (VAL_DBUPDATE0).
  *
  * Revision 1.89  1999/05/26 15:24:26  adam
@@ -444,6 +454,8 @@ void destroy_association(association *h)
     request_delq(&h->incoming);
     request_delq(&h->outgoing);
     xfree(h);
+    if (control_block && control_block->one_shot)
+       exit (0);
 }
 
 static void do_close_req(association *a, int reason, char *message,
@@ -796,6 +808,8 @@ static Z_APDU *process_initRequest(association *assoc, request *reqb)
     binitreq.configname = "default-config";
     binitreq.auth = req->idAuthentication;
     binitreq.referenceId = req->referenceId;
+    binitreq.implementation_version = 0;
+    binitreq.implementation_name = 0;
     binitreq.bend_sort = NULL;
     binitreq.bend_search = NULL;
     binitreq.bend_present = NULL;
@@ -887,7 +901,30 @@ static Z_APDU *process_initRequest(association *assoc, request *reqb)
        assoc->preferredMessageSize = assoc->maximumRecordSize;
     resp->preferredMessageSize = &assoc->preferredMessageSize;
     resp->maximumRecordSize = &assoc->maximumRecordSize;
+
     resp->implementationName = "Index Data/YAZ Generic Frontend Server";
+
+    if (binitreq.implementation_name)
+    {
+       char *nv = (char *)
+           odr_malloc (assoc->encode,
+                       strlen(binitreq.implementation_name) + 3 + 
+                              strlen(resp->implementationName));
+       sprintf (nv, "%s %s",
+                resp->implementationName, binitreq.implementation_name);
+        resp->implementationName = nv;
+    }
+    if (binitreq.implementation_version)
+    {
+       char *nv = (char *)
+           odr_malloc (assoc->encode,
+                       strlen(binitreq.implementation_version) + 3 + 
+                              strlen(resp->implementationVersion));
+       sprintf (nv, "%s %s",
+                resp->implementationVersion, binitreq.implementation_version);
+        resp->implementationVersion = nv;
+    }
+
     if (binitres->errcode)
     {
        logf(LOG_LOG, "Connection rejected by backend.");
@@ -1761,21 +1798,31 @@ static Z_APDU *process_ESRequest(association *assoc, request *reqb, int *fd)
 
     resp->referenceId = req->referenceId;
 
-    if ( esrequest.errcode == 0 )
+    if (esrequest.errcode == -1)
     {
         /* Backend service indicates request will be processed */
-        logf(LOG_DEBUG,"Request will be processed...Good !");
+        logf(LOG_DEBUG,"Request could be processed...Accepted !");
+        *resp->operationStatus = Z_ExtendedServicesResponse_accepted;
+    }
+    else if (esrequest.errcode == 0)
+    {
+        /* Backend service indicates request will be processed */
+        logf(LOG_DEBUG,"Request could be processed...Done !");
         *resp->operationStatus = Z_ExtendedServicesResponse_done;
     }
     else
     {
+       Z_DiagRecs *diagRecs = diagrecs (assoc, esrequest.errcode,
+                                        esrequest.errstring);
+
         /* Backend indicates error, request will not be processed */
-        logf(LOG_DEBUG,"Request will not be processed...BAD !");
+        logf(LOG_DEBUG,"Request could not be processed...failure !");
         *resp->operationStatus = Z_ExtendedServicesResponse_failure;
+       resp->num_diagnostics = diagRecs->num_diagRecs;
+       resp->diagnostics = diagRecs->diagRecs;
     }
     /* Do something with the members of bend_extendedservice */
 
     logf(LOG_DEBUG,"Send the result apdu");
-
     return apdu;
 }