X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fzoom-c.c;h=c3d7f0c945b8f785c093912dd46e23f21033bfc2;hp=331f54453118d1d1a7a037cef69757b82b30fff6;hb=c1f23597ea64485e2362d658f3653211202cc6a8;hpb=3bfb3813869cfa6d6e199bf7a24ebd8e300054be diff --git a/src/zoom-c.c b/src/zoom-c.c index 331f544..c3d7f0c 100644 --- a/src/zoom-c.c +++ b/src/zoom-c.c @@ -370,6 +370,7 @@ ZOOM_API(void) const char *host, int portnum) { const char *val; + const char *http_lead; initlog(); @@ -436,17 +437,25 @@ ZOOM_API(void) else c->lang = 0; + val = ZOOM_options_get(c->options, "sru"); + if (val && *val && !strstr(host, "://")) + http_lead = "http://"; + else + http_lead = ""; + c->sru_mode = get_sru_mode_from_string(val); + if (host) { + char hostn[128]; xfree(c->host_port); if (portnum) { - char hostn[128]; sprintf(hostn, "%.80s:%d", host, portnum); - c->host_port = xstrdup(hostn); + host = hostn; } - else - c->host_port = xstrdup(host); + c->host_port = xmalloc(strlen(host) + strlen(http_lead) + 1); + strcpy(c->host_port, http_lead); + strcat(c->host_port, host); } { @@ -482,9 +491,6 @@ ZOOM_API(void) } } - val = ZOOM_options_get(c->options, "sru"); - c->sru_mode = get_sru_mode_from_string(val); - xfree(c->sru_version); val = ZOOM_options_get(c->options, "sru_version"); c->sru_version = xstrdup(val ? val : "1.2"); @@ -1559,11 +1565,8 @@ static void handle_http(ZOOM_connection c, Z_HTTP_Response *hres) int host_change = 0; location = yaz_check_location(c->odr_in, c->host_port, location, &host_change); - if (host_change) - { - if (do_connect_host(c, location) == zoom_complete) - return; /* connect failed.. */ - } + if (do_connect_host(c, location) == zoom_complete) + return; /* connect failed.. */ send_HTTP_redirect(c, location); return; }