annotate include/endp.h @ 42:334d883b96ba

twrtp_jibuf_create: make config argument const While this config structure is not a constant in the mathematical sense of the term (it is expected that vty config changes may happen while twjit instance is alive), twjit functions never write to it, only read, hence it is 'const' in the not-quite-mathematical C-standard sense.
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 20 Dec 2024 22:47:20 +0000
parents 8f1700a42ca5
children 8cdfef36d9db
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * twrtp_endp is the big abstraction provided by libtwrtp: a complete
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * RTP endpoint with RTP & RTCP sockets, sending and receiving both types
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * of packets, and incorporating twjit.
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 */
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 #pragma once
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 #include <stdint.h>
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <stdbool.h>
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 #include <osmocom/core/osmo_io.h>
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 #include <osmocom/core/socket.h>
29
3e01a71b7c7c implement RTCP Rx
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
14 #include <osmocom/core/timer.h>
19
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 #include <themwi/rtp/twjit.h>
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 struct twrtp_endp_tx {
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 uint32_t ssrc;
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 uint32_t ts;
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 uint16_t seq;
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 bool started;
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 bool restart;
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 };
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25
29
3e01a71b7c7c implement RTCP Rx
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
26 struct twrtp_endp_rtcp_rx {
3e01a71b7c7c implement RTCP Rx
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
27 uint32_t sr_ssrc;
3e01a71b7c7c implement RTCP Rx
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
28 uint16_t sr_ntp_sec;
3e01a71b7c7c implement RTCP Rx
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
29 uint16_t sr_ntp_fract;
3e01a71b7c7c implement RTCP Rx
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
30 struct timespec sr_rx_time;
3e01a71b7c7c implement RTCP Rx
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
31 uint32_t rr_lost_word;
3e01a71b7c7c implement RTCP Rx
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
32 uint32_t rr_jitter;
3e01a71b7c7c implement RTCP Rx
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
33 bool got_sr;
3e01a71b7c7c implement RTCP Rx
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
34 bool got_rr;
3e01a71b7c7c implement RTCP Rx
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
35 };
3e01a71b7c7c implement RTCP Rx
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
36
32
aa97e77e7de6 implement RTCP Tx
Mychaela Falconia <falcon@freecalypso.org>
parents: 30
diff changeset
37 struct twrtp_endp_rtcp_tx {
aa97e77e7de6 implement RTCP Tx
Mychaela Falconia <falcon@freecalypso.org>
parents: 30
diff changeset
38 uint32_t last_received;
aa97e77e7de6 implement RTCP Tx
Mychaela Falconia <falcon@freecalypso.org>
parents: 30
diff changeset
39 uint32_t last_expected;
aa97e77e7de6 implement RTCP Tx
Mychaela Falconia <falcon@freecalypso.org>
parents: 30
diff changeset
40 };
aa97e77e7de6 implement RTCP Tx
Mychaela Falconia <falcon@freecalypso.org>
parents: 30
diff changeset
41
19
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 struct twrtp_endp_stats {
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 uint32_t rx_rtp_pkt;
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 uint32_t rx_rtp_badsrc;
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 uint32_t rx_rtcp_pkt;
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 uint32_t rx_rtcp_badsrc;
29
3e01a71b7c7c implement RTCP Rx
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
47 uint32_t rx_rtcp_invalid;
3e01a71b7c7c implement RTCP Rx
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
48 uint32_t rx_rtcp_wrong_ssrc;
19
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 uint32_t tx_rtp_pkt;
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 uint32_t tx_rtp_bytes;
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 uint32_t tx_rtcp_pkt;
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 };
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 struct twrtp_endp {
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 /* the root of the matter: the two sockets */
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 int rtp_fd;
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 int rtcp_fd;
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 struct osmo_io_fd *iofd_rtp;
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 struct osmo_io_fd *iofd_rtcp;
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 struct osmo_sockaddr rtp_remote;
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 struct osmo_sockaddr rtcp_remote;
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 /* Rx and Tx state */
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 struct twrtp_jibuf_inst *twjit;
32
aa97e77e7de6 implement RTCP Tx
Mychaela Falconia <falcon@freecalypso.org>
parents: 30
diff changeset
64 struct twrtp_endp_tx tx;
29
3e01a71b7c7c implement RTCP Rx
Mychaela Falconia <falcon@freecalypso.org>
parents: 27
diff changeset
65 struct twrtp_endp_rtcp_rx rtcp_rx;
32
aa97e77e7de6 implement RTCP Tx
Mychaela Falconia <falcon@freecalypso.org>
parents: 30
diff changeset
66 struct twrtp_endp_rtcp_tx rtcp_tx;
30
9fd693f234f8 definitions for RTCP SDES
Mychaela Falconia <falcon@freecalypso.org>
parents: 29
diff changeset
67 uint8_t *sdes_buf;
9fd693f234f8 definitions for RTCP SDES
Mychaela Falconia <falcon@freecalypso.org>
parents: 29
diff changeset
68 uint16_t sdes_len;
9fd693f234f8 definitions for RTCP SDES
Mychaela Falconia <falcon@freecalypso.org>
parents: 29
diff changeset
69 uint16_t auto_rtcp_interval;
33
e70e7b266f89 hook in RTCP output
Mychaela Falconia <falcon@freecalypso.org>
parents: 32
diff changeset
70 uint16_t auto_rtcp_count;
19
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 /* always have to have stats */
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 struct twrtp_endp_stats stats;
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 /* bool flags at the end for structure packing optimization */
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 bool register_done;
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 bool remote_set;
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 bool rx_enable;
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 };
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 /* public API functions */
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 struct twrtp_endp *twrtp_endp_create(void *ctx,
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 struct twrtp_jibuf_config *config);
20
695fdb670d30 implement twrtp_endp_register_fds()
Mychaela Falconia <falcon@freecalypso.org>
parents: 19
diff changeset
83 void twrtp_endp_destroy(struct twrtp_endp *endp);
19
b8cb5146e5b4 endp: beginning
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84
20
695fdb670d30 implement twrtp_endp_register_fds()
Mychaela Falconia <falcon@freecalypso.org>
parents: 19
diff changeset
85 int twrtp_endp_register_fds(struct twrtp_endp *endp);
21
2032201bd034 implement twrtp_endp_bind_ip_port()
Mychaela Falconia <falcon@freecalypso.org>
parents: 20
diff changeset
86 int twrtp_endp_bind_ip_port(struct twrtp_endp *endp, const char *ip,
2032201bd034 implement twrtp_endp_bind_ip_port()
Mychaela Falconia <falcon@freecalypso.org>
parents: 20
diff changeset
87 uint16_t port);
22
587437b62ed5 implement twrtp_endp_set_remote_ipv4()
Mychaela Falconia <falcon@freecalypso.org>
parents: 21
diff changeset
88
587437b62ed5 implement twrtp_endp_set_remote_ipv4()
Mychaela Falconia <falcon@freecalypso.org>
parents: 21
diff changeset
89 void twrtp_endp_set_remote_ipv4(struct twrtp_endp *endp,
587437b62ed5 implement twrtp_endp_set_remote_ipv4()
Mychaela Falconia <falcon@freecalypso.org>
parents: 21
diff changeset
90 const struct in_addr *ip, uint16_t port);
37
8f1700a42ca5 set_remote: add functions for IPv6 and for sockaddr_{in,in6}
Mychaela Falconia <falcon@freecalypso.org>
parents: 35
diff changeset
91 void twrtp_endp_set_remote_ipv6(struct twrtp_endp *endp,
8f1700a42ca5 set_remote: add functions for IPv6 and for sockaddr_{in,in6}
Mychaela Falconia <falcon@freecalypso.org>
parents: 35
diff changeset
92 const struct in6_addr *ip6, uint16_t port);
8f1700a42ca5 set_remote: add functions for IPv6 and for sockaddr_{in,in6}
Mychaela Falconia <falcon@freecalypso.org>
parents: 35
diff changeset
93 void twrtp_endp_set_remote_sin(struct twrtp_endp *endp,
8f1700a42ca5 set_remote: add functions for IPv6 and for sockaddr_{in,in6}
Mychaela Falconia <falcon@freecalypso.org>
parents: 35
diff changeset
94 const struct sockaddr_in *sin);
8f1700a42ca5 set_remote: add functions for IPv6 and for sockaddr_{in,in6}
Mychaela Falconia <falcon@freecalypso.org>
parents: 35
diff changeset
95 void twrtp_endp_set_remote_sin6(struct twrtp_endp *endp,
8f1700a42ca5 set_remote: add functions for IPv6 and for sockaddr_{in,in6}
Mychaela Falconia <falcon@freecalypso.org>
parents: 35
diff changeset
96 const struct sockaddr_in6 *sin6);
24
84d427017d2f endp: implement RTP Tx
Mychaela Falconia <falcon@freecalypso.org>
parents: 22
diff changeset
97
84d427017d2f endp: implement RTP Tx
Mychaela Falconia <falcon@freecalypso.org>
parents: 22
diff changeset
98 int twrtp_endp_tx_quantum(struct twrtp_endp *endp, const uint8_t *payload,
84d427017d2f endp: implement RTP Tx
Mychaela Falconia <falcon@freecalypso.org>
parents: 22
diff changeset
99 unsigned payload_len, uint8_t payload_type,
26
f71efdd08c33 RTP Tx: add auto_marker mode of operation
Mychaela Falconia <falcon@freecalypso.org>
parents: 24
diff changeset
100 bool marker, bool auto_marker, bool send_rtcp);
27
a0b89c028053 RTP Tx: implement skip operation
Mychaela Falconia <falcon@freecalypso.org>
parents: 26
diff changeset
101 void twrtp_endp_tx_skip(struct twrtp_endp *endp);
30
9fd693f234f8 definitions for RTCP SDES
Mychaela Falconia <falcon@freecalypso.org>
parents: 29
diff changeset
102
9fd693f234f8 definitions for RTCP SDES
Mychaela Falconia <falcon@freecalypso.org>
parents: 29
diff changeset
103 int twrtp_endp_set_sdes(struct twrtp_endp *endp, const char *cname,
9fd693f234f8 definitions for RTCP SDES
Mychaela Falconia <falcon@freecalypso.org>
parents: 29
diff changeset
104 const char *name, const char *email, const char *phone,
9fd693f234f8 definitions for RTCP SDES
Mychaela Falconia <falcon@freecalypso.org>
parents: 29
diff changeset
105 const char *loc, const char *tool, const char *note);
34
fc77c3482084 add function for sending RTCP RR
Mychaela Falconia <falcon@freecalypso.org>
parents: 33
diff changeset
106 int twrtp_endp_send_rtcp_rr(struct twrtp_endp *endp);
35
c0ce22777694 add helper functions for DSCP and socket priority
Mychaela Falconia <falcon@freecalypso.org>
parents: 34
diff changeset
107
c0ce22777694 add helper functions for DSCP and socket priority
Mychaela Falconia <falcon@freecalypso.org>
parents: 34
diff changeset
108 int twrtp_endp_set_dscp(struct twrtp_endp *endp, uint8_t dscp);
c0ce22777694 add helper functions for DSCP and socket priority
Mychaela Falconia <falcon@freecalypso.org>
parents: 34
diff changeset
109 int twrtp_endp_set_socket_prio(struct twrtp_endp *endp, int prio);