Working on UrsulaRenewal, Request, and Update
[yazpp-moved-to-github.git] / src / yaz-my-client.cpp
index 5ac5307..c00c4b8 100644 (file)
@@ -3,7 +3,19 @@
  * See the file LICENSE for details.
  * 
  * $Log: yaz-my-client.cpp,v $
- * Revision 1.2  2001-04-04 14:02:49  adam
+ * Revision 1.6  2001-04-17 16:21:21  heikki
+ * Working on UrsulaRenewal, Request, and Update
+ *
+ * Revision 1.5  2001/04/10 10:48:08  adam
+ * Fixed problem where proxy could cash bad result sets.
+ *
+ * Revision 1.4  2001/04/05 15:12:24  adam
+ * WIN32 updates.
+ *
+ * Revision 1.3  2001/04/05 13:09:44  adam
+ * Removed ursula dependancy.
+ *
+ * Revision 1.2  2001/04/04 14:02:49  adam
  * URSULA / Z-ruth service.
  *
  * Revision 1.1  2001/03/27 14:47:45  adam
 #include <yaz++/yaz-ir-assoc.h>
 #include <yaz++/yaz-pdu-assoc.h>
 #include <yaz++/yaz-socket-manager.h>
+
+#if HAVE_YAZ_URSULA_H
 #include <yaz/zes-ursula.h>
+#endif
 
 extern "C" {
 #if HAVE_READLINE_READLINE_H
@@ -129,7 +144,9 @@ public:
     int cmd_init(char *args);
     int cmd_format(char *args);
     int cmd_proxy(char *args);
+#if HAVE_YAZ_URSULA_H
     int cmd_ursula(char *args);
+#endif
 };
 
 
@@ -413,7 +430,7 @@ void MyClient::recv_record(Z_DatabaseRecord *record, int offset,
        case VAL_SIGLEMARC:
        case VAL_ISDSMARC:
        case VAL_RUSMARC:
-           marc_display((char*) record->u.octet_aligned->buf,stdout);
+           marc_display((char*) record->u.octet_aligned->buf,0);
            break;
        default:
            recv_textRecord((int) ent->value,
@@ -485,10 +502,12 @@ void MyClient::recv_searchResponse(Z_SearchResponse *searchResponse)
     if (!*searchResponse->searchStatus)
     {
        printf ("Fail\n");
-       return;
     }
-    printf ("Ok\n");
-    printf ("Hits: %d\n", *searchResponse->resultCount);
+    else
+    {
+       printf ("Ok\n");
+       printf ("Hits: %d\n", *searchResponse->resultCount);
+    }
     recv_records (searchResponse->records);
 }
 
@@ -598,6 +617,8 @@ int MyClient::cmd_proxy(char *args)
     return 1;
 }
 
+#if HAVE_YAZ_URSULA_H
+#if TEST_URSULA_REF
 int MyClient::cmd_ursula(char *args)
 {
     Z_APDU *apdu = create_Z_PDU(Z_APDU_extendedServicesRequest);
@@ -647,6 +668,53 @@ int MyClient::cmd_ursula(char *args)
        wait();
     return 1;
 }
+#else // not request testing
+
+int MyClient::cmd_ursula(char *args)
+{
+    Z_APDU *apdu = create_Z_PDU(Z_APDU_extendedServicesRequest);
+    Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest;
+
+    req->packageType = odr_getoidbystr(odr_encode(), "1.2.840.10003");
+    
+    Z_External *ext = (Z_External *) odr_malloc(odr_encode(), sizeof(*ext));
+    req->taskSpecificParameters = ext;
+    ext->direct_reference = req->packageType;
+    ext->descriptor = 0;
+    ext->indirect_reference = 0;
+    
+    ext->which = Z_External_octet;
+    ext->u.single_ASN1_type = (Odr_oct *)
+       odr_malloc (odr_encode(), sizeof(Odr_oct));
+
+    Z_UrsPDU *pdu = (Z_UrsPDU *) odr_malloc (odr_encode(), sizeof(*pdu));
+    pdu->which = Z_UrsPDU_renewal;
+    pdu->u.renewal = (Z_UrsRenewal *)
+          odr_malloc (odr_encode(), sizeof(*pdu->u.renewal));
+    pdu->u.renewal->libraryNo = odr_strdup(odr_encode(), "000200");
+    pdu->u.renewal->borrowerTicketNo = 0;
+
+    if (!z_UrsPDU (odr_encode(), &pdu, 0, ""))
+    {
+       yaz_log (LOG_LOG, "ursula encoding failed");
+       return 1;
+    }
+    char *buf = 
+       odr_getbuf (odr_encode(), &ext->u.single_ASN1_type->len, 0);
+    
+    ext->u.single_ASN1_type->buf = (unsigned char*)
+       odr_malloc (odr_encode(), ext->u.single_ASN1_type->len);
+    memcpy (ext->u.single_ASN1_type->buf, buf, ext->u.single_ASN1_type->len);
+    ext->u.single_ASN1_type->size = ext->u.single_ASN1_type->len;
+    
+    if (send_Z_PDU(apdu) >= 0)
+       wait();
+    return 1;
+}
+
+#endif
+
+#endif
 
 int MyClient::processCommand(const char *commandLine)
 {
@@ -668,7 +736,9 @@ int MyClient::processCommand(const char *commandLine)
        {"init", &MyClient::cmd_init, ""},
        {"format", &MyClient::cmd_format, "<record-syntax>"},
        {"proxy", &MyClient::cmd_proxy, "<host>:[':'<port>]"},
+#if HAVE_YAZ_URSULA_H
        {"ursula", &MyClient::cmd_ursula, ""},
+#endif
        {0,0,0}
     };