X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;f=src%2Fgetaddrinfo.c;h=656b9e197175240d8d379a9f85ef6b2903546236;hb=774342ce8702375cef22d12c856c9479a719c827;hp=24ce534a99d61cd6c9a186aa4727b15e6d29209e;hpb=02d06913705a0285b11b570e51d2f1193ff971c1;p=pazpar2-moved-to-github.git diff --git a/src/getaddrinfo.c b/src/getaddrinfo.c index 24ce534..656b9e1 100644 --- a/src/getaddrinfo.c +++ b/src/getaddrinfo.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 @@ -40,9 +40,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #if HAVE_NETDB_H #include #endif -#if HAVE_NETINET_IN_H -#include -#endif #include #include @@ -68,11 +65,11 @@ struct work { static int log_level = YLOG_LOG; -void perform_getaddrinfo(struct work *w) +static void perform_getaddrinfo(struct work *w) { struct addrinfo hints, *res; char host[512], *cp; - const char *port = 0; + char *port = "210"; int error; hints.ai_flags = 0; @@ -84,14 +81,27 @@ void perform_getaddrinfo(struct work *w) hints.ai_canonname = NULL; hints.ai_next = NULL; - strncpy(host, w->hostport, sizeof(host)-1); + if (!strncmp(w->hostport, "http://", 7)) + { + port = "80"; + strncpy(host, w->hostport + 7, sizeof(host)-1); + } + else if (!strncmp(w->hostport, "https://", 8)) + { + port = "443"; + strncpy(host, w->hostport + 8, sizeof(host)-1); + } + else + { + strncpy(host, w->hostport, sizeof(host)-1); + } host[sizeof(host)-1] = 0; if ((cp = strrchr(host, ':'))) { *cp = '\0'; port = cp + 1; } - error = getaddrinfo(host, port ? port : "210", &hints, &res); + error = getaddrinfo(host, port, &hints, &res); if (error) { yaz_log(YLOG_WARN, "Failed to resolve %s: %s", @@ -99,13 +109,14 @@ void perform_getaddrinfo(struct work *w) } else { + char n_host[512]; if (getnameinfo((struct sockaddr *) res->ai_addr, res->ai_addrlen, - host, sizeof(host)-1, + n_host, sizeof(n_host)-1, 0, 0, NI_NUMERICHOST) == 0) { - w->ipport = xmalloc(strlen(host) + (port ? strlen(port) : 0) + 2); - strcpy(w->ipport, host); + w->ipport = xmalloc(strlen(n_host) + (port ? strlen(port) : 0) + 2); + strcpy(w->ipport, n_host); if (port) { strcat(w->ipport, ":"); @@ -179,7 +190,7 @@ static void getaddrinfo_start(iochan_man_t iochan_man) int host_getaddrinfo(struct host *host, iochan_man_t iochan_man) { struct work *w = xmalloc(sizeof(*w)); - int use_thread = 0; /* =0 to disable threading entirely */ + int use_thread = 1; /* =0 to disable threading entirely */ w->hostport = host->tproxy ? host->tproxy : host->proxy; w->ipport = 0;