From 16e647c65a4607af830408917eb7e7993f62322e Mon Sep 17 00:00:00 2001 From: Martin Pulec Date: Mon, 25 Nov 2024 13:59:15 +0100 Subject: [PATCH] hd-rum-translator: use get_sockaddr_str() get_sockaddr_str is used also for create-port in the "dynamic" conference mode, so this is perhaps better because the calls are symmetric. Also it will allow eg. to add scope ID later to both create- and delete-port in the single call. get_replica_mod_name() is kept for the old/static use cases when create-port is called explicitly or from an argument on command-line. Then the address can be also the hostname (or a IP addresss in non-canonical form) and it is up to the user to use the same host:addr representation. --- src/hd-rum-translator/hd-rum-translator.cpp | 8 +++----- src/utils/net.c | 12 ++++++------ src/utils/net.h | 2 -- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/hd-rum-translator/hd-rum-translator.cpp b/src/hd-rum-translator/hd-rum-translator.cpp index 90b9a3e2f..6568e9d73 100644 --- a/src/hd-rum-translator/hd-rum-translator.cpp +++ b/src/hd-rum-translator/hd-rum-translator.cpp @@ -888,11 +888,9 @@ public: log_msg(LOG_LEVEL_NOTICE, "Removing participant\n"); std::string msg = "delete-port "; auto addr = reinterpret_cast(&it->addr); - char addr_str[128]; - get_sockaddr_addr_str(addr, addr_str, sizeof(addr_str)); - char *replica_name = get_replica_mod_name(addr_str, get_sockaddr_addr_port(addr)); - msg += replica_name; - free(replica_name); + char replica_name[ADDR_STR_BUF_LEN]; + msg += get_sockaddr_str(addr, replica_name, + sizeof replica_name); std::swap(*it, participants.back()); participants.pop_back(); diff --git a/src/utils/net.c b/src/utils/net.c index 35b58891e..55c3b09b9 100644 --- a/src/utils/net.c +++ b/src/utils/net.c @@ -411,7 +411,9 @@ bool is_ipv6_supported(void) return true; } -unsigned get_sockaddr_addr_port(const struct sockaddr *sa){ +static unsigned +get_sockaddr_addr_port(const struct sockaddr *sa) +{ unsigned port = 0; if (sa->sa_family == AF_INET6) { port = ntohs(((const struct sockaddr_in6 *) (const void *) sa) @@ -426,13 +428,9 @@ unsigned get_sockaddr_addr_port(const struct sockaddr *sa){ return port; } -/** - * @returns the input buffer (buf) - */ -char * +static char * get_sockaddr_addr_str(const struct sockaddr *sa, char *buf, size_t n) { - assert(n >= IN6_MAX_ASCII_LEN + 3 /* []: */ + 1 /* \0 */); const void *src = NULL; if (sa->sa_family == AF_INET6) { snprintf(buf, n, "["); @@ -458,11 +456,13 @@ get_sockaddr_addr_str(const struct sockaddr *sa, char *buf, size_t n) } /** + * @param n size of buf; must be at least ADDR_STR_BUF_LEN * @returns the input buffer (buf) */ char * get_sockaddr_str(const struct sockaddr *sa, char *buf, size_t n) { + assert(n >= ADDR_STR_BUF_LEN); get_sockaddr_addr_str(sa, buf, n); unsigned port = get_sockaddr_addr_port(sa); diff --git a/src/utils/net.h b/src/utils/net.h index 62b711ca4..df7c71017 100644 --- a/src/utils/net.h +++ b/src/utils/net.h @@ -70,8 +70,6 @@ bool is_host_private(const char *hostname); uint16_t socket_get_recv_port(int fd); bool get_local_addresses(struct sockaddr_storage *addrs, size_t *len, int ip_version); bool is_ipv6_supported(void); -char *get_sockaddr_addr_str(const struct sockaddr *sa, char *buf, size_t n); -unsigned get_sockaddr_addr_port(const struct sockaddr *sa); char *get_sockaddr_str(const struct sockaddr *sa, char *buf, size_t n); const char *ug_gai_strerror(int errcode);