modules: use pw_net_get_ip

Make pw_net_get_ip also accept NULL ip to just get the port and ip
version. Make rtsp-client use pw_net_get_ip.

Make sure we initialize the iovec before logging in all cases.
This commit is contained in:
Wim Taymans 2026-05-12 12:52:03 +02:00
parent 8860dc809d
commit 6d998a9193
3 changed files with 13 additions and 22 deletions

View file

@ -497,6 +497,8 @@ static void stream_send_packet(void *data, struct iovec *iov, size_t iovlen)
out[0] |= htonl((uint32_t) len + 12);
tcp_pkt[0] = htonl(0x24000000);
out_vec[msg.msg_iovlen++] = (struct iovec) { tcp_pkt, 4 };
} else {
out_vec[2].iov_len = 0;
}
out_vec[msg.msg_iovlen++] = (struct iovec) { header, 12 };

View file

@ -10,6 +10,7 @@
#include <spa/utils/result.h>
#include "network-utils.h"
#include "rtsp-client.h"
#define pw_rtsp_client_emit(o,m,v,...) spa_hook_list_call(&o->listener_list, struct pw_rtsp_client_events, m, v, ##__VA_ARGS__)
@ -45,11 +46,7 @@ struct pw_rtsp_client {
char *session_id;
char *url;
union {
struct sockaddr sa;
struct sockaddr_in in;
struct sockaddr_in6 in6;
} local_addr;
struct sockaddr_storage local_addr;
struct spa_source *source;
unsigned int connecting:1;
@ -140,19 +137,11 @@ const struct pw_properties *pw_rtsp_client_get_properties(struct pw_rtsp_client
int pw_rtsp_client_get_local_ip(struct pw_rtsp_client *client,
int *version, char *ip, size_t len)
{
if (client->local_addr.sa.sa_family == AF_INET) {
*version = 4;
if (ip)
inet_ntop(client->local_addr.sa.sa_family,
&client->local_addr.in.sin_addr, ip, len);
} else if (client->local_addr.sa.sa_family == AF_INET6) {
*version = 6;
if (ip)
inet_ntop(client->local_addr.sa.sa_family,
&client->local_addr.in6.sin6_addr,
ip, len);
} else
return -EIO;
bool is_ipv4;
int res;
if ((res = pw_net_get_ip(&client->local_addr, ip, len, &is_ipv4, NULL)) < 0)
return res;
*version = is_ipv4 ? 4 : 6;
return 0;
}
@ -170,8 +159,8 @@ static int handle_connect(struct pw_rtsp_client *client, int fd)
if (res != 0)
return -res;
len = sizeof(client->local_addr.sa);
if (getsockname(fd, &client->local_addr.sa, &len) < 0)
len = sizeof(client->local_addr);
if (getsockname(fd, (struct sockaddr*)&client->local_addr, &len) < 0)
return -errno;
if ((res = pw_rtsp_client_get_local_ip(client, &ip_version,

View file

@ -152,13 +152,13 @@ static inline int pw_net_get_ip(const struct sockaddr_storage *sa, char *ip, siz
if (sa->ss_family == AF_INET) {
struct sockaddr_in *in = (struct sockaddr_in*)sa;
if (inet_ntop(sa->ss_family, &in->sin_addr, ip, len) == NULL)
if (ip && inet_ntop(sa->ss_family, &in->sin_addr, ip, len) == NULL)
return -errno;
if (port)
*port = ntohs(in->sin_port);
} else if (sa->ss_family == AF_INET6) {
struct sockaddr_in6 *in = (struct sockaddr_in6*)sa;
if (inet_ntop(sa->ss_family, &in->sin6_addr, ip, len) == NULL)
if (ip && inet_ntop(sa->ss_family, &in->sin6_addr, ip, len) == NULL)
return -errno;
if (port)
*port = ntohs(in->sin6_port);