X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fzoom-c.c;h=331f54453118d1d1a7a037cef69757b82b30fff6;hp=b162b6d6f9dd5989343a3a28a577bb0b99cef5a4;hb=d0da7ea31871b3fcb3785ec7e1d06f4739fb6ada;hpb=2cb501be3b31d5ddc14de30498fadb4b31d56fb5 diff --git a/src/zoom-c.c b/src/zoom-c.c index b162b6d..331f544 100644 --- a/src/zoom-c.c +++ b/src/zoom-c.c @@ -1555,26 +1555,16 @@ static void handle_http(ZOOM_connection c, Z_HTTP_Response *hres) { /* since redirect may change host we just reconnect. A smarter implementation might check whether it's the same server */ - if (*location != '/') + + int host_change = 0; + location = yaz_check_location(c->odr_in, c->host_port, + location, &host_change); + if (host_change) { - /* full header */ - do_connect_host(c, location); - send_HTTP_redirect(c, location); - } - else - { /* relative header - same host */ - char *args = 0; - char *nlocation = odr_malloc(c->odr_in, strlen(location) - + strlen(c->host_port) + 3); - strcpy(nlocation, c->host_port); - cs_get_host_args(nlocation, (const char **) &args); - if (!args || !*args) - args = nlocation + strlen(nlocation); - else - args--; - strcpy(args, location); - send_HTTP_redirect(c, nlocation); + if (do_connect_host(c, location) == zoom_complete) + return; /* connect failed.. */ } + send_HTTP_redirect(c, location); return; } }