X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fhost.c;h=82b94bab6d4f5b2c0398e47b295af6dc419e44c8;hb=817e3ec506c4095bc4fcc1923cee36153ef4ee43;hp=ae536c61f6d29dd940dae957c1887df76ab55796;hpb=2bd14321370e2d042c370d19149d6caec9c01930;p=pazpar2-moved-to-github.git diff --git a/src/host.c b/src/host.c index ae536c6..82b94ba 100644 --- a/src/host.c +++ b/src/host.c @@ -1,5 +1,5 @@ /* This file is part of Pazpar2. - Copyright (C) 2006-2013 Index Data + Copyright (C) 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 @@ -26,6 +26,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include #include #include +#include #include "ppmutex.h" #include "session.h" @@ -39,38 +40,22 @@ struct database_hosts { }; // Create a new host structure for hostport -static struct host *create_host(const char *url, const char *proxy, - int default_port, +static struct host *create_host(const char *proxy, + const char *tproxy, iochan_man_t iochan_man) { struct host *host; - char *db_comment; host = xmalloc(sizeof(struct host)); - host->url = xstrdup(url); host->proxy = 0; host->tproxy = 0; if (proxy && *proxy) host->proxy = xstrdup(proxy); else { - char *cp; - - host->tproxy = xmalloc (strlen(url) + 10); /* so we can add :port */ - strcpy(host->tproxy, url); - for (cp = host->tproxy; *cp; cp++) - if (strchr("/?#~", *cp)) - { - *cp = '\0'; - break; - } - if (!strchr(host->tproxy, ':')) - sprintf(cp, ":%d", default_port); /* no port given, add it */ + assert(tproxy); + host->tproxy = xstrdup(tproxy); } - - db_comment = strchr(host->url, '#'); - if (db_comment) - *db_comment = '\0'; host->connections = 0; host->ipport = 0; host->mutex = 0; @@ -80,7 +65,6 @@ static struct host *create_host(const char *url, const char *proxy, xfree(host->ipport); xfree(host->tproxy); xfree(host->proxy); - xfree(host->url); xfree(host); return 0; } @@ -96,18 +80,35 @@ struct host *find_host(database_hosts_t hosts, const char *url, iochan_man_t iochan_man) { struct host *p; + char *tproxy = 0; + + if (!proxy || !*proxy) + { + char *cp; + + tproxy = xmalloc (strlen(url) + 10); /* so we can add :port */ + strcpy(tproxy, url); + for (cp = tproxy; *cp; cp++) + if (strchr("/?#~", *cp)) + { + *cp = '\0'; + break; + } + if (!strchr(tproxy, ':')) + sprintf(cp, ":%d", port); /* no port given, add it */ + } yaz_mutex_enter(hosts->mutex); for (p = hosts->hosts; p; p = p->next) - if (!strcmp(p->url, url)) + { + if (!yaz_strcmp_null(p->tproxy, tproxy) && + !yaz_strcmp_null(p->proxy, proxy)) { - if (p->proxy && proxy && !strcmp(p->proxy, proxy)) - break; - if (!p->proxy && !proxy) - break; + break; } + } if (!p) { - p = create_host(url, proxy, port, iochan_man); + p = create_host(proxy, tproxy, iochan_man); if (p) { p->next = hosts->hosts; @@ -115,6 +116,7 @@ struct host *find_host(database_hosts_t hosts, const char *url, } } yaz_mutex_leave(hosts->mutex); + xfree(tproxy); return p; } @@ -137,7 +139,6 @@ void database_hosts_destroy(database_hosts_t *pp) struct host *p_next = p->next; yaz_mutex_destroy(&p->mutex); yaz_cond_destroy(&p->cond_ready); - xfree(p->url); xfree(p->ipport); xfree(p); p = p_next;