X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fnetutl.c;h=a9ad17ce016c8c27277251a3bf4b74989aa418f6;hb=970799aa3406c22a575f665d3964c15d7c9ab555;hp=701a430935db52c145cdb12f5401fbe711d2dcf5;hpb=eecfeadeb4fc70ee002b81c20ba12ba3e3acb843;p=tinc diff --git a/src/netutl.c b/src/netutl.c index 701a4309..a9ad17ce 100644 --- a/src/netutl.c +++ b/src/netutl.c @@ -121,7 +121,10 @@ char *sockaddr2hostname(const sockaddr_t *sa) { char port[NI_MAXSERV] = "unknown"; int err; - if(sa->sa.sa_family == AF_UNKNOWN) { + if(sa->sa.sa_family == AF_UNSPEC) { + xasprintf(&str, "unspec port unspec"); + return str; + } else if(sa->sa.sa_family == AF_UNKNOWN) { xasprintf(&str, "%s port %s", sa->unknown.address, sa->unknown.port); return str; } @@ -231,3 +234,22 @@ void sockaddrunmap(sockaddr_t *sa) { sa->in.sin_family = AF_INET; } } + +void sockaddr_setport(sockaddr_t *sa, const char *port) { + uint16_t portnum = htons(atoi(port)); + if(!portnum) + return; + switch(sa->sa.sa_family) { + case AF_INET: + sa->in.sin_port = portnum; + break; + case AF_INET6: + sa->in6.sin6_port = portnum; + break; + case AF_UNKNOWN: + free(sa->unknown.port); + sa->unknown.port = xstrdup(port); + default: + return; + } +}