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;