-
/*
* client.c -- connect to a server
*
# include <arpa/inet.h>
#endif
-#define TRUE 1
-#define FALSE 0
+#define TRUE 1
+#define FALSE 0
-#define MAXARGS 1000
+#define MAXARGS 1000
/*
* static prototypes
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);
- }
- if (ap == arguments) {
- *ap++ = client_getcpy ("localhost");
- *ap = NULL;
- }
-
- memset(&hints, 0, sizeof(hints));
+ 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;
+ }
+
+ memset(&hints, 0, sizeof(hints));
#ifdef AI_ADDRCONFIG
- hints.ai_flags = AI_ADDRCONFIG;
+ hints.ai_flags = AI_ADDRCONFIG;
#endif
- hints.ai_family = PF_UNSPEC;
- hints.ai_socktype = SOCK_STREAM;
+ hints.ai_family = PF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
- for (ap = arguments; *ap; ap++) {
+ for (ap = arguments; *ap; ap++) {
- if (debug) {
- fprintf(stderr, "Trying to connect to \"%s\" ...\n", *ap);
- }
+ if (debug) {
+ fprintf(stderr, "Trying to connect to \"%s\" ...\n", *ap);
+ }
- rc = getaddrinfo(*ap, service, &hints, &res);
+ rc = getaddrinfo(*ap, service, &hints, &res);
- if (rc) {
- if (debug) {
- fprintf(stderr, "Lookup of \"%s\" failed: %s\n", *ap,
- gai_strerror(rc));
- }
- continue;
- }
+ if (rc) {
+ if (debug) {
+ fprintf(stderr, "Lookup of \"%s\" failed: %s\n", *ap,
+ gai_strerror(rc));
+ }
+ continue;
+ }
- for (ai = res; ai != NULL; ai = ai->ai_next) {
- if (debug) {
- char address[NI_MAXHOST];
+ for (ai = res; ai != NULL; ai = ai->ai_next) {
+ if (debug) {
+ char address[NI_MAXHOST];
- rc = getnameinfo(ai->ai_addr, ai->ai_addrlen, address,
- sizeof(address), NULL, 0, NI_NUMERICHOST);
+ rc = getnameinfo(ai->ai_addr, ai->ai_addrlen, address,
+ sizeof(address), NULL, 0, NI_NUMERICHOST);
- fprintf(stderr, "Connecting to %s...\n",
- rc ? "unknown" : address);
- }
+ fprintf(stderr, "Connecting to %s...\n",
+ rc ? "unknown" : address);
+ }
- sd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
+ sd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
- if (sd < 0) {
- if (debug)
- fprintf(stderr, "socket() failed: %s\n", strerror(errno));
- continue;
- }
+ if (sd < 0) {
+ if (debug)
+ fprintf(stderr, "socket() failed: %s\n", strerror(errno));
+ continue;
+ }
- if (connect(sd, ai->ai_addr, ai->ai_addrlen) == 0) {
- freeaddrinfo(res);
- client_freelist(ap);
- return sd;
- }
+ if (connect(sd, ai->ai_addr, ai->ai_addrlen) == 0) {
+ freeaddrinfo(res);
+ client_freelist(ap);
+ return sd;
+ }
- if (debug) {
- fprintf(stderr, "Connection failed: %s\n", strerror(errno));
- }
+ if (debug) {
+ fprintf(stderr, "Connection failed: %s\n", strerror(errno));
+ }
- close(sd);
- }
+ close(sd);
+ }
- freeaddrinfo(res);
- }
+ freeaddrinfo(res);
+ }
- client_freelist(ap);
- strncpy (response, "no servers available", len_response);
- return NOTOK;
+ client_freelist(ap);
+ strncpy (response, "no servers available", len_response);
+ return NOTOK;
}
static void
client_freelist(char **list)
{
- while (*list++ != NULL)
- free(*list);
+ while (*list++ != NULL)
+ free(*list);
}
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;
}
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;
}
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;
}