* Copyright (c) 1995-2004, Index Data
* See the file LICENSE for details.
*
- * $Id: client.c,v 1.220 2004-01-06 09:09:13 adam Exp $
+ * $Id: client.c,v 1.226 2004-01-15 10:16:26 adam Exp $
*/
#include <stdio.h>
static char *refid = NULL;
static char *last_open_command = NULL;
static int auto_reconnect = 0;
+static Odr_bitmask z3950_options;
+static int z3950_version = 3;
static char cur_host[200];
{
Z_APDU *apdu = zget_APDU(out, Z_APDU_initRequest);
Z_InitRequest *req = apdu->u.initRequest;
+ int i;
- ODR_MASK_SET(req->options, Z_Options_search);
- ODR_MASK_SET(req->options, Z_Options_present);
- ODR_MASK_SET(req->options, Z_Options_namedResultSets);
- ODR_MASK_SET(req->options, Z_Options_triggerResourceCtrl);
- 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);
+ req->options = &z3950_options;
- ODR_MASK_SET(req->protocolVersion, Z_ProtocolVersion_1);
- ODR_MASK_SET(req->protocolVersion, Z_ProtocolVersion_2);
- ODR_MASK_SET(req->protocolVersion, Z_ProtocolVersion_3);
+ ODR_MASK_ZERO(req->protocolVersion);
+ for (i = 0; i<z3950_version; i++)
+ ODR_MASK_SET(req->protocolVersion, i);
*req->maximumRecordSize = 1024*kilobytes;
*req->preferredMessageSize = 1024*kilobytes;
static void render_initUserInfo(Z_OtherInformation *ui1);
static void render_diag(Z_DiagnosticFormat *diag);
+static void pr_opt(const char *opt, void *clientData)
+{
+ printf (" %s", opt);
+}
+
static int process_initResponse(Z_InitResponse *res)
{
int ver = 0;
session_mem = odr_extract_mem(in);
session = res;
- for (ver = 0; ver<5; ver++)
+ for (ver = 0; ver < 8; ver++)
if (!ODR_MASK_GET(res->protocolVersion, ver))
break;
}
}
printf ("Options:");
- if (ODR_MASK_GET(res->options, Z_Options_search))
- printf (" search");
- if (ODR_MASK_GET(res->options, Z_Options_present))
- printf (" present");
- if (ODR_MASK_GET(res->options, Z_Options_delSet))
- printf (" delSet");
- if (ODR_MASK_GET(res->options, Z_Options_resourceReport))
- printf (" resourceReport");
- if (ODR_MASK_GET(res->options, Z_Options_resourceCtrl))
- printf (" resourceCtrl");
- if (ODR_MASK_GET(res->options, Z_Options_accessCtrl))
- printf (" accessCtrl");
- if (ODR_MASK_GET(res->options, Z_Options_scan))
- printf (" scan");
- if (ODR_MASK_GET(res->options, Z_Options_sort))
- printf (" sort");
- if (ODR_MASK_GET(res->options, Z_Options_extendedServices))
- printf (" extendedServices");
- if (ODR_MASK_GET(res->options, Z_Options_level_1Segmentation))
- printf (" level1Segmentation");
- if (ODR_MASK_GET(res->options, Z_Options_level_2Segmentation))
- printf (" level2Segmentation");
- if (ODR_MASK_GET(res->options, Z_Options_concurrentOperations))
- printf (" concurrentOperations");
+ yaz_init_opt_decode(res->options, pr_opt, 0);
+ printf ("\n");
+
if (ODR_MASK_GET(res->options, Z_Options_namedResultSets))
- {
- printf (" namedResultSets");
setnumber = 0;
- }
- if (ODR_MASK_GET(res->options, Z_Options_encapsulation))
- printf (" encapsulation");
- if (ODR_MASK_GET(res->options, Z_Options_resultCount))
- printf (" resultCount");
- if (ODR_MASK_GET(res->options, Z_Options_negotiationModel))
- printf (" negotiationModel");
- if (ODR_MASK_GET(res->options, Z_Options_duplicateDetection))
- printf (" duplicateDetection");
- if (ODR_MASK_GET(res->options, Z_Options_queryType104))
- printf (" queryType104");
- printf ("\n");
if (ODR_MASK_GET(res->options, Z_Options_negotiationModel)) {
return 2;
}
+static void show_opt(const char *arg, void *clientData)
+{
+ printf ("%s ", arg);
+}
+
+static int cmd_zversion(const char *arg)
+{
+ if (*arg && arg)
+ z3950_version = atoi(arg);
+ else
+ printf ("version is %d\n", z3950_version);
+ return 0;
+}
+
+static int cmd_options(const char *arg)
+{
+ if (*arg)
+ {
+ int r;
+ int pos;
+ r = yaz_init_opt_encode(&z3950_options, arg, &pos);
+ }
+ else
+ {
+ yaz_init_opt_decode(&z3950_options, show_opt, 0);
+ printf ("\n");
+ }
+ return 0;
+}
+
static int cmd_explain(const char *arg)
{
if (protocol != PROTO_HTTP)
printf (" schema=%s", rec->recordSchema);
printf ("\n");
if (rec->recordData_buf && rec->recordData_len)
- {
fwrite(rec->recordData_buf, 1, rec->recordData_len, stdout);
- printf ("\n");
- }
+ else
+ printf ("No data!");
+ printf("\n");
}
static void handle_srw_explain_response(Z_SRW_explainResponse *res)
{"adm-shutdown", cmd_adm_shutdown, "",NULL,0,NULL},
{"adm-startup", cmd_adm_startup, "",NULL,0,NULL},
{"explain", cmd_explain, "", NULL, 0, NULL},
+ {"options", cmd_options, "", NULL, 0, NULL},
+ {"zversion", cmd_zversion, "", NULL, 0, NULL},
{"help", cmd_help, "", NULL,0,NULL},
{0,0,0,0,0,0}
};
#endif
if (codeset)
outputCharset = xstrdup(codeset);
+
+ ODR_MASK_SET(&z3950_options, Z_Options_search);
+ ODR_MASK_SET(&z3950_options, Z_Options_present);
+ ODR_MASK_SET(&z3950_options, Z_Options_namedResultSets);
+ ODR_MASK_SET(&z3950_options, Z_Options_triggerResourceCtrl);
+ ODR_MASK_SET(&z3950_options, Z_Options_scan);
+ ODR_MASK_SET(&z3950_options, Z_Options_sort);
+ ODR_MASK_SET(&z3950_options, Z_Options_extendedServices);
+ ODR_MASK_SET(&z3950_options, Z_Options_delSet);
while ((ret = options("k:c:q:a:b:m:v:p:u:t:Vxd:", argv, argc, &arg)) != -2)
{