X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=client%2Fclient.c;h=d58c0828dcfa1e49c21633ddc28ff3a925b46d45;hb=454369fd9e16211e97c8decd7be3c4e9729df6bf;hp=71d714955b82586591e798da29fde08a76f51427;hpb=f7acb94a8f4ddda59fa695163785a6756e92c21b;p=yaz-moved-to-github.git diff --git a/client/client.c b/client/client.c index 71d7149..d58c082 100644 --- a/client/client.c +++ b/client/client.c @@ -2,7 +2,7 @@ * Copyright (c) 1995-2004, Index Data * See the file LICENSE for details. * - * $Id: client.c,v 1.242 2004-05-03 09:00:29 adam Exp $ + * $Id: client.c,v 1.249 2004-09-13 09:24:42 adam Exp $ */ #include @@ -379,9 +379,25 @@ static int process_initResponse(Z_InitResponse *res) printf("Guessing visiblestring:\n"); printf("'%s'\n", uif->u. octet_aligned->buf); } else if (uif->which == Z_External_single) { - /* Peek at any private Init-diagnostic APDUs */ Odr_any *sat = uif->u.single_ASN1_type; - printf("### NAUGHTY: External is '%s'\n", sat->buf); + oident *oid = oid_getentbyoid(uif->direct_reference); + if (oid->value == VAL_OCLCUI) { + Z_OCLC_UserInformation *oclc_ui; + ODR decode = odr_createmem(ODR_DECODE); + odr_setbuf(decode, sat->buf, sat->len, 0); + if (!z_OCLC_UserInformation(decode, &oclc_ui, 0, 0)) + printf ("Bad OCLC UserInformation:\n"); + else + printf ("OCLC UserInformation:\n"); + if (!z_OCLC_UserInformation(print, &oclc_ui, 0, 0)) + printf ("Bad OCLC UserInformation spec\n"); + odr_destroy(decode); + } + else + { + /* Peek at any private Init-diagnostic APDUs */ + printf("### NAUGHTY: External is '%.*s'\n", sat->len, sat->buf); + } } odr_reset (print); } @@ -568,6 +584,8 @@ int session_connect(const char *arg) return 0; } #if HAVE_XML2 + if (conn->protocol == PROTO_HTTP) + queryType = QueryType_CQL; #else if (conn->protocol == PROTO_HTTP) { @@ -723,6 +741,8 @@ static void print_record(const unsigned char *buf, size_t len) /* add newline if not already added ... */ if (i <= 0 || buf[i-1] != '\n') printf ("\n"); + if (marc_file) + fwrite (buf, 1, len, marc_file); } static void display_record(Z_External *r) @@ -1110,7 +1130,7 @@ static int send_deleteResultSetRequest(const char *arg) odr_malloc (out, sizeof(*req->deleteFunction)); if (req->num_resultSetList > 0) { - *req->deleteFunction = Z_DeleteRequest_list; + *req->deleteFunction = Z_DeleteResultSetRequest_list; req->resultSetList = (char **) odr_malloc (out, sizeof(*req->resultSetList)* req->num_resultSetList); @@ -1119,7 +1139,7 @@ static int send_deleteResultSetRequest(const char *arg) } else { - *req->deleteFunction = Z_DeleteRequest_all; + *req->deleteFunction = Z_DeleteResultSetRequest_all; req->resultSetList = 0; } @@ -1242,13 +1262,28 @@ static int send_SRW_searchRequest(const char *arg) /* save this for later .. when fetching individual records */ srw_sr = sr = yaz_srw_get(srw_sr_odr_out, Z_SRW_searchRetrieve_request); - sr->u.request->query_type = Z_SRW_query_type_cql; - sr->u.request->query.cql = odr_strdup(srw_sr_odr_out, arg); - + + /* regular request .. */ sr = yaz_srw_get(out, Z_SRW_searchRetrieve_request); - sr->u.request->query_type = Z_SRW_query_type_cql; - sr->u.request->query.cql = odr_strdup(out, arg); + switch(queryType) + { + case QueryType_CQL: + sr->u.request->query_type = Z_SRW_query_type_cql; + sr->u.request->query.cql = odr_strdup(srw_sr_odr_out, arg); + sr->u.request->query_type = Z_SRW_query_type_cql; + sr->u.request->query.cql = odr_strdup(out, arg); + break; + case QueryType_Prefix: + sr->u.request->query_type = Z_SRW_query_type_pqf; + sr->u.request->query.pqf = odr_strdup(srw_sr_odr_out, arg); + sr->u.request->query_type = Z_SRW_query_type_pqf; + sr->u.request->query.pqf = odr_strdup(out, arg); + break; + default: + printf ("Only CQL and PQF supported in SRW\n"); + return 0; + } sr->u.request->maximumRecords = odr_intdup(out, 0); if (record_schema) @@ -2520,14 +2555,25 @@ int cmd_cancel(const char *arg) printf("Target doesn't support cancel (trigger resource ctrl)\n"); return 0; } - *req->requestedAction = Z_TriggerResourceCtrl_cancel; + *req->requestedAction = Z_TriggerResourceControlRequest_cancel; req->resultSetWanted = &rfalse; + req->referenceId = set_refid (out); send_apdu(apdu); printf("Sent cancel request\n"); return 2; } + +int cmd_cancel_find(const char *arg) { + int fres; + fres=cmd_find(arg); + if( fres > 0 ) { + return cmd_cancel(""); + }; + return fres; +} + int send_scanrequest(const char *query, int pp, int num, const char *term) { Z_APDU *apdu = zget_APDU(out, Z_APDU_scanRequest); @@ -2688,11 +2734,11 @@ void process_sortResponse(Z_SortResponse *res) printf("Received SortResponse: status="); switch (*res->sortStatus) { - case Z_SortStatus_success: + case Z_SortResponse_success: printf ("success"); break; - case Z_SortStatus_partial_1: + case Z_SortResponse_partial_1: printf ("partial"); break; - case Z_SortStatus_failure: + case Z_SortResponse_failure: printf ("failure"); break; default: printf ("unknown (%d)", *res->sortStatus); @@ -2994,7 +3040,7 @@ int cmd_source(const char* arg) { /* first should open the file and read one line at a time.. */ FILE* includeFile; - char line[1024], *cp; + char line[102400], *cp; if(strlen(arg)<1) { fprintf(stderr,"Error in source command use a filename\n"); @@ -3199,7 +3245,7 @@ int cmd_register_oid(const char* args) { name = oid_str; val = 0; - while (isdigit (*name)) + while (isdigit (*(unsigned char *) name)) { val = val*10 + (*name - '0'); name++; @@ -3314,7 +3360,11 @@ static void handle_srw_record(Z_SRW_record *rec) printf (" schema=%s", rec->recordSchema); printf ("\n"); if (rec->recordData_buf && rec->recordData_len) + { fwrite(rec->recordData_buf, 1, rec->recordData_len, stdout); + if (marc_file) + fwrite (rec->recordData_buf, 1, rec->recordData_len, marc_file); + } else printf ("No data!"); printf("\n"); @@ -3802,6 +3852,7 @@ static struct { {"status", cmd_status, "",NULL,0,NULL}, {"setnames", cmd_setnames, "",NULL,0,NULL}, {"cancel", cmd_cancel, "",NULL,0,NULL}, + {"cancel_find", cmd_cancel_find, "",NULL,0,NULL}, {"format", cmd_format, "",complete_format,0,NULL}, {"schema", cmd_schema, "",complete_schema,0,NULL}, {"elements", cmd_elements, "",NULL,0,NULL}, @@ -3937,13 +3988,13 @@ int cmd_register_tab(const char* arg) { void process_cmd_line(char* line) { int i,res; - char word[32], arg[1024]; + char word[32], arg[10240]; #if HAVE_GETTIMEOFDAY gettimeofday (&tv_start, 0); #endif - if ((res = sscanf(line, "%31s %1023[^;]", word, arg)) <= 0) + if ((res = sscanf(line, "%31s %10239[^;]", word, arg)) <= 0) { strcpy(word, last_cmd); *arg = '\0'; @@ -3958,7 +4009,7 @@ void process_cmd_line(char* line) char* lastnonspace=NULL; for(;*p; ++p) { - if(!isspace(*p)) { + if(!isspace(*(unsigned char *) p)) { lastnonspace = p; } } @@ -4028,9 +4079,9 @@ char ** readline_completer(char *text, int start, int end) { rl_attempted_completion_over = 1; return res; } else { - char arg[1024],word[32]; + char arg[10240],word[32]; int i=0 ,res; - if ((res = sscanf(rl_line_buffer, "%31s %1023[^;]", word, arg)) <= 0) { + if ((res = sscanf(rl_line_buffer, "%31s %10239[^;]", word, arg)) <= 0) { rl_attempted_completion_over = 1; return NULL; } @@ -4076,9 +4127,9 @@ char ** readline_completer(char *text, int start, int end) { static void client(void) { - char line[1024]; + char line[10240]; - line[1023] = '\0'; + line[10239] = '\0'; #if HAVE_GETTIMEOFDAY gettimeofday (&tv_start, 0); @@ -4097,7 +4148,7 @@ static void client(void) if (*line_in) add_history(line_in); #endif - strncpy(line, line_in, 1023); + strncpy(line, line_in, 10239); free (line_in); } #endif @@ -4106,7 +4157,7 @@ static void client(void) char *end_p; printf (C_PROMPT); fflush(stdout); - if (!fgets(line, 1023, stdin)) + if (!fgets(line, 10239, stdin)) break; if ((end_p = strchr (line, '\n'))) *end_p = '\0';