diff sip-manual-out/rtp_tx.c @ 201:d3c99b41fb04

sip-manual-out TFO: rework for continuous output of TFO_REQ
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 02 Apr 2023 18:01:34 -0800
parents a3d71489672f
children f3164f732b84
line wrap: on
line diff
--- a/sip-manual-out/rtp_tx.c	Sun Apr 02 17:44:23 2023 -0800
+++ b/sip-manual-out/rtp_tx.c	Sun Apr 02 18:01:34 2023 -0800
@@ -24,7 +24,8 @@
 static uint32_t rtp_out_ts;
 static uint16_t rtp_out_seq;
 
-static uint16_t is_out_buf[7], *is_out_ptr;
+static uint16_t tfo_fill_buf[9], tfo_req_buf[7];
+static uint16_t *is_out_ptr;
 static unsigned is_out_count;
 
 void
@@ -33,6 +34,20 @@
 	rtp_ssrc = cur_event_time.tv_sec ^ cur_event_time.tv_usec ^ getpid();
 }
 
+void
+prepare_tfo_fill()
+{
+	tfo_fill_buf[0] = 0x15A;
+	tfo_fill_buf[1] = 0x1A9;
+	tfo_fill_buf[2] = 0x129;
+	tfo_fill_buf[3] = 0x15A;
+	tfo_fill_buf[4] = 0x1A9;
+	tfo_fill_buf[5] = 0x129;
+	tfo_fill_buf[6] = 0x15A;
+	tfo_fill_buf[7] = 0x1A9;
+	tfo_fill_buf[8] = 0x129;
+}
+
 static void
 insert_is_msg(payload, word)
 	uint8_t *payload;
@@ -66,6 +81,10 @@
 	if (is_out_count) {
 		insert_is_msg(pkt.payload, *is_out_ptr++);
 		is_out_count--;
+		if (!is_out_count) {
+			is_out_ptr = tfo_req_buf;
+			is_out_count = 7;
+		}
 	}
 	addrlen = sizeof(struct sockaddr_in);
 	sendto(rtp_udp_fd, &pkt, RTP_PACKET_SIZE_PSTN, 0,
@@ -76,12 +95,12 @@
 send_tfo_req(sig, codec)
 	unsigned sig, codec;
 {
-	is_out_buf[0] = 0x15A;
-	is_out_buf[1] = 0x1A9;
-	is_out_buf[2] = 0x05D;
-	is_out_buf[3] = 0x14E;
-	is_out_buf[4] = 0x14B;
-	encode_tfo_ext_words(sig, codec, 0, is_out_buf + 5);
-	is_out_ptr = is_out_buf;
-	is_out_count = 7;
+	tfo_req_buf[0] = 0x15A;
+	tfo_req_buf[1] = 0x1A9;
+	tfo_req_buf[2] = 0x05D;
+	tfo_req_buf[3] = 0x14E;
+	tfo_req_buf[4] = 0x14B;
+	encode_tfo_ext_words(sig, codec, 0, tfo_req_buf + 5);
+	is_out_ptr = tfo_fill_buf;
+	is_out_count = 9;
 }