X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Fclient.c;h=61e0a8ae06965a33b73b9bdfc0c5658580449600;hb=bf3573774d1f82286d33cd1a410e0500d3dd1955;hp=b2d16b1aaf6a3e6ecbe348c5659d8b841adb59c9;hpb=2552abf219e2fe52c4ab0f1b9f38707ef0a8e0c9;p=pazpar2-moved-to-github.git diff --git a/src/client.c b/src/client.c index b2d16b1..61e0a8a 100644 --- a/src/client.c +++ b/src/client.c @@ -1,5 +1,5 @@ /* This file is part of Pazpar2. - Copyright (C) 2006-2010 Index Data + Copyright (C) 2006-2011 Index Data Pazpar2 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -103,6 +103,8 @@ struct client { ZOOM_resultset resultset; YAZ_MUTEX mutex; int ref_count; + /* copy of database->url */ + char *url; }; struct show_raw { @@ -592,6 +594,10 @@ static int client_set_facets_request(struct client *cl, ZOOM_connection link) struct session_database *sdb = client_get_database(cl); const char *opt_facet_term_sort = session_setting_oneval(sdb, PZ_TERMLIST_TERM_SORT); const char *opt_facet_term_count = session_setting_oneval(sdb, PZ_TERMLIST_TERM_COUNT); + + /* Future record filtering on target */ + /* const char *opt_facet_record_filter = session_setting_oneval(sdb, PZ_RECORDFILTER); */ + /* Disable when no count is set */ /* TODO Verify: Do we need to reset the ZOOM facets if a ZOOM Connection is being reused??? */ if (opt_facet_term_count && *opt_facet_term_count) @@ -686,18 +692,19 @@ void client_start_search(struct client *cl) if (*opt_requestsyn) ZOOM_connection_option_set(link, "preferredRecordSyntax", opt_requestsyn); - if (!*opt_maxrecs) + if (opt_maxrecs && *opt_maxrecs) { - sprintf(maxrecs_str, "%d", cl->maxrecs); - opt_maxrecs = maxrecs_str; + cl->maxrecs = atoi(opt_maxrecs); } - ZOOM_connection_option_set(link, "count", opt_maxrecs); + /* convert back to string representation used in ZOOM API */ + sprintf(maxrecs_str, "%d", cl->maxrecs); + ZOOM_connection_option_set(link, "count", maxrecs_str); - if (atoi(opt_maxrecs) > 20) + if (cl->maxrecs > 20) ZOOM_connection_option_set(link, "presentChunk", "20"); else - ZOOM_connection_option_set(link, "presentChunk", opt_maxrecs); + ZOOM_connection_option_set(link, "presentChunk", maxrecs_str); sprintf(startrecs_str, "%d", cl->startrecs); ZOOM_connection_option_set(link, "start", startrecs_str); @@ -749,6 +756,7 @@ struct client *client_create(void) pazpar2_mutex_create(&cl->mutex, "client"); cl->preferred = 0; cl->ref_count = 1; + cl->url = 0; client_use(1); return cl; @@ -783,6 +791,7 @@ int client_destroy(struct client *c) c->pquery = 0; xfree(c->cqlquery); c->cqlquery = 0; + xfree(c->url); assert(!c->connection); if (c->resultset) @@ -1044,6 +1053,10 @@ int client_get_diagnostic(struct client *cl) void client_set_database(struct client *cl, struct session_database *db) { cl->database = db; + /* Copy the URL for safe logging even after session is gone */ + if (db) { + cl->url = xstrdup(db->database->url); + } } struct host *client_get_host(struct client *cl) @@ -1053,9 +1066,10 @@ struct host *client_get_host(struct client *cl) const char *client_get_url(struct client *cl) { - if (cl->database) - return client_get_database(cl)->database->url; + if (cl->url) + return cl->url; else + /* This must not happen anymore, as the url is present until destruction of client */ return "NOURL"; }