projects
/
yaz-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Towards 3.0.24.
[yaz-moved-to-github.git]
/
client
/
client.c
diff --git
a/client/client.c
b/client/client.c
index
23e9af2
..
ee278ee
100644
(file)
--- a/
client/client.c
+++ b/
client/client.c
@@
-2,7
+2,7
@@
* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: client.c,v 1.348 2007-07-13 09:28:43 adam Exp $
+ * $Id: client.c,v 1.356 2007-12-27 13:27:40 adam Exp $
*/
/** \file client.c
* \brief yaz-client program
*/
/** \file client.c
* \brief yaz-client program
@@
-90,7
+90,8
@@
static file_history_t file_history = 0;
static file_history_t file_history = 0;
-static char *sru_method = "soap";
+static char sru_method[10] = "soap";
+static char sru_version[10] = "1.2";
static char *codeset = 0; /* character set for output */
static int hex_dump = 0;
static char *dump_file_prefix = 0;
static char *codeset = 0; /* character set for output */
static int hex_dump = 0;
static char *dump_file_prefix = 0;
@@
-597,29
+598,27
@@
static int set_base(const char *arg)
return 1;
}
return 1;
}
-static int parse_cmd_doc(const char **arg, ODR out, char **buf,
- int *len, int opt)
+static int parse_cmd_doc(const char **arg, ODR out, char **buf, int *len)
{
const char *sep;
while (**arg && strchr(" \t\n\r\f", **arg))
(*arg)++;
{
const char *sep;
while (**arg && strchr(" \t\n\r\f", **arg))
(*arg)++;
- if ((*arg)[0] == '\"' && (sep=strchr(*arg+1, '"')))
+ if (**arg == '\0')
{
{
- (*arg)++;
- *len = sep - *arg;
- *buf = odr_strdupn(out, *arg, *len);
- (*arg) = sep+1;
- return 1;
+ return 0;
}
}
- else if ((*arg)[0] && (*arg)[0] != '\"')
+ else if ((*arg)[0] == '<')
{
long fsize;
FILE *inf;
{
long fsize;
FILE *inf;
- const char *fname = *arg;
-
+ const char *fname;
+ const char *arg_start = ++(*arg);
+
while (**arg != '\0' && **arg != ' ')
(*arg)++;
while (**arg != '\0' && **arg != ' ')
(*arg)++;
+ fname = odr_strdupn(out, arg_start, *arg - arg_start);
+
inf = fopen(fname, "rb");
if (!inf)
{
inf = fopen(fname, "rb");
if (!inf)
{
@@
-640,7
+639,8
@@
static int parse_cmd_doc(const char **arg, ODR out, char **buf,
return 0;
}
*len = fsize;
return 0;
}
*len = fsize;
- *buf = (char *) odr_malloc(out, fsize);
+ *buf = (char *) odr_malloc(out, fsize+1);
+ (*buf)[fsize] = '\0';
if (fread(*buf, 1, fsize, inf) != fsize)
{
printf("Unable to read %s\n", fname);
if (fread(*buf, 1, fsize, inf) != fsize)
{
printf("Unable to read %s\n", fname);
@@
-648,21
+648,25
@@
static int parse_cmd_doc(const char **arg, ODR out, char **buf,
return 0;
}
fclose(inf);
return 0;
}
fclose(inf);
- return 1;
}
}
- else if (**arg == '\0')
+ else if ((*arg)[0] == '\"' && (sep=strchr(*arg+1, '"')))
{
{
- if (opt)
- {
- *len = 0;
- *buf = 0;
- return 1;
- }
- printf("Missing doc argument\n");
+ (*arg)++;
+ *len = sep - *arg;
+ *buf = odr_strdupn(out, *arg, *len);
+ (*arg) = sep+1;
}
else
}
else
- printf("Bad doc argument %s\n", *arg);
- return 0;
+ {
+ const char *arg_start = *arg;
+
+ while (**arg != '\0' && **arg != ' ')
+ (*arg)++;
+
+ *len = *arg - arg_start;
+ *buf = odr_strdupn(out, arg_start, *len);
+ }
+ return 1;
}
static int cmd_base(const char *arg)
}
static int cmd_base(const char *arg)
@@
-720,8
+724,6
@@
int session_connect(const char *arg)
return 0;
}
#if YAZ_HAVE_XML2
return 0;
}
#if YAZ_HAVE_XML2
- if (conn->protocol == PROTO_HTTP)
- queryType = QueryType_CQL;
#else
if (conn->protocol == PROTO_HTTP)
{
#else
if (conn->protocol == PROTO_HTTP)
{
@@
-782,12
+784,16
@@
int session_connect(const char *arg)
int cmd_open(const char *arg)
{
int cmd_open(const char *arg)
{
+ int r;
if (arg)
{
strncpy (cur_host, arg, sizeof(cur_host)-1);
cur_host[sizeof(cur_host)-1] = 0;
}
if (arg)
{
strncpy (cur_host, arg, sizeof(cur_host)-1);
cur_host[sizeof(cur_host)-1] = 0;
}
- return session_connect(cur_host);
+ r = session_connect(cur_host);
+ if (conn && conn->protocol == PROTO_HTTP)
+ queryType = QueryType_CQL;
+ return r;
}
void try_reconnect(void)
}
void try_reconnect(void)
@@
-843,8
+849,8
@@
int cmd_authentication(const char *arg)
au.which = Z_IdAuthentication_idPass;
au.u.idPass = &idPass;
idPass.groupId = NULL;
au.which = Z_IdAuthentication_idPass;
au.u.idPass = &idPass;
idPass.groupId = NULL;
- idPass.userId = user;
- idPass.password = group;
+ idPass.userId = !strcmp(user, "-") ? 0 : user;
+ idPass.password = !strcmp(group, "-") ? 0 : group;
printf("Authentication set to User (%s), Pass (%s)\n", user, group);
}
if (r == 3)
printf("Authentication set to User (%s), Pass (%s)\n", user, group);
}
if (r == 3)
@@
-1273,15
+1279,15
@@
static int send_srw(Z_SRW_PDU *sr)
gdu = z_get_HTTP_Request_host_path(out, host_port, path);
gdu = z_get_HTTP_Request_host_path(out, host_port, path);
- if (!strcmp(sru_method, "get"))
+ if (!yaz_matchstr(sru_method, "get"))
{
yaz_sru_get_encode(gdu->u.HTTP_Request, sr, out, charset);
}
{
yaz_sru_get_encode(gdu->u.HTTP_Request, sr, out, charset);
}
- else if (!strcmp(sru_method, "post"))
+ else if (!yaz_matchstr(sru_method, "post"))
{
yaz_sru_post_encode(gdu->u.HTTP_Request, sr, out, charset);
}
{
yaz_sru_post_encode(gdu->u.HTTP_Request, sr, out, charset);
}
- else if (!strcmp(sru_method, "soap"))
+ else if (!yaz_matchstr(sru_method, "soap"))
{
yaz_sru_soap_encode(gdu->u.HTTP_Request, sr, out, charset);
}
{
yaz_sru_soap_encode(gdu->u.HTTP_Request, sr, out, charset);
}
@@
-1344,7
+1350,7
@@
static int send_SRW_scanRequest(const char *arg, int pos, int num)
Z_SRW_PDU *sr = 0;
/* regular requestse .. */
Z_SRW_PDU *sr = 0;
/* regular requestse .. */
- sr = yaz_srw_get(out, Z_SRW_scan_request);
+ sr = yaz_srw_get_pdu(out, Z_SRW_scan_request, sru_version);
switch(queryType)
{
switch(queryType)
{
@@
-1379,10
+1385,11
@@
static int send_SRW_searchRequest(const char *arg)
setno = 1;
/* save this for later .. when fetching individual records */
setno = 1;
/* save this for later .. when fetching individual records */
- srw_sr = yaz_srw_get(srw_sr_odr_out, Z_SRW_searchRetrieve_request);
+ srw_sr = yaz_srw_get_pdu(srw_sr_odr_out, Z_SRW_searchRetrieve_request,
+ sru_version);
/* regular request .. */
/* regular request .. */
- sr = yaz_srw_get(out, Z_SRW_searchRetrieve_request);
+ sr = yaz_srw_get_pdu(out, Z_SRW_searchRetrieve_request, sru_version);
switch(queryType)
{
switch(queryType)
{
@@
-1915,6
+1922,20
@@
void process_ESResponse(Z_ExtendedServicesResponse *res)
}
}
}
}
}
}
+ if (ext->which == Z_External_itemOrder)
+ {
+ Z_IOTaskPackage *otp = ext->u.itemOrder->u.taskPackage;
+ if (otp && otp->targetPart && otp->targetPart->itemRequest)
+ {
+ Z_External *ext = otp->targetPart->itemRequest;
+ if (ext->which == Z_External_octet)
+ {
+ Odr_oct *doc = ext->u.octet_aligned;
+ printf("Got itemRequest doc %.*s\n",
+ doc->len, doc->buf);
+ }
+ }
+ }
}
if (res->taskPackage && res->taskPackage->which == Z_External_octet)
{
}
if (res->taskPackage && res->taskPackage->which == Z_External_octet)
{
@@
-2151,17
+2172,17
@@
static int cmd_update_SRW(int action_no, const char *recid,
static int cmd_update_common(const char *arg, int version)
{
static int cmd_update_common(const char *arg, int version)
{
- char action[20], recid_buf[20];
+ char *action_buf;
+ int action_len;
+ char *recid_buf;
+ int recid_len;
const char *recid = 0;
char *rec_buf;
int rec_len;
int action_no;
int noread = 0;
const char *recid = 0;
char *rec_buf;
int rec_len;
int action_no;
int noread = 0;
- *action = 0;
- *recid_buf = 0;
- sscanf (arg, "%19s %19s%n", action, recid_buf, &noread);
- if (noread == 0)
+ if (parse_cmd_doc(&arg, out, &action_buf, &action_len) == 0)
{
printf("Use: update action recid [fname]\n");
printf(" where action is one of insert,replace,delete.update\n");
{
printf("Use: update action recid [fname]\n");
printf(" where action is one of insert,replace,delete.update\n");
@@
-2170,17
+2191,23
@@
static int cmd_update_common(const char *arg, int version)
return 0;
}
return 0;
}
- if (!strcmp (action, "insert"))
+ if (parse_cmd_doc(&arg, out, &recid_buf, &recid_len) == 0)
+ {
+ printf("Missing recid\n");
+ return 0;
+ }
+
+ if (!strcmp(action_buf, "insert"))
action_no = Z_IUOriginPartToKeep_recordInsert;
action_no = Z_IUOriginPartToKeep_recordInsert;
- else if (!strcmp (action, "replace"))
+ else if (!strcmp(action_buf, "replace"))
action_no = Z_IUOriginPartToKeep_recordReplace;
action_no = Z_IUOriginPartToKeep_recordReplace;
- else if (!strcmp (action, "delete"))
+ else if (!strcmp(action_buf, "delete"))
action_no = Z_IUOriginPartToKeep_recordDelete;
action_no = Z_IUOriginPartToKeep_recordDelete;
- else if (!strcmp (action, "update"))
+ else if (!strcmp(action_buf, "update"))
action_no = Z_IUOriginPartToKeep_specialUpdate;
else
{
action_no = Z_IUOriginPartToKeep_specialUpdate;
else
{
- printf ("Bad action: %s\n", action);
+ printf ("Bad action: %s\n", action_buf);
printf ("Possible values: insert, replace, delete, update\n");
return 0;
}
printf ("Possible values: insert, replace, delete, update\n");
return 0;
}
@@
-2189,14
+2216,14
@@
static int cmd_update_common(const char *arg, int version)
recid = recid_buf;
arg += noread;
recid = recid_buf;
arg += noread;
- if (parse_cmd_doc(&arg, out, &rec_buf, &rec_len, 1) == 0)
+ if (parse_cmd_doc(&arg, out, &rec_buf, &rec_len) == 0)
return 0;
#if YAZ_HAVE_XML2
if (protocol == PROTO_HTTP)
return 0;
#if YAZ_HAVE_XML2
if (protocol == PROTO_HTTP)
- return cmd_update_SRW(action_no, recid, rec_buf, rec_len);
+ return cmd_update_SRW(action_no, recid_buf, rec_buf, rec_len);
#endif
#endif
- return cmd_update_Z3950(version, action_no, recid, rec_buf, rec_len);
+ return cmd_update_Z3950(version, action_no, recid_buf, rec_buf, rec_len);
}
#if YAZ_HAVE_XML2
}
#if YAZ_HAVE_XML2
@@
-2204,7
+2231,7
@@
static int cmd_update_SRW(int action_no, const char *recid,
char *rec_buf, int rec_len)
{
if (!conn)
char *rec_buf, int rec_len)
{
if (!conn)
- cmd_open(0);
+ session_connect(cur_host);
if (!conn)
return 0;
else
if (!conn)
return 0;
else
@@
-2286,6
+2313,12
@@
static int cmd_update_Z3950(int version, int action_no, const char *recid,
toKeep->databaseName = databaseNames[0];
toKeep->schema = 0;
toKeep->databaseName = databaseNames[0];
toKeep->schema = 0;
+ if (record_schema)
+ {
+ toKeep->schema = yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_SCHEMA,
+ record_schema, out);
+ }
toKeep->elementSetName = 0;
toKeep->action = (int *) odr_malloc(out, sizeof(*toKeep->action));
toKeep->elementSetName = 0;
toKeep->action = (int *) odr_malloc(out, sizeof(*toKeep->action));
@@
-2328,6
+2361,12
@@
static int cmd_update_Z3950(int version, int action_no, const char *recid,
toKeep->databaseName = databaseNames[0];
toKeep->schema = 0;
toKeep->databaseName = databaseNames[0];
toKeep->schema = 0;
+ if (record_schema)
+ {
+ toKeep->schema = yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_SCHEMA,
+ record_schema, out);
+ }
toKeep->elementSetName = 0;
toKeep->actionQualifier = 0;
toKeep->action = (int *) odr_malloc(out, sizeof(*toKeep->action));
toKeep->elementSetName = 0;
toKeep->actionQualifier = 0;
toKeep->action = (int *) odr_malloc(out, sizeof(*toKeep->action));
@@
-2391,7
+2430,7
@@
static int cmd_xmles(const char *arg)
}
arg += noread;
if (parse_cmd_doc(&arg, out, &asn_buf,
}
arg += noread;
if (parse_cmd_doc(&arg, out, &asn_buf,
- &ext->u.single_ASN1_type->len, 0) == 0)
+ &ext->u.single_ASN1_type->len) == 0)
return 0;
ext->u.single_ASN1_type->buf = (unsigned char *) asn_buf;
return 0;
ext->u.single_ASN1_type->buf = (unsigned char *) asn_buf;
@@
-2468,7
+2507,7
@@
static int cmd_explain(const char *arg)
return 0;
#if YAZ_HAVE_XML2
if (!conn)
return 0;
#if YAZ_HAVE_XML2
if (!conn)
- cmd_open(0);
+ session_connect(cur_host);
if (conn)
{
Z_SRW_PDU *sr = 0;
if (conn)
{
Z_SRW_PDU *sr = 0;
@@
-2505,19
+2544,26
@@
static int cmd_sru(const char *arg)
if (!*arg)
{
printf("SRU method is: %s\n", sru_method);
if (!*arg)
{
printf("SRU method is: %s\n", sru_method);
+ printf("SRU version is: %s\n", sru_version);
}
else
{
}
else
{
- if (!yaz_matchstr(arg, "post"))
- sru_method = "post";
- else if (!yaz_matchstr(arg, "get"))
- sru_method = "get";
- else if (!yaz_matchstr(arg, "soap"))
- sru_method = "soap";
- else
+ int r;
+ r = sscanf(arg, "%9s %9s", sru_method, sru_version);
+ if (r >= 1)
{
{
- printf("Unknown SRU method: %s\n", arg);
- printf("Specify one of POST, GET, SOAP\n");
+ if (!yaz_matchstr(sru_method, "post"))
+ ;
+ else if (!yaz_matchstr(sru_method, "get"))
+ ;
+ else if (!yaz_matchstr(sru_method, "soap"))
+ ;
+ else
+ {
+ strcpy(sru_method, "soap");
+ printf("Unknown SRU method: %s\n", arg);
+ printf("Specify one of POST, GET, SOAP\n");
+ }
}
}
return 0;
}
}
return 0;
@@
-2534,7
+2580,7
@@
static int cmd_find(const char *arg)
{
#if YAZ_HAVE_XML2
if (!conn)
{
#if YAZ_HAVE_XML2
if (!conn)
- cmd_open(0);
+ session_connect(cur_host);
if (!conn)
return 0;
if (!send_SRW_searchRequest(arg))
if (!conn)
return 0;
if (!send_SRW_searchRequest(arg))
@@
-2811,7
+2857,7
@@
static int cmd_show(const char *arg)
{
#if YAZ_HAVE_XML2
if (!conn)
{
#if YAZ_HAVE_XML2
if (!conn)
- cmd_open(0);
+ session_connect(cur_host);
if (!conn)
return 0;
if (!send_SRW_presentRequest(arg))
if (!conn)
return 0;
if (!send_SRW_presentRequest(arg))
@@
-3018,13
+3064,13
@@
void display_term(Z_TermInfo *t)
if (t->displayTerm)
printf("%s", t->displayTerm);
else if (t->term->which == Z_Term_general)
if (t->displayTerm)
printf("%s", t->displayTerm);
else if (t->term->which == Z_Term_general)
- {
printf("%.*s", t->term->u.general->len, t->term->u.general->buf);
printf("%.*s", t->term->u.general->len, t->term->u.general->buf);
- sprintf(last_scan_line, "%.*s", t->term->u.general->len,
- t->term->u.general->buf);
- }
else
printf("Term (not general)");
else
printf("Term (not general)");
+ if (t->term->which == Z_Term_general)
+ sprintf(last_scan_line, "%.*s", t->term->u.general->len,
+ t->term->u.general->buf);
+
if (t->globalOccurrences)
printf (" (%d)\n", *t->globalOccurrences);
else
if (t->globalOccurrences)
printf (" (%d)\n", *t->globalOccurrences);
else
@@
-3158,7
+3204,7
@@
static int cmd_scan_common(const char *set, const char *arg)
{
#if YAZ_HAVE_XML2
if (!conn)
{
#if YAZ_HAVE_XML2
if (!conn)
- cmd_open(0);
+ session_connect(cur_host);
if (!conn)
return 0;
if (*arg)
if (!conn)
return 0;
if (*arg)
@@
-4039,7
+4085,7
@@
void wait_and_handle_response(int one_response_only)
{
cs_close(conn);
conn = 0;
{
cs_close(conn);
conn = 0;
- cmd_open(0);
+ session_connect(cur_host);
reconnect_ok = 0;
if (conn)
{
reconnect_ok = 0;
if (conn)
{
@@
-4516,7
+4562,7
@@
static struct {
{"zversion", cmd_zversion, "", NULL, 0, NULL},
{"help", cmd_help, "", NULL,0,NULL},
{"init", cmd_init, "", NULL,0,NULL},
{"zversion", cmd_zversion, "", NULL, 0, NULL},
{"help", cmd_help, "", NULL,0,NULL},
{"init", cmd_init, "", NULL,0,NULL},
- {"sru", cmd_sru, "", NULL,0,NULL},
+ {"sru", cmd_sru, "<method> <version>", NULL,0,NULL},
{"exit", cmd_quit, "",NULL,0,NULL},
{0,0,0,0,0,0}
};
{"exit", cmd_quit, "",NULL,0,NULL},
{0,0,0,0,0,0}
};