Skip to content

Commit 7f5eddd

Browse files
committed
Set udp socket address
1 parent 9444f76 commit 7f5eddd

2 files changed

Lines changed: 32 additions & 2 deletions

File tree

include/smolrtsp/transport.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,19 @@ SmolRTSP_Transport smolrtsp_transport_tcp(
6969
*/
7070
SmolRTSP_Transport smolrtsp_transport_udp(int fd) SMOLRTSP_PRIV_MUST_USE;
7171

72+
/**
73+
* Creates a new UDP transport with address.
74+
*
75+
* @param[in] fd The socket file descriptor to be provided with data.
76+
* @param[in] addr Pointer to address data (e.g., sockaddr_un or sockaddr_in).
77+
* @param[in] len Length of the address in bytes.
78+
*
79+
* @pre `fd >= 0`
80+
* @pre `addr && len > 0 && len < sizeof(self->addr)`
81+
*/
82+
SmolRTSP_Transport smolrtsp_transport_udp_address(
83+
int fd, void *addr, size_t len) SMOLRTSP_PRIV_MUST_USE;
84+
7285
/**
7386
* Creates a new datagram socket suitable for #smolrtsp_transport_udp.
7487
*

src/transport/udp.c

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
typedef struct {
1616
int fd;
17+
char addr[128];
18+
size_t len;
1719
} SmolRTSP_UdpTransport;
1820

1921
declImpl(SmolRTSP_Transport, SmolRTSP_UdpTransport);
@@ -28,6 +30,21 @@ SmolRTSP_Transport smolrtsp_transport_udp(int fd) {
2830
SmolRTSP_UdpTransport *self = malloc(sizeof *self);
2931
assert(self);
3032
self->fd = fd;
33+
self->len = 0;
34+
35+
return DYN(SmolRTSP_UdpTransport, SmolRTSP_Transport, self);
36+
}
37+
38+
SmolRTSP_Transport
39+
smolrtsp_transport_udp_address(int fd, void *addr, size_t len) {
40+
assert(fd >= 0);
41+
assert(addr && len > 0 && len < sizeof(self->addr));
42+
43+
SmolRTSP_UdpTransport *self = malloc(sizeof *self);
44+
assert(self);
45+
self->fd = fd;
46+
self->len = len;
47+
memcpy(&self->addr, addr, len);
3148

3249
return DYN(SmolRTSP_UdpTransport, SmolRTSP_Transport, self);
3350
}
@@ -46,8 +63,8 @@ static int SmolRTSP_UdpTransport_transmit(VSelf, SmolRTSP_IoVecSlice bufs) {
4663
assert(self);
4764

4865
const struct msghdr msg = {
49-
.msg_name = NULL,
50-
.msg_namelen = 0,
66+
.msg_name = self->addr,
67+
.msg_namelen = self->len,
5168
.msg_iov = bufs.ptr,
5269
.msg_iovlen = bufs.len,
5370
.msg_control = NULL,

0 commit comments

Comments
 (0)