Beginning to add support for record packing.
[yaz-moved-to-github.git] / server / seshigh.c
index e314918..42a90d8 100644 (file)
@@ -4,7 +4,16 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: seshigh.c,v $
- * Revision 1.3  1995-03-16 17:42:39  quinn
+ * Revision 1.6  1995-03-21 12:30:09  quinn
+ * Beginning to add support for record packing.
+ *
+ * Revision 1.5  1995/03/17  10:44:13  quinn
+ * Added catch of null-string in makediagrec
+ *
+ * Revision 1.4  1995/03/17  10:18:08  quinn
+ * Added memory management.
+ *
+ * Revision 1.3  1995/03/16  17:42:39  quinn
  * Little changes
  *
  * Revision 1.2  1995/03/16  13:29:01  quinn
@@ -91,6 +100,8 @@ void destroy_association(association *h)
     odr_destroy(h->decode);
     odr_destroy(h->encode);
     free(h->encode_buffer);
+    if (h->input_buffer)
+       free(h->input_buffer);
     free(h);
 }
 
@@ -176,6 +187,7 @@ static int process_apdu(IOCHAN chan)
            fprintf(stderr, "Bad APDU\n");
            return -1;
     }
+    odr_reset(assoc->decode);
     return res;
 }
 
@@ -220,7 +232,7 @@ static int process_initRequest(IOCHAN client, Z_InitRequest *req)
     resp.result = &result;
     resp.implementationId = "YAZ";
     resp.implementationName = "YAZ/Simple asynchronous test server";
-    resp.implementationVersion = "$Revision: 1.3 $";
+    resp.implementationVersion = "$Revision: 1.6 $";
     resp.userInformationField = 0;
     if (!z_APDU(assoc->encode, &apdup, 0))
     {
@@ -228,6 +240,7 @@ static int process_initRequest(IOCHAN client, Z_InitRequest *req)
        return -1;
     }
     odr_getbuf(assoc->encode, &assoc->encoded_len);
+    odr_reset(assoc->encode);
     iochan_setflags(client, EVENT_OUTPUT | EVENT_EXCEPT);
     return 0;
 }
@@ -245,10 +258,32 @@ static Z_Records *diagrec(int error, char *addinfo)
     rec.u.nonSurrogateDiagnostic = &dr;
     dr.diagnosticSetId = bib1;
     dr.condition = &err;
-    dr.addinfo = addinfo;
+    dr.addinfo = addinfo ? addinfo : "";
+    return &rec;
+}
+
+static Z_NamePlusRecord *surrogatediagrec(char *dbname, int error,
+                                           char *addinfo)
+{
+    static Z_NamePlusRecord rec;
+    static Z_DiagRec dr;
+    static Odr_oid bib1[] = { 1, 2, 3, 4, 5, -1 };
+    static int err;
+
+    fprintf(stderr, "SurrogateDiagnotic: %d -- %s\n", error, addinfo);
+    rec.databaseName = dbname;
+    rec.which = Z_NamePlusRecord_surrogateDiagnostic;
+    rec.u.surrogateDiagnostic = &dr;
+    dr.diagnosticSetId = bib1;
+    dr.condition = &err;
+    dr.addinfo = addinfo ? addinfo : "";
     return &rec;
 }
 
+static Z_Records *pack_records(association *a, int num, Z_ElementSetNames *esn)
+{
+}
+
 static int process_searchRequest(IOCHAN client, Z_SearchRequest *req)
 {
     Z_APDU apdu, *apdup;
@@ -293,6 +328,7 @@ static int process_searchRequest(IOCHAN client, Z_SearchRequest *req)
        return -1;
     }
     odr_getbuf(assoc->encode, &assoc->encoded_len);
+    odr_reset(assoc->encode);
     iochan_setflags(client, EVENT_OUTPUT | EVENT_EXCEPT);
     return 0;
 }
@@ -322,6 +358,7 @@ static int process_presentRequest(IOCHAN client, Z_PresentRequest *req)
        return -1;
     }
     odr_getbuf(assoc->encode, &assoc->encoded_len);
+    odr_reset(assoc->encode);
     iochan_setflags(client, EVENT_OUTPUT | EVENT_EXCEPT);
     return 0;
 }