X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Fhttp_command.c;h=aa73f9149e70e89ed56216a58b713798e838077d;hb=b0e04a1cb9261a088d5c100dbc891f3240fa88ce;hp=567189e2254ec4f093ebb743a37423a1ac76d16f;hpb=3c787972fe8ea6931db1ecf13783b00964f326bc;p=pazpar2-moved-to-github.git diff --git a/src/http_command.c b/src/http_command.c index 567189e..aa73f91 100644 --- a/src/http_command.c +++ b/src/http_command.c @@ -470,6 +470,8 @@ static void cmd_init(struct http_channel *c) wrbuf_puts(c->wrbuf, "" "" PAZPAR2_PROTOCOL_VERSION ""); + wrbuf_printf(c->wrbuf, "%d\n", 1000 * ((s->psession->service->session_timeout >= 20) ? + (s->psession->service->session_timeout - 10) : 50)); response_close(c, "init"); } @@ -873,10 +875,14 @@ static void write_subrecord(struct record *r, WRBUF w, wrbuf_puts(w, "client)); - wrbuf_puts(w, "\" "); + wrbuf_puts(w, "\"\n"); - wrbuf_puts(w, "name=\""); + wrbuf_puts(w, " name=\""); wrbuf_xmlputs(w, *name ? name : "Unknown"); + wrbuf_puts(w, "\" "); + + wrbuf_puts(w, "checksum=\""); + wrbuf_printf(w, "%u", r->checksum); wrbuf_puts(w, "\">"); write_metadata(w, service, r->metadata, show_details); @@ -937,11 +943,11 @@ static void show_record(struct http_channel *c, struct http_session *s) struct http_response *rs = c->response; struct http_request *rq = c->request; struct record_cluster *rec, *prev_r, *next_r; - struct record *r; struct conf_service *service; const char *idstr = http_argbyname(rq, "id"); const char *offsetstr = http_argbyname(rq, "offset"); const char *binarystr = http_argbyname(rq, "binary"); + const char *checksumstr = http_argbyname(rq, "checksum"); if (!s) return; @@ -965,9 +971,8 @@ static void show_record(struct http_channel *c, struct http_session *s) } return; } - if (offsetstr) + if (offsetstr || checksumstr) { - int offset = atoi(offsetstr); const char *syntax = http_argbyname(rq, "syntax"); const char *esn = http_argbyname(rq, "esn"); int i; @@ -978,14 +983,25 @@ static void show_record(struct http_channel *c, struct http_session *s) if (binarystr && *binarystr != '0') binary = 1; - for (i = 0; i < offset && r; r = r->next, i++) - ; - if (!r) + if (checksumstr) { - error(rs, PAZPAR2_RECORD_FAIL, "no record at offset given"); + long v = atol(checksumstr); + for (i = 0; r; r = r->next) + if (v == r->checksum) + break; + if (!r) + error(rs, PAZPAR2_RECORD_FAIL, "no record"); } else { + int offset = atoi(offsetstr); + for (i = 0; i < offset && r; r = r->next, i++) + ; + if (!r) + error(rs, PAZPAR2_RECORD_FAIL, "no record at offset given"); + } + if (r) + { http_channel_observer_t obs = http_add_observer(c, r->client, show_raw_reset); int ret = client_show_raw_begin(r->client, r->position, @@ -1006,6 +1022,7 @@ static void show_record(struct http_channel *c, struct http_session *s) } else { + struct record *r; response_open_no_status(c, "record"); wrbuf_puts(c->wrbuf, "\n"); wrbuf_xmlputs(c->wrbuf, rec->recid); @@ -1171,7 +1188,8 @@ static void cmd_show(struct http_channel *c) release_session(c, s); return; } - session_sort(s->psession, sp->name, sp->increasing); + session_sort(s->psession, sp->name, sp->increasing, + sp->type == Metadata_sortkey_position); status = session_active_clients(s->psession);