aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--openbsc/include/openbsc/mgcp_internal.h1
-rw-r--r--openbsc/src/libmgcp/mgcp_network.c9
2 files changed, 10 insertions, 0 deletions
diff --git a/openbsc/include/openbsc/mgcp_internal.h b/openbsc/include/openbsc/mgcp_internal.h
index b58eb9b..4e215b8 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 5686e59..b64e25d 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);