X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Fhttp_command.c;h=27edb18ef4dce5b24e8815b7731c9ddf218b5844;hb=d83ed24b0cf7522f931e689eefb6f7f6d74b8b28;hp=10eb26757353ab1be68d167f0073be2a9e8c0a5f;hpb=706b2845d11186d2c3da0cee1240a8792c584a36;p=pazpar2-moved-to-github.git diff --git a/src/http_command.c b/src/http_command.c index 10eb267..27edb18 100644 --- a/src/http_command.c +++ b/src/http_command.c @@ -541,9 +541,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); @@ -560,7 +560,7 @@ static void cmd_termlist(struct http_channel *c) const char *report = http_argbyname(rq, "report"); int report_status = 0; int report_error = 0; - const char *status_message; + const char *status_message = 0; int active_clients; if (report && !strcmp("error", report)) { report_error = 1; @@ -586,9 +586,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 +676,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 */ @@ -681,7 +688,7 @@ static void bytarget_response(struct http_channel *c, struct http_session *s, co else { /* New protocol, OK or WARNING (...)*/ response_open_no_status(c, "bytarget"); - wrbuf_printf(c->wrbuf, "%s\n", cmd_status); + wrbuf_printf(c->wrbuf, "%s", cmd_status); } if (count == 0) @@ -711,8 +718,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"); wrbuf_puts(c->wrbuf, ""); wrbuf_xmlputs(c->wrbuf, ht[i].state); wrbuf_puts(c->wrbuf, "\n"); @@ -755,18 +763,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 +786,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 +1131,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 +1169,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 +1188,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 {