Pull present status from presresp.
[egate.git] / zlayer / zaccess.c
index b078ccb..d0fd1b4 100644 (file)
@@ -2,7 +2,28 @@
  * Europagate, 1995
  *
  * $Log: zaccess.c,v $
- * Revision 1.5  1995/02/17 13:58:01  quinn
+ * Revision 1.12  1995/02/20 20:35:37  quinn
+ * Pull present status from presresp.
+ *
+ * Revision 1.11  1995/02/20  18:58:05  quinn
+ * Added hack for record in ANY
+ *
+ * Revision 1.10  1995/02/20  18:19:30  quinn
+ * More relaxed about record types.
+ *
+ * Revision 1.9  1995/02/17  15:17:51  quinn
+ * Bug fix
+ *
+ * Revision 1.8  1995/02/17  14:48:41  quinn
+ * 'nother bug in present
+ *
+ * Revision 1.7  1995/02/17  14:42:21  quinn
+ * Trivial bug in fetch-loop.
+ *
+ * Revision 1.6  1995/02/17  14:41:22  quinn
+ * Debugging.
+ *
+ * Revision 1.5  1995/02/17  13:58:01  quinn
  * First kick at present handling
  *
  * Revision 1.4  1995/02/16  15:33:45  quinn
@@ -330,13 +351,19 @@ void get_responserecords(zass_record ***p, DATA_DIR *rec)
        else
        {
            gw_log(GW_LOG_WARN, ZASS_TYPE, "ZLAYER only knows USMARC at this point.");
-           return;
+           gw_log(GW_LOG_WARN, ZASS_TYPE, "Type was '%d'", (**p)->which);
        }
        align = External_GetEncodingAligned(ext);
        if (!align)
        {
-           gw_log(GW_LOG_WARN, ZASS_TYPE, "AAAARRRGH!! Enough of these log-messages!!!");
-           return;
+           gw_log(GW_LOG_WARN, ZASS_TYPE, "Record wasn't octet-aligned");
+           align = External_GetEncodingSingle(ext);
+           if (!align)
+           {
+               gw_log(GW_LOG_WARN, ZASS_TYPE, "Record wasn't ANY");
+               return;
+           }
+           align = align->ptr.child;
        }
        if (!((**p)->record = malloc(align->count + 1)))
        {
@@ -375,9 +402,10 @@ const struct zass_presentent *zass_present(ZASS a, char *resname, int start,
     }
     do
     {
-       gw_log(ZASS_DEBUG, ZASS_TYPE, "Fetching %d records from # %d", num,
+       gw_log(ZASS_DEBUG, ZASS_TYPE, "Fetching %d records from # %d", num - r.num,
            start);
-       pdu = PresentRequest_CreateInitAllASCII(0, resname, start, num, 0, 0);
+       pdu = PresentRequest_CreateInitAllASCII(0, resname, start, num - r.num, "F",
+           USMARC_OID);
        if (!pdu)
        {
            gw_log(GW_LOG_FATAL, "ZASS_TYPE", "failed to create presentrequest");
@@ -410,28 +438,30 @@ const struct zass_presentent *zass_present(ZASS a, char *resname, int start,
            return 0;
        }
        gw_log(ZASS_DEBUG, ZASS_TYPE, "Got presentresponse");
-       r.num = PresentResponse_GetNumberOfRecordsReturned(pdu);
+       r.num += PresentResponse_GetNumberOfRecordsReturned(pdu);
+       r.presentstatus = PresentResponse_GetPresentStatus(pdu);
        if (r.num == 0)
        {
            gw_log(GW_LOG_WARN, ZASS_TYPE, "Got 0 records from target.");
            return 0;
        }
        r.nextpos = PresentResponse_GetNextResultSetPosition(pdu);
-       start += r.nextpos;
-       num -= r.num;
+       start = r.nextpos;
        switch(PresentResponse_GetRecordType(pdu))
        {
            case RESPONSERECORDS_TAG:
                get_responserecords(&rec, PresentResponse_GetResponseRecords(pdu));
+               break;
            case NONSURROGATEDIAGNOSTIC_TAG:
                get_diagrec(&rec, PresentResponse_GetNonSurrogateDiagnostic(pdu));
+               break;
            default:
                gw_log(GW_LOG_WARN, ZASS_TYPE, "Bad tag in response rec.");
        }
-       *rec = 0;
+       PresentResponse_Destroy(pdu);
     }
-    while (num);
-    PresentResponse_Destroy(pdu);
+    while (num - r.num);
+    *rec = 0;
        
     return &r;
 }