X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fceph%2Fsrc%2Fcommon%2Faddr_parsing.c;fp=src%2Fceph%2Fsrc%2Fcommon%2Faddr_parsing.c;h=0000000000000000000000000000000000000000;hb=7da45d65be36d36b880cc55c5036e96c24b53f00;hp=50694402980548f8dc30ccd1de067ae555d08410;hpb=691462d09d0987b47e112d6ee8740375df3c51b2;p=stor4nfv.git diff --git a/src/ceph/src/common/addr_parsing.c b/src/ceph/src/common/addr_parsing.c deleted file mode 100644 index 5069440..0000000 --- a/src/ceph/src/common/addr_parsing.c +++ /dev/null @@ -1,155 +0,0 @@ -// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- -// vim: ts=8 sw=2 smarttab -/* - * Ceph - scalable distributed file system - * - * Copyright (C) 2011 New Dream Network - * - * This is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software - * Foundation. See file COPYING. - * - */ - -#include -#include -#include -#if defined(__FreeBSD__) || defined(_AIX) -#include -#include -#endif -#include - -#define BUF_SIZE 128 - -int safe_cat(char **pstr, int *plen, int pos, const char *str2) -{ - int len2 = strlen(str2); - - //printf("safe_cat '%s' max %d pos %d '%s' len %d\n", *pstr, *plen, pos, str2, len2); - while (*plen < pos + len2 + 1) { - *plen += BUF_SIZE; - - void *_realloc = NULL; - if ((_realloc = realloc(*pstr, (size_t)*plen)) == NULL) { - printf("Out of memory\n"); - exit(1); - } else { - *pstr = (char *)_realloc; - } - //printf("safe_cat '%s' max %d pos %d '%s' len %d\n", *pstr, *plen, pos, str2, len2); - } - - strncpy((*pstr)+pos, str2, len2); - (*pstr)[pos+len2] = '\0'; - - return pos + len2; -} - -char *resolve_addrs(const char *orig_str) -{ - char *new_str; - char *tok, *saveptr = NULL; - int len, pos; - char *buf = strdup(orig_str); - const char *delim = ",; "; - - len = BUF_SIZE; - new_str = (char *)malloc(len); - if (!new_str) { - free(buf); - return NULL; - } - - pos = 0; - - tok = strtok_r(buf, delim, &saveptr); - - while (tok) { - struct addrinfo hint; - struct addrinfo *res, *ores; - char *firstcolon, *lastcolon, *bracecolon; - int r; - int brackets = 0; - - firstcolon = strchr(tok, ':'); - lastcolon = strrchr(tok, ':'); - bracecolon = strstr(tok, "]:"); - - char *port_str = 0; - if (firstcolon && firstcolon == lastcolon) { - /* host:port or a.b.c.d:port */ - *firstcolon = 0; - port_str = firstcolon + 1; - } else if (bracecolon) { - /* [ipv6addr]:port */ - port_str = bracecolon + 1; - *port_str = 0; - port_str++; - } - if (port_str && !*port_str) - port_str = NULL; - - if (*tok == '[' && - tok[strlen(tok)-1] == ']') { - tok[strlen(tok)-1] = 0; - tok++; - brackets = 1; - } - - //printf("name '%s' port '%s'\n", tok, port_str); - - memset(&hint, 0, sizeof(hint)); - hint.ai_family = AF_UNSPEC; - hint.ai_socktype = SOCK_STREAM; - hint.ai_protocol = IPPROTO_TCP; - - r = getaddrinfo(tok, port_str, &hint, &res); - if (r < 0) { - printf("server name not found: %s (%s)\n", tok, - gai_strerror(r)); - free(new_str); - free(buf); - return 0; - } - - /* build resolved addr list */ - ores = res; - while (res) { - char host[40], port[40]; - getnameinfo(res->ai_addr, res->ai_addrlen, - host, sizeof(host), - port, sizeof(port), - NI_NUMERICSERV | NI_NUMERICHOST); - /*printf(" host %s port %s flags %d family %d socktype %d proto %d sanonname %s\n", - host, port, - res->ai_flags, res->ai_family, res->ai_socktype, res->ai_protocol, - res->ai_canonname);*/ - if (res->ai_family == AF_INET6) - brackets = 1; /* always surround ipv6 addrs with brackets */ - if (brackets) - pos = safe_cat(&new_str, &len, pos, "["); - pos = safe_cat(&new_str, &len, pos, host); - if (brackets) - pos = safe_cat(&new_str, &len, pos, "]"); - if (port_str) { - pos = safe_cat(&new_str, &len, pos, ":"); - pos = safe_cat(&new_str, &len, pos, port); - } - res = res->ai_next; - if (res) - pos = safe_cat(&new_str, &len, pos, ","); - } - freeaddrinfo(ores); - - tok = strtok_r(NULL, delim, &saveptr); - if (tok) - pos = safe_cat(&new_str, &len, pos, ","); - - } - - //printf("new_str is '%s'\n", new_str); - free(buf); - return new_str; -}