X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Fclient.c;h=0dd4a67f65de1fe6b2866b85c33d68cddc299db7;hp=732fb47ff59066a0a29056e43c770e6687c2efb2;hb=a485ed478abbd599d8c9aab48934e7a26733ecb1;hpb=d6ed7408ae67cf31b31a8c42515a160f7dc6330a diff --git a/sbr/client.c b/sbr/client.c index 732fb47..0dd4a67 100644 --- a/sbr/client.c +++ b/sbr/client.c @@ -1,9 +1,6 @@ - /* * client.c -- connect to a server * - * $Id$ - * * This code is Copyright (c) 2002, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for * complete copyright information. @@ -21,10 +18,10 @@ # include #endif -#define TRUE 1 -#define FALSE 0 +#define TRUE 1 +#define FALSE 0 -#define MAXARGS 1000 +#define MAXARGS 1000 /* * static prototypes @@ -41,83 +38,81 @@ static void client_freelist(char **); int client (char *args, char *service, char *response, int len_response, int debug) { - int sd, rc; - char **ap, *arguments[MAXARGS]; - struct addrinfo hints, *res, *ai; - - ap = arguments; - if (args != NULL && *args != 0) { - ap = client_copyip (client_brkstring (client_getcpy (args), " ", "\n"), - ap, MAXARGS); - } else { - if (servers != NULL && *servers != 0) - ap = client_copyip (client_brkstring (client_getcpy (servers), " ", "\n"), - ap, MAXARGS); - } - if (ap == arguments) { - *ap++ = client_getcpy ("localhost"); - *ap = NULL; - } - - memset(&hints, 0, sizeof(hints)); - hints.ai_flags = AI_ADDRCONFIG; - hints.ai_family = PF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - - for (ap = arguments; *ap; ap++) { - - if (debug) { - fprintf(stderr, "Trying to connect to \"%s\" ...\n", *ap); + int sd, rc; + char **ap, *arguments[MAXARGS]; + struct addrinfo hints, *res, *ai; + + ap = arguments; + if (args != NULL && *args != 0) { + ap = client_copyip (client_brkstring (client_getcpy (args), " ", "\n"), + ap, MAXARGS); + } + if (ap == arguments) { + *ap++ = client_getcpy ("localhost"); + *ap = NULL; } - rc = getaddrinfo(*ap, service, &hints, &res); + memset(&hints, 0, sizeof(hints)); +#ifdef AI_ADDRCONFIG + hints.ai_flags = AI_ADDRCONFIG; +#endif + hints.ai_family = PF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; - if (rc) { - if (debug) { - fprintf(stderr, "Lookup of \"%s\" failed: %s\n", *ap, - gai_strerror(rc)); - } - continue; - } + for (ap = arguments; *ap; ap++) { - for (ai = res; ai != NULL; ai = ai->ai_next) { - if (debug) { - char address[NI_MAXHOST]; + if (debug) { + fprintf(stderr, "Trying to connect to \"%s\" ...\n", *ap); + } - rc = getnameinfo(ai->ai_addr, ai->ai_addrlen, address, - sizeof(address), NULL, NULL, NI_NUMERICHOST); + rc = getaddrinfo(*ap, service, &hints, &res); - fprintf(stderr, "Connecting to %s...\n", - rc ? "unknown" : address); - } + if (rc) { + if (debug) { + fprintf(stderr, "Lookup of \"%s\" failed: %s\n", *ap, + gai_strerror(rc)); + } + continue; + } - sd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); + for (ai = res; ai != NULL; ai = ai->ai_next) { + if (debug) { + char address[NI_MAXHOST]; - if (sd < 0) { - if (debug) - fprintf(stderr, "socket() failed: %s\n", strerror(errno)); - continue; - } + rc = getnameinfo(ai->ai_addr, ai->ai_addrlen, address, + sizeof(address), NULL, 0, NI_NUMERICHOST); - if (connect(sd, ai->ai_addr, ai->ai_addrlen) == 0) { - freeaddrinfo(res); - client_freelist(ap); - return sd; - } + fprintf(stderr, "Connecting to %s...\n", + rc ? "unknown" : address); + } - if (debug) { - fprintf(stderr, "Connection failed: %s\n", strerror(errno)); - } + sd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); - close(sd); - } + if (sd < 0) { + if (debug) + fprintf(stderr, "socket() failed: %s\n", strerror(errno)); + continue; + } - freeaddrinfo(res); - } + if (connect(sd, ai->ai_addr, ai->ai_addrlen) == 0) { + freeaddrinfo(res); + client_freelist(ap); + return sd; + } - client_freelist(ap); - strncpy (response, "no servers available", len_response); - return NOTOK; + if (debug) { + fprintf(stderr, "Connection failed: %s\n", strerror(errno)); + } + + close(sd); + } + + freeaddrinfo(res); + } + + client_freelist(ap); + strncpy (response, "no servers available", len_response); + return NOTOK; } @@ -128,8 +123,8 @@ client (char *args, char *service, char *response, int len_response, int debug) static void client_freelist(char **list) { - while (*list++ != NULL) - free(*list); + while (*list++ != NULL) + free(*list); } @@ -142,27 +137,27 @@ static char *broken[MAXARGS + 1]; static char ** client_brkstring (char *strg, char *brksep, char *brkterm) { - register int bi; - register char c, *sp; - - sp = strg; - - for (bi = 0; bi < MAXARGS; bi++) { - while (client_brkany (c = *sp, brksep)) - *sp++ = 0; - if (!c || client_brkany (c, brkterm)) { - *sp = 0; - broken[bi] = 0; - return broken; + register int bi; + register char c, *sp; + + sp = strg; + + for (bi = 0; bi < MAXARGS; bi++) { + while (client_brkany (c = *sp, brksep)) + *sp++ = 0; + if (!c || client_brkany (c, brkterm)) { + *sp = 0; + broken[bi] = 0; + return broken; + } + + broken[bi] = sp; + while ((c = *++sp) && !client_brkany (c, brksep) && !client_brkany (c, brkterm)) + continue; } + broken[MAXARGS] = 0; - broken[bi] = sp; - while ((c = *++sp) && !client_brkany (c, brksep) && !client_brkany (c, brkterm)) - continue; - } - broken[MAXARGS] = 0; - - return broken; + return broken; } @@ -172,13 +167,13 @@ client_brkstring (char *strg, char *brksep, char *brkterm) static int client_brkany (char chr, char *strg) { - register char *sp; - - if (strg) - for (sp = strg; *sp; sp++) - if (chr == *sp) - return 1; - return 0; + register char *sp; + + if (strg) + for (sp = strg; *sp; sp++) + if (chr == *sp) + return 1; + return 0; } @@ -188,25 +183,25 @@ client_brkany (char chr, char *strg) static char ** client_copyip (char **p, char **q, int len_q) { - while (*p && --len_q > 0) - *q++ = *p++; + while (*p && --len_q > 0) + *q++ = *p++; - *q = NULL; + *q = NULL; - return q; + return q; } static char * client_getcpy (char *str) { - char *cp; - size_t len; + char *cp; + size_t len; - len = strlen(str) + 1; - cp = mh_xmalloc(len); + len = strlen(str) + 1; + cp = mh_xmalloc(len); - memcpy (cp, str, len); - return cp; + memcpy (cp, str, len); + return cp; }