X-Git-Url: http://lists.indexdata.dk/cgi-bin?a=blobdiff_plain;f=client%2Fclient.c;h=9b050de26b943101386da43f7d54756c2537b9aa;hb=f60c0db8c4379047cdd75e2be50549abc0a1c74a;hp=a6b78654c3306e96d381080d4ac34ec915551193;hpb=08f7b85c9ee7b4146cf61998d54ebd2cea93e89a;p=yaz-moved-to-github.git
diff --git a/client/client.c b/client/client.c
index a6b7865..9b050de 100644
--- 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.
*
- * $Id: client.c,v 1.336 2007-05-03 08:04:10 adam Exp $
+ * $Id: client.c,v 1.340 2007-05-30 08:12:16 adam Exp $
*/
/** \file client.c
* \brief yaz-client program
@@ -173,8 +173,8 @@ int rl_attempted_completion_over = 0;
#define AVOID_MARC_DECODE 1
#define maxOtherInfosSupported 10
-struct {
- int oid[OID_SIZE];
+struct eoi {
+ Odr_oid oid[OID_SIZE];
char* value;
} extraOtherInfos[maxOtherInfosSupported];
@@ -415,11 +415,9 @@ static int process_initResponse(Z_InitResponse *res)
}
else if (uif->which == Z_External_single)
{
- const int *oclc_oid = yaz_string_to_oid(yaz_oid_std(),
- CLASS_GENERAL,
- "OCLC-userInfo");
Odr_any *sat = uif->u.single_ASN1_type;
- if (!oid_oidcmp(uif->direct_reference, oclc_oid))
+ if (!oid_oidcmp(uif->direct_reference,
+ yaz_oid_userinfo_oclc_userinfo))
{
Z_OCLC_UserInformation *oclc_ui;
ODR decode = odr_createmem(ODR_DECODE);
@@ -624,7 +622,7 @@ static int parse_cmd_doc(const char **arg, ODR out, char **buf,
return 0;
}
*len = fsize;
- *buf = odr_malloc(out, fsize);
+ *buf = (char *) odr_malloc(out, fsize);
if (fread(*buf, 1, fsize, inf) != fsize)
{
printf("Unable to read %s\n", fname);
@@ -859,7 +857,7 @@ static void print_record(const unsigned char *buf, size_t len)
static void display_record(Z_External *r)
{
- const int *oid = r->direct_reference;
+ const Odr_oid *oid = r->direct_reference;
record_last = r;
/*
@@ -867,7 +865,7 @@ static void display_record(Z_External *r)
*/
if (oid)
{
- int oclass;
+ oid_class oclass;
char oid_name_buf[OID_STR_MAX];
const char *oid_name
= yaz_oid_to_string_buf(oid, &oclass, oid_name_buf);
@@ -934,16 +932,7 @@ static void display_record(Z_External *r)
}
else
{
- const int *oidsuffix = oid_oidlen(oid) > 1
- ? oid + oid_oidlen(oid)-2 : 0;
- if (
-#if AVOID_MARC_DECODE
- /* primitive check for a marc OID 5.1-29 except 16 */
- oidsuffix[0] == 5 && oidsuffix[1] < 30 && oidsuffix[1] != 16
-#else
- 1
-#endif
- )
+ if (oid && yaz_oid_is_iso2709(oid))
{
const char *result;
size_t rlen;
@@ -1161,7 +1150,7 @@ static void display_diagrecs(Z_DiagRec **pp, int num)
printf("Missing diagset\n");
else
{
- int oclass;
+ oid_class oclass;
char diag_name_buf[OID_STR_MAX];
const char *diag_name = 0;
diag_name = yaz_oid_to_string_buf
@@ -1260,7 +1249,7 @@ static int send_srw(Z_SRW_PDU *sr)
Z_GDU *gdu;
char *path = 0;
- path = odr_malloc(out, 2+strlen(databaseNames[0]));
+ path = (char *) odr_malloc(out, 2+strlen(databaseNames[0]));
*path = '/';
strcpy(path+1, databaseNames[0]);
@@ -1690,7 +1679,7 @@ static void print_oid(int iLevel, const char *pTag, Odr_oid *pOid)
{
if (pOid != NULL)
{
- int *pInt = pOid;
+ Odr_oid *pInt = pOid;
print_level(iLevel);
printf("%s:", pTag);
@@ -1934,10 +1923,8 @@ static Z_External *create_external_itemRequest(void)
}
else
{
- const int *ill_oid = yaz_string_to_oid(yaz_oid_std(),
- CLASS_GENERAL, "ISOILL-1");
r = (Z_External *) odr_malloc (out, sizeof(*r));
- r->direct_reference = odr_oiddup(out, ill_oid);
+ r->direct_reference = odr_oiddup(out, yaz_oid_general_isoill_1);
r->indirect_reference = 0;
r->descriptor = 0;
r->which = Z_External_single;
@@ -1987,13 +1974,10 @@ static Z_External *create_external_ILL_APDU(int which)
}
else
{
- const int *ill_oid = yaz_string_to_oid(yaz_oid_std(),
- CLASS_GENERAL, "ISOILL-1");
-
ill_request_buf = odr_getbuf (out, &ill_request_size, 0);
r = (Z_External *) odr_malloc (out, sizeof(*r));
- r->direct_reference = odr_oiddup(out, ill_oid);
+ r->direct_reference = odr_oiddup(out, yaz_oid_general_isoill_1);
r->indirect_reference = 0;
r->descriptor = 0;
r->which = Z_External_single;
@@ -2017,10 +2001,7 @@ static Z_External *create_external_ILL_APDU(int which)
static Z_External *create_ItemOrderExternal(const char *type, int itemno)
{
Z_External *r = (Z_External *) odr_malloc(out, sizeof(Z_External));
- const int *itemorder_oid = yaz_string_to_oid(yaz_oid_std(),
- CLASS_EXTSERV,
- "Item order");
- r->direct_reference = odr_oiddup(out, itemorder_oid);
+ r->direct_reference = odr_oiddup(out, yaz_oid_extserv_item_order);
r->indirect_reference = 0;
r->descriptor = 0;
@@ -2068,8 +2049,6 @@ static Z_External *create_ItemOrderExternal(const char *type, int itemno)
}
else if (!strcmp(type, "xml") || !strcmp(type, "3"))
{
- const int *oid_xml = yaz_string_to_oid(yaz_oid_std(),
- CLASS_RECSYN, "xml");
const char *xml_buf =
"\n"
" request\n"
@@ -2077,7 +2056,7 @@ static Z_External *create_ItemOrderExternal(const char *type, int itemno)
" 1212 \n"
"";
r->u.itemOrder->u.esRequest->notToKeep->itemRequest =
- z_ext_record_oid(out, oid_xml, xml_buf, strlen(xml_buf));
+ z_ext_record_oid(out, yaz_oid_recsyn_xml, xml_buf, strlen(xml_buf));
}
else
r->u.itemOrder->u.esRequest->notToKeep->itemRequest = 0;
@@ -2090,12 +2069,9 @@ static int send_itemorder(const char *type, int itemno)
Z_APDU *apdu = zget_APDU(out, Z_APDU_extendedServicesRequest);
Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest;
- const int *itemorder_oid = yaz_string_to_oid(yaz_oid_std(),
- CLASS_EXTSERV,
- "Item order");
req->referenceId = set_refid (out);
- req->packageType = odr_oiddup(out, itemorder_oid);
+ req->packageType = odr_oiddup(out, yaz_oid_extserv_item_order);
req->packageName = esPackageName;
req->taskSpecificParameters = create_ItemOrderExternal(type, itemno);
@@ -2233,11 +2209,9 @@ static int cmd_update_Z3950(int version, int action_no, const char *recid,
Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest;
Z_External *r;
Z_External *record_this = 0;
- const int *oid_xml = yaz_string_to_oid(yaz_oid_std(),
- CLASS_RECSYN, "xml");
-
if (rec_buf)
- record_this = z_ext_record_oid(out, oid_xml, rec_buf, rec_len);
+ record_this = z_ext_record_oid(out, yaz_oid_recsyn_xml,
+ rec_buf, rec_len);
else
{
if (!record_last)
@@ -2359,7 +2333,7 @@ static int cmd_xmles(const char *arg)
{
char *asn_buf = 0;
int noread = 0;
- int *oid;
+ Odr_oid *oid;
char oid_str[51];
Z_APDU *apdu = zget_APDU(out, Z_APDU_extendedServicesRequest);
Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest;
@@ -2879,7 +2853,8 @@ int cmd_cancel_find(const char *arg) {
return fres;
}
-int send_scanrequest(const char *query, int pp, int num, const char *term)
+int send_scanrequest(const char *set, const char *query,
+ int pp, int num, const char *term)
{
Z_APDU *apdu = zget_APDU(out, Z_APDU_scanRequest);
Z_ScanRequest *req = apdu->u.scanRequest;
@@ -2944,6 +2919,11 @@ int send_scanrequest(const char *query, int pp, int num, const char *term)
req->numberOfTermsRequested = #
req->preferredPositionInResponse = &pp;
req->stepSize = odr_intdup(out, scan_stepSize);
+
+ if (set)
+ yaz_oi_set_string_oid(&req->otherInfo, out,
+ yaz_oid_userinfo_scan_set, 1, set);
+
send_apdu(apdu);
return 2;
}
@@ -3124,7 +3104,7 @@ int cmd_scansize(const char *arg)
return 0;
}
-int cmd_scan(const char *arg)
+static int cmd_scan_common(const char *set, const char *arg)
{
if (protocol == PROTO_HTTP)
{
@@ -3168,18 +3148,37 @@ int cmd_scan(const char *arg)
if (*arg)
{
strcpy (last_scan_query, arg);
- if (send_scanrequest(arg, scan_position, scan_size, 0) < 0)
+ if (send_scanrequest(set, arg,
+ scan_position, scan_size, 0) < 0)
return 0;
}
else
{
- if (send_scanrequest(last_scan_query, 1, scan_size, last_scan_line) < 0)
+ if (send_scanrequest(set, last_scan_query,
+ 1, scan_size, last_scan_line) < 0)
return 0;
}
return 2;
}
}
+int cmd_scan(const char *arg)
+{
+ return cmd_scan_common(0, arg);
+}
+
+int cmd_setscan(const char *arg)
+{
+ char setstring[100];
+ int nor;
+ if (sscanf(arg, "%99s%n", setstring, &nor) < 1)
+ {
+ printf("missing set for setscan\n");
+ return 0;
+ }
+ return cmd_scan_common(setstring, arg + nor);
+}
+
int cmd_schema(const char *arg)
{
xfree(record_schema);
@@ -3633,8 +3632,8 @@ int cmd_register_oid(const char* args) {
};
char oname_str[101], oclass_str[101], oid_str[101];
int i;
- int oidclass = CLASS_GENERAL;
- int oid[OID_SIZE];
+ oid_class oidclass = CLASS_GENERAL;
+ Odr_oid oid[OID_SIZE];
if (sscanf (args, "%100[^ ] %100[^ ] %100s",
oname_str,oclass_str, oid_str) < 1) {
@@ -3728,7 +3727,8 @@ static void initialize(void)
/* If this fails, no problem: we detect cqltrans == 0 later */
#if HAVE_READLINE_READLINE_H
- rl_attempted_completion_function = (CPPFunction*)readline_completer;
+ rl_attempted_completion_function =
+ (char **(*)(const char *, int, int)) readline_completer;
#endif
for(i = 0; i < maxOtherInfosSupported; ++i) {
extraOtherInfos[i].oid[0] = -1;
@@ -3845,11 +3845,11 @@ static void handle_srw_scan_response(Z_SRW_scanResponse *res)
static void http_response(Z_HTTP_Response *hres)
{
int ret = -1;
- const char *content_type = z_HTTP_header_lookup(hres->headers,
- "Content-Type");
const char *connection_head = z_HTTP_header_lookup(hres->headers,
"Connection");
- if (content_type && !yaz_strcmp_del("text/xml", content_type, "; "))
+ if (!yaz_srw_check_content_type(hres))
+ printf("Content type does not appear to be XML");
+ else
{
Z_SOAP *soap_package = 0;
ODR o = odr_createmem(ODR_DECODE);
@@ -3863,7 +3863,7 @@ static void http_response(Z_HTTP_Response *hres)
soap_handlers);
if (!ret && soap_package->which == Z_SOAP_generic)
{
- Z_SRW_PDU *sr = soap_package->u.generic->p;
+ Z_SRW_PDU *sr = (Z_SRW_PDU *) soap_package->u.generic->p;
if (sr->which == Z_SRW_searchRetrieve_response)
handle_srw_response(sr->u.response);
else if (sr->which == Z_SRW_explain_response)
@@ -4143,7 +4143,7 @@ int cmd_set_otherinfo(const char* args)
else
{
NMEM oid_tmp = nmem_create();
- const int *oid =
+ const Odr_oid *oid =
yaz_string_to_oid_nmem(yaz_oid_std(),
CLASS_GENERAL, oidstr, oid_tmp);
oid_oidcpy(extraOtherInfos[otherinfoNo].oid, oid);
@@ -4186,7 +4186,7 @@ int cmd_list_otherinfo(const char* args)
if (extraOtherInfos[i].value)
{
char name_oid[OID_STR_MAX];
- int oclass;
+ oid_class oclass;
const char *name =
yaz_oid_to_string_buf(extraOtherInfos[i].oid, &oclass,
name_oid);
@@ -4203,7 +4203,7 @@ int cmd_list_otherinfo(const char* args)
if (extraOtherInfos[i].value)
{
char name_oid[OID_STR_MAX];
- int oclass;
+ oid_class oclass;
const char *name =
yaz_oid_to_string_buf(extraOtherInfos[i].oid, &oclass,
name_oid);
@@ -4211,7 +4211,6 @@ int cmd_list_otherinfo(const char* args)
i, name ? name : "null",
extraOtherInfos[i].value);
}
-
}
}
return 0;
@@ -4354,6 +4353,7 @@ static struct {
{"delete", cmd_delete, "",NULL,0,NULL},
{"base", cmd_base, "",NULL,0,NULL},
{"show", cmd_show, "['+'<#recs>['+']]",NULL,0,NULL},
+ {"setscan", cmd_setscan, "",NULL,0,NULL},
{"scan", cmd_scan, "",NULL,0,NULL},
{"scanstep", cmd_scanstep, "",NULL,0,NULL},
{"scanpos", cmd_scanpos, "",NULL,0,NULL},