comparison mgw/gsm2pstn.c @ 199:e6c7ced3c031

mgw: accept zero-length RTP payload as BFI Mainline OsmoBTS now has an option (rtp continuous-streaming) that causes it to emit an RTP packet every 20 ms without gaps, sending a BFI marker in the form of zero-length RTP payload when it has nothing else to send. These codec-independent BFI markers don't indicate TAF, but this provision is a good start. Accept this BFI packet format in themwi-mgw.
author Mychaela Falconia <falcon@freecalypso.org>
date Wed, 29 Mar 2023 20:23:43 -0800
parents cf1ba5d65188
children 0047c4c08d9e
comparison
equal deleted inserted replaced
198:cf1ba5d65188 199:e6c7ced3c031
57 "GSM RTP ep got UDP packet from wrong source"); 57 "GSM RTP ep got UDP packet from wrong source");
58 ep->g2p_err_flags |= ERR_WRONG_UDP_SRC; 58 ep->g2p_err_flags |= ERR_WRONG_UDP_SRC;
59 } 59 }
60 return; 60 return;
61 } 61 }
62 if (pktsize < RTP_PACKET_SIZE_BFI) { 62 if (pktsize < RTP_PACKET_HDR_SIZE) {
63 bad_rtp_pkt: if (!(ep->g2p_err_flags & ERR_BAD_RTP_PACKET)) { 63 bad_rtp_pkt: if (!(ep->g2p_err_flags & ERR_BAD_RTP_PACKET)) {
64 syslog(LOG_ERR, "Rx bad RTP packet on GSM side"); 64 syslog(LOG_ERR, "Rx bad RTP packet on GSM side");
65 ep->g2p_err_flags |= ERR_BAD_RTP_PACKET; 65 ep->g2p_err_flags |= ERR_BAD_RTP_PACKET;
66 } 66 }
67 return; 67 return;
69 if (pkt.v_p_x_cc != 0x80) 69 if (pkt.v_p_x_cc != 0x80)
70 goto bad_rtp_pkt; 70 goto bad_rtp_pkt;
71 if ((pkt.m_pt & 0x7F) != ep->gsm_payload_type) 71 if ((pkt.m_pt & 0x7F) != ep->gsm_payload_type)
72 goto bad_rtp_pkt; 72 goto bad_rtp_pkt;
73 if (pktsize == ep->gsm_rtp_pkt_size && 73 if (pktsize == ep->gsm_rtp_pkt_size &&
74 (pkt.payload[0] & 0xF0) == ep->gsm_payload_magic) 74 (pkt.payload[0] & 0xF0) == ep->gsm_payload_magic) {
75 bfi = 0; 75 bfi = 0;
76 else if (pktsize == RTP_PACKET_SIZE_BFI && pkt.payload[0] == 0xBF) { 76 taf = 0;
77 } else if (pktsize == RTP_PACKET_SIZE_BFI && pkt.payload[0] == 0xBF) {
77 bfi = 1; 78 bfi = 1;
78 taf = pkt.payload[1] & 1; 79 taf = pkt.payload[1] & 1;
80 } else if (pktsize == RTP_PACKET_HDR_SIZE) {
81 bfi = 1;
82 taf = 0;
79 } else 83 } else
80 goto bad_rtp_pkt; 84 goto bad_rtp_pkt;
81 if (ep->g2p_state && pkt.ssrc != ep->g2p_ssrc) { 85 if (ep->g2p_state && pkt.ssrc != ep->g2p_ssrc) {
82 if (!(ep->g2p_err_flags & ERR_SSRC_CHANGE)) { 86 if (!(ep->g2p_err_flags & ERR_SSRC_CHANGE)) {
83 syslog(LOG_ERR, "GSM RTP stream changed SSRC"); 87 syslog(LOG_ERR, "GSM RTP stream changed SSRC");