From 0fc1112c6d0610d2f07981ebc9c6be7ed0114bb0 Mon Sep 17 00:00:00 2001 From: Dmitry Sharshakov Date: Sat, 17 Jun 2023 09:49:39 +0300 Subject: [PATCH] module-rtp-sap: get source.ip from network interface if not supplied --- src/modules/module-rtp-sap.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/modules/module-rtp-sap.c b/src/modules/module-rtp-sap.c index b24b13bdc..82a7d716e 100644 --- a/src/modules/module-rtp-sap.c +++ b/src/modules/module-rtp-sap.c @@ -1472,8 +1472,23 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args) impl->cleanup_interval = pw_properties_get_uint32(impl->props, "sap.cleanup.sec", DEFAULT_CLEANUP_SEC); - if ((str = pw_properties_get(props, "source.ip")) == NULL) + if ((str = pw_properties_get(props, "source.ip")) == NULL) { str = DEFAULT_SOURCE_IP; + if (impl->ifname) { + int fd = socket(AF_INET, SOCK_DGRAM, 0); + if (fd >= 0) { + struct ifreq req; + spa_zero(req); + req.ifr_addr.sa_family = AF_INET; + snprintf(req.ifr_name, sizeof(req.ifr_name), "%s", impl->ifname); + res = ioctl(fd, SIOCGIFADDR, &req); + if (res < 0) + pw_log_warn("SIOCGIFADDR %s failed: %m", impl->ifname); + str = inet_ntoa(((struct sockaddr_in *)&req.ifr_addr)->sin_addr); + close(fd); + } + } + } if ((res = parse_address(str, port, &impl->src_addr, &impl->src_len)) < 0) { pw_log_error("invalid source.ip %s: %s", str, spa_strerror(res)); goto out;