FreeCalypso > hg > themwi-rtp-lib
changeset 19:b8cb5146e5b4
endp: beginning
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 07 Jul 2024 02:14:01 +0000 |
parents | ec50018cc4ea |
children | 695fdb670d30 |
files | include/endp.h src/Makefile src/endp_create.c src/endp_internal.h |
diffstat | 4 files changed, 132 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/include/endp.h Sun Jul 07 02:14:01 2024 +0000 @@ -0,0 +1,60 @@ +/* + * twrtp_endp is the big abstraction provided by libtwrtp: a complete + * RTP endpoint with RTP & RTCP sockets, sending and receiving both types + * of packets, and incorporating twjit. + */ + +#pragma once + +#include <stdint.h> +#include <stdbool.h> + +#include <osmocom/core/osmo_io.h> +#include <osmocom/core/socket.h> + +#include <themwi/rtp/twjit.h> + +struct twrtp_endp_tx { + uint32_t ssrc; + uint32_t ts; + uint16_t seq; + bool started; + bool restart; +}; + +struct twrtp_endp_stats { + uint32_t rx_rtp_pkt; + uint32_t rx_rtp_badsrc; + uint32_t rx_rtcp_pkt; + uint32_t rx_rtcp_badsrc; + uint32_t tx_rtp_pkt; + uint32_t tx_rtp_bytes; + uint32_t tx_rtcp_pkt; +}; + +struct twrtp_endp { + /* the root of the matter: the two sockets */ + int rtp_fd; + int rtcp_fd; + struct osmo_io_fd *iofd_rtp; + struct osmo_io_fd *iofd_rtcp; + struct osmo_sockaddr rtp_remote; + struct osmo_sockaddr rtcp_remote; + /* Rx and Tx state */ + struct twrtp_jibuf_inst *twjit; + /* RTCP Rx structure to be inserted here */ + struct twrtp_endp_tx tx; + /* always have to have stats */ + struct twrtp_endp_stats stats; + /* bool flags at the end for structure packing optimization */ + bool register_done; + bool remote_set; + bool rx_enable; +}; + +/* public API functions */ + +struct twrtp_endp *twrtp_endp_create(void *ctx, + struct twrtp_jibuf_config *config); + +void twrtp_endp_destroy(struct twrtp_endp *endp);
--- a/src/Makefile Sun Jul 07 00:15:00 2024 +0000 +++ b/src/Makefile Sun Jul 07 02:14:01 2024 +0000 @@ -1,10 +1,10 @@ -OBJS= bind_fdpair.o twjit.o twjit_in.o twjit_out.o twjit_vty.o +OBJS= bind_fdpair.o endp_create.o twjit.o twjit_in.o twjit_out.o twjit_vty.o LIB= libtwrtp.a include ../config.defs CPPFLAGS=-I../build-inc ${OSMO_INCLUDE} -HDRS= ../include/twjit.h +HDRS= ../include/endp.h ../include/twjit.h endp_internal.h all: ${LIB}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/endp_create.c Sun Jul 07 02:14:01 2024 +0000 @@ -0,0 +1,60 @@ +/* + * Create and destroy functions for twrtp_endp. + */ + +#include <stdint.h> +#include <stdbool.h> +#include <string.h> + +#include <osmocom/core/talloc.h> +#include <osmocom/core/osmo_io.h> +#include <osmocom/core/utils.h> + +#include <themwi/rtp/endp.h> +#include <themwi/rtp/twjit.h> +#include "endp_internal.h" + +struct twrtp_endp *twrtp_endp_create(void *ctx, + struct twrtp_jibuf_config *config) +{ + struct twrtp_endp *endp; + + endp = talloc_zero(ctx, struct twrtp_endp); + if (!endp) + return NULL; + + endp->iofd_rtp = osmo_iofd_setup(endp, -1, NULL, + OSMO_IO_FD_MODE_RECVFROM_SENDTO, + &_twrtp_endp_iops_rtp, endp); + if (!endp->iofd_rtp) { + talloc_free(endp); + return NULL; + } + + endp->iofd_rtcp = osmo_iofd_setup(endp, -1, NULL, + OSMO_IO_FD_MODE_RECVFROM_SENDTO, + &_twrtp_endp_iops_rtcp, endp); + if (!endp->iofd_rtcp) { + osmo_iofd_free(endp->iofd_rtp); + talloc_free(endp); + return NULL; + } + + endp->twjit = twrtp_jibuf_create(endp, config); + if (!endp->twjit) { + osmo_iofd_free(endp->iofd_rtp); + osmo_iofd_free(endp->iofd_rtcp); + talloc_free(endp); + return NULL; + } + + return endp; +} + +void twrtp_endp_destroy(struct twrtp_endp *endp) +{ + osmo_iofd_free(endp->iofd_rtp); + osmo_iofd_free(endp->iofd_rtcp); + twrtp_jibuf_destroy(endp->twjit); + talloc_free(endp); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/endp_internal.h Sun Jul 07 02:14:01 2024 +0000 @@ -0,0 +1,10 @@ +/* + * Internal declarations for twrtp_endp library component. + */ + +#pragma once + +#include <osmocom/core/osmo_io.h> + +extern const struct osmo_io_ops _twrtp_endp_iops_rtp; +extern const struct osmo_io_ops _twrtp_endp_iops_rtcp;