diff options
-rw-r--r-- | openbsc/include/openbsc/mgcp_internal.h | 1 | ||||
-rw-r--r-- | openbsc/src/libmgcp/mgcp_network.c | 9 |
2 files changed, 10 insertions, 0 deletions
diff --git a/openbsc/include/openbsc/mgcp_internal.h b/openbsc/include/openbsc/mgcp_internal.h index b58eb9b58..4e215b8f1 100644 --- a/openbsc/include/openbsc/mgcp_internal.h +++ b/openbsc/include/openbsc/mgcp_internal.h @@ -64,6 +64,7 @@ struct mgcp_rtp_state { uint32_t stats_jitter; int32_t stats_transit; int stats_cycles; + bool patched_first_rtp_payload; }; struct mgcp_rtp_codec { diff --git a/openbsc/src/libmgcp/mgcp_network.c b/openbsc/src/libmgcp/mgcp_network.c index 5686e5944..b64e25dd7 100644 --- a/openbsc/src/libmgcp/mgcp_network.c +++ b/openbsc/src/libmgcp/mgcp_network.c @@ -666,6 +666,14 @@ int mgcp_send(struct mgcp_endpoint *endp, int dest, int is_rtp, ); forward_data(rtp_end->rtp.fd, &endp->taps[tap_idx], buf, len); + + if (tap_idx == MGCP_TAP_BTS_OUT + && !rtp_state->patched_first_rtp_payload) { + uint8_t *data = &buf[12]; + osmo_hexparse("e400", data, 2); + rtp_state->patched_first_rtp_payload = true; + } + rc = mgcp_udp_send(rtp_end->rtp.fd, &rtp_end->addr, rtp_end->rtp_port, buf, len); @@ -685,6 +693,7 @@ int mgcp_send(struct mgcp_endpoint *endp, int dest, int is_rtp, ntohs(rtp_end->rtp_port), ntohs(rtp_end->rtcp_port) ); + return mgcp_udp_send(rtp_end->rtcp.fd, &rtp_end->addr, rtp_end->rtcp_port, buf, rc); |