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
Proper scan SRU encoding
[yaz-moved-to-github.git]
/
client
/
client.c
diff --git
a/client/client.c
b/client/client.c
index
d5ef64c
..
638d16e
100644
(file)
--- a/
client/client.c
+++ b/
client/client.c
@@
-1,5
+1,5
@@
/* This file is part of the YAZ toolkit.
/* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2012 Index Data
+ * Copyright (C) 1995-2013 Index Data
* See the file LICENSE for details.
*/
/** \file client.c
* See the file LICENSE for details.
*/
/** \file client.c
@@
-83,6
+83,7
@@
static file_history_t file_history = 0;
static char sru_method[10] = "soap";
static char sru_version[10] = "1.2";
static char sru_method[10] = "soap";
static char sru_version[10] = "1.2";
+static char sru_recordPacking[10] = "";
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;
@@
-702,10
+703,7
@@
static int session_connect_base(const char *arg, const char **basep)
strncpy(type_and_host, arg, sizeof(type_and_host)-1);
type_and_host[sizeof(type_and_host)-1] = '\0';
strncpy(type_and_host, arg, sizeof(type_and_host)-1);
type_and_host[sizeof(type_and_host)-1] = '\0';
- if (yazProxy)
- conn = cs_create_host(yazProxy, 1, &add);
- else
- conn = cs_create_host(arg, 1, &add);
+ conn = cs_create_host_proxy(arg, 1, &add, yazProxy);
if (!conn)
{
printf("Could not resolve address %s\n", arg);
if (!conn)
{
printf("Could not resolve address %s\n", arg);
@@
-926,13
+924,13
@@
static void display_record(Z_External *r)
const char *octet_buf = (const char*)r->u.octet_aligned->buf;
size_t octet_len = r->u.octet_aligned->len;
if (!oid_oidcmp(oid, yaz_oid_recsyn_xml)
const char *octet_buf = (const char*)r->u.octet_aligned->buf;
size_t octet_len = r->u.octet_aligned->len;
if (!oid_oidcmp(oid, yaz_oid_recsyn_xml)
- || !oid_oidcmp(oid, yaz_oid_recsyn_xml)
+ || !oid_oidcmp(oid, yaz_oid_recsyn_application_xml)
|| !oid_oidcmp(oid, yaz_oid_recsyn_html))
{
print_xml_record(octet_buf, octet_len);
}
|| !oid_oidcmp(oid, yaz_oid_recsyn_html))
{
print_xml_record(octet_buf, octet_len);
}
- else if (yaz_oid_is_iso2709(oid))
+ else
{
const char *result;
size_t rlen;
{
const char *result;
size_t rlen;
@@
-978,17
+976,14
@@
static void display_record(Z_External *r)
}
else
{
}
else
{
- printf("bad MARC. Dumping as it is:\n");
+ if (yaz_oid_is_iso2709(oid))
+ printf("bad MARC. Dumping as it is:\n");
print_record(octet_buf, octet_len);
}
yaz_marc_destroy(mt);
if (cd)
yaz_iconv_close(cd);
}
print_record(octet_buf, octet_len);
}
yaz_marc_destroy(mt);
if (cd)
yaz_iconv_close(cd);
}
- else
- {
- print_record(octet_buf, octet_len);
- }
marc_file_write(octet_buf, r->u.octet_aligned->len);
}
else if (oid && !oid_oidcmp(oid, yaz_oid_recsyn_sutrs))
marc_file_write(octet_buf, r->u.octet_aligned->len);
}
else if (oid && !oid_oidcmp(oid, yaz_oid_recsyn_sutrs))
@@
-1423,12
+1418,12
@@
static int send_SRW_scanRequest(const char *arg, Odr_int *pos, int num)
switch (queryType)
{
case QueryType_CQL:
switch (queryType)
{
case QueryType_CQL:
- sr->u.scan_request->query_type = Z_SRW_query_type_cql;
- sr->u.scan_request->scanClause.cql = encode_SRW_term(out, arg);
+ sr->u.scan_request->queryType = "cql";
+ sr->u.scan_request->scanClause = encode_SRW_term(out, arg);
break;
case QueryType_Prefix:
break;
case QueryType_Prefix:
- sr->u.scan_request->query_type = Z_SRW_query_type_pqf;
- sr->u.scan_request->scanClause.pqf = encode_SRW_term(out, arg);
+ sr->u.scan_request->queryType = "pqf";
+ sr->u.scan_request->scanClause = encode_SRW_term(out, arg);
break;
default:
printf("Only CQL and PQF supported in SRW\n");
break;
default:
printf("Only CQL and PQF supported in SRW\n");
@@
-1462,23
+1457,25
@@
static int send_SRW_searchRequest(const char *arg)
switch (queryType)
{
case QueryType_CQL:
switch (queryType)
{
case QueryType_CQL:
- srw_sr->u.request->query_type = Z_SRW_query_type_cql;
- srw_sr->u.request->query.cql = encode_SRW_term(srw_sr_odr_out, arg);
+ srw_sr->u.request->queryType = "cql";
+ srw_sr->u.request->query = encode_SRW_term(srw_sr_odr_out, arg);
- sr->u.request->query_type = Z_SRW_query_type_cql;
- sr->u.request->query.cql = encode_SRW_term(srw_sr_odr_out, arg);
+ sr->u.request->queryType = "cql";
+ sr->u.request->query = encode_SRW_term(srw_sr_odr_out, arg);
break;
case QueryType_Prefix:
break;
case QueryType_Prefix:
- srw_sr->u.request->query_type = Z_SRW_query_type_pqf;
- srw_sr->u.request->query.pqf = encode_SRW_term(srw_sr_odr_out, arg);
+ srw_sr->u.request->queryType = "pqf";
+ srw_sr->u.request->query = encode_SRW_term(srw_sr_odr_out, arg);
- sr->u.request->query_type = Z_SRW_query_type_pqf;
- sr->u.request->query.pqf = encode_SRW_term(srw_sr_odr_out, arg);
+ sr->u.request->queryType = "pqf";
+ sr->u.request->query = encode_SRW_term(srw_sr_odr_out, arg);
break;
default:
printf("Only CQL and PQF supported in SRW\n");
return 0;
}
break;
default:
printf("Only CQL and PQF supported in SRW\n");
return 0;
}
+ if (*sru_recordPacking)
+ sr->u.request->recordPacking = sru_recordPacking;
sru_maximumRecords = 0;
sr->u.request->maximumRecords = odr_intdup(out, 0);
sr->u.request->facetList = facet_list;
sru_maximumRecords = 0;
sr->u.request->maximumRecords = odr_intdup(out, 0);
sr->u.request->facetList = facet_list;
@@
-1529,7
+1526,7
@@
static int send_Z3950_searchRequest(const char *arg)
printf("CCL ERROR: %s\n", ccl_err_msg(error));
return 0;
}
printf("CCL ERROR: %s\n", ccl_err_msg(error));
return 0;
}
- }
+ }
else if (myQueryType == QueryType_CQL2RPN)
{
/* ### All this code should be wrapped in a utility function */
else if (myQueryType == QueryType_CQL2RPN)
{
/* ### All this code should be wrapped in a utility function */
@@
-1698,11
+1695,7
@@
static void display_facet(Z_FacetField *facet)
{
Z_AttributeList *al = facet->attributes;
struct yaz_facet_attr attr_values;
{
Z_AttributeList *al = facet->attributes;
struct yaz_facet_attr attr_values;
- attr_values.errcode = 0;
- attr_values.limit = -1;
- attr_values.useattr = "NONE";
- attr_values.relation = "default";
-
+ yaz_facet_attr_init(&attr_values);
yaz_facet_attr_get_z_attributes(al, &attr_values);
if (!attr_values.errcode)
{
yaz_facet_attr_get_z_attributes(al, &attr_values);
if (!attr_values.errcode)
{
@@
-2832,7
+2825,8
@@
static int cmd_sru(const char *arg)
}
else
{
}
else
{
- int r = sscanf(arg, "%9s %9s", sru_method, sru_version);
+ int r = sscanf(arg, "%9s %9s %9s", sru_method, sru_version,
+ sru_recordPacking);
if (r >= 1)
{
if (!yaz_matchstr(sru_method, "post"))
if (r >= 1)
{
if (!yaz_matchstr(sru_method, "post"))
@@
-3020,7
+3014,7
@@
static int parse_show_args(const char *arg_c, char *setstring,
sprintf(setstring, "%d", setnumber);
else
*setstring = '\0';
sprintf(setstring, "%d", setnumber);
else
*setstring = '\0';
-
+
token_len = check_token(arg_c, "format");
if (token_len)
{
token_len = check_token(arg_c, "format");
if (token_len)
{
@@
-3175,6
+3169,8
@@
static int send_SRW_presentRequest(const char *arg)
return 0;
if (!parse_show_args(arg, setstring, &setno, &nos))
return 0;
return 0;
if (!parse_show_args(arg, setstring, &setno, &nos))
return 0;
+ if (*sru_recordPacking)
+ sr->u.request->recordPacking = sru_recordPacking;
sr->u.request->startRecord = odr_intdup(out, setno);
sru_maximumRecords = nos;
sr->u.request->maximumRecords = odr_intdup(out, nos);
sr->u.request->startRecord = odr_intdup(out, setno);
sru_maximumRecords = nos;
sr->u.request->maximumRecords = odr_intdup(out, nos);
@@
-3285,10
+3281,10
@@
static int cmd_cancel(const char *arg)
apdu->u.triggerResourceControlRequest;
bool_t rfalse = 0;
char command[16];
apdu->u.triggerResourceControlRequest;
bool_t rfalse = 0;
char command[16];
-
+
*command = '\0';
sscanf(arg, "%15s", command);
*command = '\0';
sscanf(arg, "%15s", command);
-
+
if (only_z3950())
return 0;
if (session_initResponse &&
if (only_z3950())
return 0;
if (session_initResponse &&
@@
-3301,7
+3297,7
@@
static int cmd_cancel(const char *arg)
*req->requestedAction = Z_TriggerResourceControlRequest_cancel;
req->resultSetWanted = &rfalse;
req->referenceId = set_refid(out);
*req->requestedAction = Z_TriggerResourceControlRequest_cancel;
req->resultSetWanted = &rfalse;
req->referenceId = set_refid(out);
-
+
send_apdu(apdu);
printf("Sent cancel request\n");
if (!strcmp(command, "wait"))
send_apdu(apdu);
printf("Sent cancel request\n");
if (!strcmp(command, "wait"))
@@
-3611,7
+3607,7
@@
static int cmd_scan_common(const char *set, const char *arg)
scan_query = last_scan_query;
scan_term = last_scan_line;
}
scan_query = last_scan_query;
scan_term = last_scan_line;
}
- else
+ else
{
strcpy(last_scan_query, arg);
scan_query = arg;
{
strcpy(last_scan_query, arg);
scan_query = arg;
@@
-4085,7
+4081,7
@@
static int cmd_set_auto_reconnect(const char* arg)
printf("Error use on or off\n");
return 1;
}
printf("Error use on or off\n");
return 1;
}
-
+
if (auto_reconnect)
printf("Set auto reconnect enabled.\n");
else
if (auto_reconnect)
printf("Set auto reconnect enabled.\n");
else
@@
-4278,7
+4274,7
@@
static void initialize(const char *rc_file)
fprintf(stderr, "failed to allocate ODR streams\n");
exit(1);
}
fprintf(stderr, "failed to allocate ODR streams\n");
exit(1);
}
-
+
strcpy(scan_position, "1");
setvbuf(stdout, 0, _IONBF, 0);
strcpy(scan_position, "1");
setvbuf(stdout, 0, _IONBF, 0);
@@
-4448,9
+4444,11
@@
static void http_response(Z_HTTP_Response *hres)
if (ret == 0 && sr->which == Z_SRW_searchRetrieve_response)
handle_srw_response(sr->u.response);
if (ret == 0 && sr->which == Z_SRW_searchRetrieve_response)
handle_srw_response(sr->u.response);
+ else if (ret == 0 && sr->which == Z_SRW_scan_response)
+ handle_srw_scan_response(sr->u.scan_response);
else
{
else
{
- printf("Decoding of SOLR package failed\n");
+ printf("Decoding of Solr package failed\n");
ret = -1;
}
odr_destroy(o);
ret = -1;
}
odr_destroy(o);
@@
-4459,10
+4457,10
@@
static void http_response(Z_HTTP_Response *hres)
{
Z_SOAP *soap_package = 0;
ODR o = odr_createmem(ODR_DECODE);
{
Z_SOAP *soap_package = 0;
ODR o = odr_createmem(ODR_DECODE);
- Z_SOAP_Handler soap_handlers[4] = {
- {YAZ_XMLNS_SRU_v1_1, 0, (Z_SOAP_fun) yaz_srw_codec},
- {YAZ_XMLNS_SRU_v2_response, 0, (Z_SOAP_fun) yaz_srw_codec},
+ Z_SOAP_Handler soap_handlers[] = {
+ {YAZ_XMLNS_SRU_v2_mask, 0, (Z_SOAP_fun) yaz_srw_codec},
{YAZ_XMLNS_UPDATE_v0_9, 0, (Z_SOAP_fun) yaz_ucp_codec},
{YAZ_XMLNS_UPDATE_v0_9, 0, (Z_SOAP_fun) yaz_ucp_codec},
+ {YAZ_XMLNS_SRU_v1_response, 0, (Z_SOAP_fun) yaz_srw_codec},
{0, 0, 0}
};
ret = z_soap_codec(o, &soap_package,
{0, 0, 0}
};
ret = z_soap_codec(o, &soap_package,
@@
-4952,7
+4950,7
@@
static int cmd_wait_response(const char *arg)
{
int i;
int wait_for = atoi(arg);
{
int i;
int wait_for = atoi(arg);
- if (wait_for < 1)
+ if (wait_for < 1)
wait_for = 1;
for (i = 0 ; i < wait_for; ++i )
wait_for = 1;
for (i = 0 ; i < wait_for; ++i )