mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2026-05-17 21:41:45 -04:00
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:
parent
8860dc809d
commit
6d998a9193
3 changed files with 13 additions and 22 deletions
|
|
@ -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 };
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue