* See the file LICENSE for details.
*
* $Log: yaz-my-client.cpp,v $
- * Revision 1.5 2001-04-10 10:48:08 adam
+ * Revision 1.9 2001-04-26 17:51:56 heikki
+ * better ursula request (doesn't crash)
+ *
+ * Revision 1.8 2001/04/26 17:30:07 heikki
+ * Ursularequest got more default data
+ *
+ * Revision 1.7 2001/04/26 12:17:49 heikki
+ * Ursula stuff, mostly in the test client
+ *
+ * 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
const char *databaseName);
void recv_textRecord(int type, const char *buf, size_t len);
void recv_genericRecord(Z_GenericRecord *r);
+#if HAVE_YAZ_URSULA_H
+ void recv_extendedServicesResponse(Z_ExtendedServicesResponse *extendedServicesResponse);
+#endif
void display_genericRecord(Z_GenericRecord *r, int level);
void display_variant(Z_Variant *v, int level);
void connectNotify();
int cmd_proxy(char *args);
#if HAVE_YAZ_URSULA_H
int cmd_ursula(char *args);
+ int cmd_ursula_renew(char *args);
#endif
};
recv_records (presentResponse->records);
}
+#if HAVE_YAZ_URSULA_H
+void MyClient::recv_extendedServicesResponse(Z_ExtendedServicesResponse *extendedServicesResponse)
+{
+ printf("Got ESresponse\n");
+ printf(" OperationStatus=%d with %d diagnostics:\n",
+ *extendedServicesResponse->operationStatus,
+ extendedServicesResponse->num_diagnostics);
+ recv_diagrecs(extendedServicesResponse->diagnostics,
+ extendedServicesResponse->num_diagnostics);
+ //TODO: Add more info !
+}
+#endif
+
int MyClient::wait()
{
set_lastReceived(0);
return 0;
}
+
#define C_PROMPT "Z>"
int MyClient::cmd_connect(char *host)
Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest;
req->packageType = odr_getoidbystr(odr_encode(), "1.2.840.10003");
+// req->packageType = odr_getoidbystr(odr_encode(), "1.2.840.10003.9.1000.105.3");
Z_External *ext = (Z_External *) odr_malloc(odr_encode(), sizeof(*ext));
req->taskSpecificParameters = ext;
ext->which = Z_External_octet;
ext->u.single_ASN1_type = (Odr_oct *)
- odr_malloc (odr_encode(), sizeof(Odr_oct));
+ odr_malloc (odr_encode(), sizeof(Odr_oct));
Z_UrsPDU *pdu = (Z_UrsPDU *) odr_malloc (odr_encode(), sizeof(*pdu));
pdu->which = Z_UrsPDU_request;
pdu->u.request = (Z_UrsRequest *)
- odr_malloc (odr_encode(), sizeof(*pdu->u.request));
+ odr_malloc (odr_encode(), sizeof(*pdu->u.request));
pdu->u.request->libraryNo = odr_strdup(odr_encode(), "000200");
- pdu->u.request->borrowerTickerNo = 0;
+ pdu->u.request->borrowerTickerNo = odr_strdup(odr_encode(),"1234567973");
pdu->u.request->disposalType = 0;
- pdu->u.request->lastUseDate = 0;
+ pdu->u.request->lastUseDate = odr_strdup(odr_encode(),"20011224");
+#ifdef SKIPTHIS
pdu->u.request->num_items = 0;
pdu->u.request->items = (Z_UrsRequestItem **) odr_nullval();
- pdu->u.request->counter = 0;
+#else
+ pdu->u.request->num_items = 1;
+ pdu->u.request->items = (Z_UrsRequestItem **)
+ odr_malloc(odr_encode(), 1 * sizeof(Z_UrsRequestItem*) );
+ pdu->u.request->items[0] = (Z_UrsRequestItem*)
+ odr_malloc(odr_encode(), sizeof(Z_UrsRequestItem) );
+ pdu->u.request->items[0]->id = odr_strdup(odr_encode(),"002231336x");
+ pdu->u.request->items[0]->titlePartNo=odr_strdup(odr_encode(),"31");
+#endif
+
+ pdu->u.request->counter = odr_strdup(odr_encode(),"HB");
pdu->u.request->priority = 0;
pdu->u.request->disposalNote = 0;
- pdu->u.request->overrule = 0;
+ pdu->u.request->overrule=(bool_t*)odr_malloc(odr_encode(),sizeof(bool_t));
+ *pdu->u.request->overrule = false;
+
+ 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;
+}
+
+int MyClient::cmd_ursula_renew(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 = odr_strdup(odr_encode(),"1234567973");
+ pdu->u.renewal->num_copies=1;
+ pdu->u.renewal->copies = (Z_InternationalString **)
+ odr_malloc(odr_encode(),1* sizeof(Z_InternationalString *) );
+ pdu->u.renewal->copies[0]= odr_strdup(odr_encode(), "000035238");
+ pdu->u.renewal->newReturnDate=odr_strdup(odr_encode(), "20011224");
+ pdu->u.renewal->overrule=(bool_t*)odr_malloc(odr_encode(),sizeof(bool_t));
+ *pdu->u.renewal->overrule=false;
if (!z_UrsPDU (odr_encode(), &pdu, 0, ""))
{
wait();
return 1;
}
+
+
#endif
int MyClient::processCommand(const char *commandLine)
{"proxy", &MyClient::cmd_proxy, "<host>:[':'<port>]"},
#if HAVE_YAZ_URSULA_H
{"ursula", &MyClient::cmd_ursula, ""},
+ {"ursula_request", &MyClient::cmd_ursula, ""},
+ {"ursreq", &MyClient::cmd_ursula, ""},
+ {"ursnew", &MyClient::cmd_ursula_renew, ""},
+ {"ursula_renew", &MyClient::cmd_ursula_renew, ""},
#endif
{0,0,0}
};