X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fzoom-c.c;h=8b1b3d1fa3cac7d050bb1e73eec1d6e8247372cb;hb=79aa866d87464ecd3fc451668017c0fa1adb2776;hp=3461431976090687bb93fbc489dbca2dce1a2da9;hpb=cf3ff0df41755297543b14f007842e1dc216ec25;p=yaz-moved-to-github.git diff --git a/src/zoom-c.c b/src/zoom-c.c index 3461431..8b1b3d1 100644 --- a/src/zoom-c.c +++ b/src/zoom-c.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2005, Index Data ApS * See the file LICENSE for details. * - * $Id: zoom-c.c,v 1.50 2005-11-03 16:49:00 mike Exp $ + * $Id: zoom-c.c,v 1.54 2005-12-08 15:36:31 adam Exp $ */ /** * \file zoom-c.c @@ -388,6 +388,26 @@ ZOOM_connection_connect(ZOOM_connection c, else c->host_port = xstrdup(host); + if ((val = strchr(c->host_port, '%')) != 0) { + /* We recognise :% for embedded + * authentication. This is slightly hacky syntax, but it's + * hard to get into the comstack code in a + * protocol-independent way. + */ + char *remainder, *pass; + + *(char*)val = '\0'; + remainder = xstrdup(val+1); + pass = strchr(c->host_port, ':'); + if (pass != 0) { + *pass++ = '\0'; + ZOOM_connection_option_set(c, "user", c->host_port); + ZOOM_connection_option_set(c, "password", pass); + } + xfree(c->host_port); + c->host_port = remainder; + } + ZOOM_options_set(c->options, "host", c->host_port); val = ZOOM_options_get (c->options, "cookie"); @@ -644,17 +664,34 @@ ZOOM_connection_search(ZOOM_connection c, ZOOM_query q) return r; } +/* + * This is the old result-set sorting API, which is maintained only + * for the sake of binary compatibility. There is no reason ever to + * use this rather than ZOOM_resultset_sort1(). + */ ZOOM_API(void) ZOOM_resultset_sort(ZOOM_resultset r, const char *sort_type, const char *sort_spec) { + (void) ZOOM_resultset_sort1(r, sort_type, sort_spec); +} + +ZOOM_API(int) +ZOOM_resultset_sort1(ZOOM_resultset r, + const char *sort_type, const char *sort_spec) +{ ZOOM_connection c = r->connection; ZOOM_task task; + ZOOM_query newq; + + newq = ZOOM_query_create(); + if (ZOOM_query_sortby(newq, sort_spec) < 0) + return -1; yaz_log(log_api, "%p ZOOM_resultset_sort r=%p sort_type=%s sort_spec=%s", r, r, sort_type, sort_spec); if (!c) - return; + return 0; if (c->host_port && c->proto == PROTO_HTTP) { @@ -674,8 +711,7 @@ ZOOM_resultset_sort(ZOOM_resultset r, ZOOM_resultset_cache_reset(r); task = ZOOM_connection_add_task (c, ZOOM_TASK_SORT); task->u.sort.resultset = r; - task->u.sort.q = ZOOM_query_create(); - ZOOM_query_sortby(task->u.sort.q, sort_spec); + task->u.sort.q = newq; ZOOM_resultset_addref (r); @@ -684,6 +720,8 @@ ZOOM_resultset_sort(ZOOM_resultset r, while (ZOOM_event (1, &c)) ; } + + return 0; } ZOOM_API(void) @@ -1045,7 +1083,7 @@ static zoom_ret ZOOM_connection_send_init (ZOOM_connection c) ZOOM_options_get(c->options, "implementationName"), odr_prepend(c->odr_out, "ZOOM-C", ireq->implementationName)); - version = odr_strdup(c->odr_out, "$Revision: 1.50 $"); + version = odr_strdup(c->odr_out, "$Revision: 1.54 $"); if (strlen(version) > 10) /* check for unexpanded CVS strings */ version[strlen(version)-2] = '\0'; ireq->implementationVersion = odr_prepend(c->odr_out, @@ -3574,6 +3612,14 @@ ZOOM_connection_addinfo (ZOOM_connection c) } ZOOM_API(const char *) +ZOOM_connection_diagset (ZOOM_connection c) +{ + const char *diagset; + ZOOM_connection_error_x (c, 0, 0, &diagset); + return diagset; +} + +ZOOM_API(const char *) ZOOM_diag_str (int error) { switch (error)