X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Futils.c;fp=src%2Futils.c;h=0f7b00cc7949807aa1ce4d2a39577049c3e4dc6e;hb=047eaadd44f8ce9760957b0e52833f37826544e7;hp=e45e5942d8a477a82e08924ba59e727c1feca4ff;hpb=bd8eb9b38758f16f8f0207dcd5b743bfacb535cb;p=meshlink diff --git a/src/utils.c b/src/utils.c index e45e5942..0f7b00cc 100644 --- a/src/utils.c +++ b/src/utils.c @@ -178,3 +178,51 @@ unsigned int bitfield_to_int(const void *bitfield, size_t size) { memcpy(&value, bitfield, size); return value; } + +/* Write IP address from sockaddr to string. + * Returns NULL on error. + */ +char *get_ip_str(const struct sockaddr *sa, char *s, size_t maxlen) +{ + switch(sa->sa_family) { + case AF_INET: + inet_ntop(AF_INET, &(((struct sockaddr_in *)sa)->sin_addr), + s, maxlen); + break; + + case AF_INET6: + inet_ntop(AF_INET6, &(((struct sockaddr_in6 *)sa)->sin6_addr), + s, maxlen); + break; + + default: + strncpy(s, "Unknown AF", maxlen); + return NULL; + } + + return s; +} + +/* Write port from sockaddr to string. + * Returns NULL on error. + */ +char *get_port_str(const struct sockaddr *sa, char *s, size_t maxlen) +{ + switch(sa->sa_family) { + case AF_INET: + snprintf(s, maxlen, "%d", + ntohs(((struct sockaddr_in*)sa)->sin_port)); + break; + + case AF_INET6: + snprintf(s, maxlen, "%d", + ntohs(((struct sockaddr_in6*)sa)->sin6_port)); + break; + + default: + strncpy(s, "Unknown AF", maxlen); + return NULL; + } + + return s; +}