X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Fhttp_command.c;h=b75c9c90bad787182cbac342cae037471d418438;hb=52a4a04a986729107d87794c22a2ae41904eaf45;hp=595f9cf3ffaacaec3a4fbb521be4d0d5895885a3;hpb=93224ba0160c80676567032f69c253e439f369e2;p=pazpar2-moved-to-github.git diff --git a/src/http_command.c b/src/http_command.c index 595f9cf..b75c9c9 100644 --- a/src/http_command.c +++ b/src/http_command.c @@ -513,8 +513,13 @@ static void cmd_settings(struct http_channel *c) static void termlist_response(struct http_channel *c, struct http_session *s, const char *cmd_status) { struct http_request *rq = c->request; - const char *name = http_argbyname(rq, "name"); - const char *nums = http_argbyname(rq, "num"); + const char *name = http_argbyname(rq, "name"); + const char *nums = http_argbyname(rq, "num"); + const char *version = http_argbyname(rq, "version"); + int version_no = 0; + if (version && strcmp(version, "")) { + version_no = atoi(version); + } int num = 15; int status; @@ -530,7 +535,7 @@ static void termlist_response(struct http_channel *c, struct http_session *s, co } wrbuf_printf(c->wrbuf, "%d\n", status); - perform_termlist(c, s->psession, name, num); + perform_termlist(c, s->psession, name, num, version_no); response_close(c, "termlist"); } @@ -541,9 +546,9 @@ static void termlist_result_ready(void *data) struct http_request *rq = c->request; const char *report = http_argbyname(rq, "report"); const char *status = 0; + struct http_session *s = locate_session(c); if (report && !strcmp("status", report)) status = "OK"; - struct http_session *s = locate_session(c); if (s) { yaz_log(c->http_sessions->log_level, "Session %u termlist watch released", s->session_id); termlist_response(c, s, status); @@ -586,9 +591,12 @@ static void cmd_termlist(struct http_channel *c) release_session(c, s); return; } - if (report_status) { + else if (report_status) { status_message = "WARNING (Already blocked on termlist)"; } + else { + yaz_log(YLOG_WARN, "Session %u: Ignoring termlist block. Return current result", s->session_id); + } } else { @@ -673,7 +681,11 @@ static void bytarget_response(struct http_channel *c, struct http_session *s, co struct hitsbytarget *ht; struct http_request *rq = c->request; const char *settings = http_argbyname(rq, "settings"); - + const char *protocol_version = http_argbyname(rq, "version"); + int version = 0; + if (protocol_version && strcmp(protocol_version,"")) { + version = atoi(protocol_version); + } ht = get_hitsbytarget(s->psession, &count, c->nmem); if (!cmd_status) /* Old protocol, always ok */ @@ -711,8 +723,9 @@ static void bytarget_response(struct http_channel *c, struct http_session *s, co wrbuf_puts(c->wrbuf, "\n"); } - wrbuf_printf(c->wrbuf, "%d\n", ht[i].records); - + wrbuf_printf(c->wrbuf, "%d\n", ht[i].records - ht[i].filtered); + if (version >= 2) + wrbuf_printf(c->wrbuf, "%d\n", ht[i].filtered); wrbuf_puts(c->wrbuf, ""); wrbuf_xmlputs(c->wrbuf, ht[i].state); wrbuf_puts(c->wrbuf, "\n"); @@ -755,18 +768,18 @@ static void cmd_bytarget(struct http_channel *c) struct http_session *s = locate_session(c); const char *block = http_argbyname(rq, "block"); const char *report = http_argbyname(rq, "report"); - int block_error = 0; + int report_error = 0; int report_status = 0; const char *status_message = "OK"; + int no_active; + if (report && !strcmp("error", report)) { - block_error = 1; + report_error = 1; } if (report && !strcmp("status", report)) { report_status = 1; } - int no_active; - if (!s) return; @@ -778,14 +791,17 @@ static void cmd_bytarget(struct http_channel *c) bytarget_result_ready, c, c) != 0) { yaz_log(YLOG_WARN, "Session %u: Attempt to block multiple times on bytarget block. Not supported!", s->session_id); - if (block_error) { + if (report_error) { error(rs, PAZPAR2_ALREADY_BLOCKED, "bytarget"); release_session(c, s); return; } - if (report_status) { + else if (report_status) { status_message = "WARNING (Already blocked on bytarget)"; } + else { + yaz_log(YLOG_WARN, "Session %u: Ignoring bytarget block. Return current result.", s->session_id); + } } else { @@ -1120,10 +1136,13 @@ static void cmd_show(struct http_channel *c) struct http_session *s = locate_session(c); const char *block = http_argbyname(rq, "block"); const char *sort = http_argbyname(rq, "sort"); - const char *block_error = http_argbyname(rq, "error"); + const char *block_error = http_argbyname(rq, "report"); struct reclist_sortparms *sp; int status; - + int report_error = 0; + if (block_error && !strcmp("1", block_error)) { + report_error = 1; + } if (!s) return; @@ -1155,12 +1174,16 @@ static void cmd_show(struct http_channel *c) } else { - yaz_log(YLOG_WARN, "Attempt to block multiple times on show (preferred targets) block. Not supported!"); - if (block_error && !strcmp("1", block_error)) { + yaz_log(YLOG_WARN, "Session %u: Attempt to block multiple times on show (preferred targets) block. Not supported!", + s->session_id); + if (report_error) { error(rs, PAZPAR2_ALREADY_BLOCKED, "show (preferred targets)"); release_session(c, s); return; } + else { + yaz_log(YLOG_WARN, "Session %u: Ignoring show(preferred) block. Returning current result.", s->session_id); + } } } @@ -1170,12 +1193,15 @@ static void cmd_show(struct http_channel *c) if (session_set_watch(s->psession, SESSION_WATCH_SHOW, show_records_ready, c, c) != 0) { - yaz_log(YLOG_WARN, "Attempt to block multiple times on show block. Not supported!"); - if (block_error && !strcmp("1", block_error)) { + yaz_log(YLOG_WARN, "Session %u: Attempt to block multiple times on show block. Not supported!", s->session_id); + if (report_error) { error(rs, PAZPAR2_ALREADY_BLOCKED, "show"); release_session(c, s); return; } + else { + yaz_log(YLOG_WARN, "Session %u: Ignoring show block. Returning current result.", s->session_id); + } } else {