* Sebastian Hammer, Adam Dickmeiss
*
* $Log: client.c,v $
- * Revision 1.67 1998-06-09 13:55:06 adam
+ * Revision 1.70 1998-09-22 09:40:37 adam
+ * Minor changes in sort spec.
+ *
+ * Revision 1.69 1998/08/19 16:10:06 adam
+ * Changed som member names of DeleteResultSetRequest/Response.
+ *
+ * Revision 1.68 1998/07/20 12:37:06 adam
+ * Added 'delete <resultset>' command. Changed open command so that
+ * it reconnects if already connected.
+ *
+ * Revision 1.67 1998/06/09 13:55:06 adam
* Minor changes.
*
* Revision 1.66 1998/05/18 13:06:53 adam
static enum oid_proto protocol = PROTO_Z3950; /* current app protocol */
static enum oid_value recordsyntax = VAL_USMARC;
static int sent_close = 0;
-static ODR_MEM session_mem; /* memory handle for init-response */
+static NMEM session_mem = NULL; /* memory handle for init-response */
static Z_InitResponse *session = 0; /* session parameters */
static char last_scan[512] = "0";
static char last_cmd[100] = "?";
ODR_MASK_SET(req->options, Z_Options_scan);
ODR_MASK_SET(req->options, Z_Options_sort);
ODR_MASK_SET(req->options, Z_Options_extendedServices);
+ ODR_MASK_SET(req->options, Z_Options_delSet);
ODR_MASK_SET(req->protocolVersion, Z_ProtocolVersion_1);
ODR_MASK_SET(req->protocolVersion, Z_ProtocolVersion_2);
printf("Guessing visiblestring:\n");
printf("'%s'\n", res->userInformationField->u. octet_aligned->buf);
}
+ odr_reset (print);
}
return 0;
}
if (conn)
{
printf("Already connected.\n");
- return 0;
+
+ cs_close (conn);
+ conn = NULL;
+ if (session_mem)
+ {
+ nmem_destroy (session_mem);
+ session_mem = NULL;
+ }
}
base[0] = '\0';
if (!*arg || sscanf(arg, "%[^:]:%[^/]/%s", type, addr, base) < 2)
}
}
+static int send_deleteResultSetRequest(char *arg)
+{
+ Z_APDU *apdu = zget_APDU(out, Z_APDU_deleteResultSetRequest);
+ Z_DeleteResultSetRequest *req = apdu->u.deleteResultSetRequest;
+
+ req->referenceId = set_refid (out);
+
+ req->num_resultSetList = 1;
+ req->resultSetList = (char **)
+ odr_malloc (out, sizeof(*req->resultSetList));
+ *req->resultSetList = arg;
+ req->deleteFunction = (int *)
+ odr_malloc (out, sizeof(*req->deleteFunction));
+ *req->deleteFunction = Z_DeleteRequest_list;
+
+ send_apdu(apdu);
+ printf("Sent deleteResultSetRequest.\n");
+ return 2;
+}
+
static int send_searchRequest(char *arg)
{
Z_APDU *apdu = zget_APDU(out, Z_APDU_searchRequest);
return 2;
}
+static int cmd_delete(char *arg)
+{
+ if (!*arg)
+ {
+ printf("Delete what?\n");
+ return 0;
+ }
+ if (!conn)
+ {
+ printf("Not connected yet\n");
+ return 0;
+ }
+ if (!send_deleteResultSetRequest(arg))
+ return 0;
+ return 2;
+}
+
static int cmd_ssub(char *arg)
{
if (!(smallSetUpperBound = atoi(arg)))
req->diagnosticInformation ? req->diagnosticInformation : "NULL");
if (sent_close)
{
- printf("Goodbye.\n");
- exit(0);
+ cs_close (conn);
+ conn = NULL;
+ if (session_mem)
+ {
+ nmem_destroy (session_mem);
+ session_mem = NULL;
+ }
+ sent_close = 0;
+ }
+ else
+ {
+ *res->closeReason = Z_Close_finished;
+ send_apdu(apdu);
+ printf("Sent response.\n");
+ sent_close = 1;
}
- *res->closeReason = Z_Close_finished;
- send_apdu(apdu);
- printf("Sent response.\n");
- sent_close = 1;
}
static int cmd_show(char *arg)
{
+ if (!conn)
+ {
+ printf("Not connected yet\n");
+ return 0;
+ }
if (!send_presentRequest(arg))
return 0;
return 2;
apdu->u.triggerResourceControlRequest;
bool_t rfalse = 0;
- if (!session)
+ if (!conn)
{
printf("Session not initialized yet\n");
return 0;
case 'a':
case 'A':
case '>':
- *sks->sortRelation = Z_SortRelation_ascending;
+ *sks->sortRelation = Z_SortRelation_descending;
break;
case 'd':
case 'D':
case '<':
- *sks->sortRelation = Z_SortRelation_descending;
+ *sks->sortRelation = Z_SortRelation_ascending;
break;
case 'i':
case 'I':
int cmd_sort_generic(char *arg, int newset)
{
- if (!session)
+ if (!conn)
{
printf("Session not initialized yet\n");
return 0;
int cmd_scan(char *arg)
{
- if (!session)
+ if (!conn)
{
printf("Session not initialized yet\n");
return 0;
int cmd_close(char *arg)
{
- Z_APDU *apdu = zget_APDU(out, Z_APDU_close);
- Z_Close *req = apdu->u.close;
+ Z_APDU *apdu;
+ Z_Close *req;
+ if (!conn)
+ return 0;
+ apdu = zget_APDU(out, Z_APDU_close);
+ req = apdu->u.close;
*req->closeReason = Z_Close_finished;
send_apdu(apdu);
printf("Sent close request.\n");
fclose (inf);
}
#endif
+ cmd_base("Default");
}
static int client(int wait)
{"open", cmd_open, "('tcp'|'osi')':'[<tsel>'/']<host>[':'<port>]"},
{"quit", cmd_quit, ""},
{"find", cmd_find, "<query>"},
+ {"delete", cmd_delete, "<setname>"},
{"base", cmd_base, "<base-name>"},
{"show", cmd_show, "<rec#>['+'<#recs>['+'<setname>]]"},
{"scan", cmd_scan, "<term>"},
process_resourceControlRequest
(apdu->u.resourceControlRequest);
break;
+ case Z_APDU_deleteResultSetResponse:
+ printf("Got deleteResultSetResponse status=%d\n",
+ *apdu->u.deleteResultSetResponse->
+ deleteOperationStatus);
+ break;
default:
printf("Received unknown APDU type (%d).\n",
apdu->which);
exit(1);
}
}
- while (cs_more(conn));
+ while (conn && cs_more(conn));
printf(C_PROMPT);
fflush(stdout);
}
int ret;
int opened = 0;
- initialize();
- cmd_base("Default");
-
- while ((ret = options("m:", argv, argc, &arg)) != -2)
+ while ((ret = options("m:v:", argv, argc, &arg)) != -2)
{
switch (ret)
{
case 0:
- if (cmd_open (arg) == 2)
- opened = 1;
+ if (!opened)
+ {
+ initialize ();
+ if (cmd_open (arg) == 2)
+ opened = 1;
+ }
break;
case 'm':
if (!(marcdump = fopen (arg, "a")))
exit (1);
}
break;
+ case 'v':
+ log_init (log_mask_str(arg), "", NULL);
+ break;
default:
fprintf (stderr, "Usage: %s [-m <marclog>] [<server-addr>]\n",
prog);
}
}
if (!opened)
+ {
+ initialize ();
printf (C_PROMPT);
+ }
return client (opened);
}