aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNeels Hofmeyr <nhofmeyr@sysmocom.de>2017-03-16 16:14:34 +0100
committerNeels Hofmeyr <neels@hofmeyr.de>2017-08-27 17:40:53 +0200
commit3e168c072d3b635bb7b270a06c96c2b3bfd0265e (patch)
treeda2b7d8394685bc9501e77a096a2fcb63d603a77 /src
parent7b0c9687d7190c35b50a4836965323e88cdd6e36 (diff)
mgcp: hack RAB success from nano3G: patch first RTP payload
The ip.access nano3G needs the first RTP payload's first two bytes to read hex 'e400', or it will reject the RAB assignment. Add flag patched_first_rtp_payload to mgcp_rtp_state to detect the first RTP payload on a stream, and overwrite its first bytes with e400. This should probably be configurable, but seems to not harm other femto cells (as long as we patch only the first RTP payload in each stream). Only do this when sending to the BTS side. Related: OS#2459 Change-Id: I5eff04dcb0936e21690e427ae5e49228cd459bd4
Diffstat (limited to 'src')
-rw-r--r--src/libmgcp/mgcp_network.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/libmgcp/mgcp_network.c b/src/libmgcp/mgcp_network.c
index c9fe17973..399dc8fe1 100644
--- a/src/libmgcp/mgcp_network.c
+++ b/src/libmgcp/mgcp_network.c
@@ -667,6 +667,19 @@ int mgcp_send(struct mgcp_endpoint *endp, int dest, int is_rtp,
forward_data(rtp_end->rtp.fd, &endp->taps[tap_idx],
buf, len);
+ /* FIXME: HACK HACK HACK. See OS#2459.
+ * The ip.access nano3G needs the first RTP payload's first two bytes to read hex
+ * 'e400', or it will reject the RAB assignment. It seems to not harm other femto
+ * cells (as long as we patch only the first RTP payload in each stream).
+ */
+ if (tap_idx == MGCP_TAP_BTS_OUT
+ && !rtp_state->patched_first_rtp_payload) {
+ uint8_t *data = (uint8_t*)&buf[12];
+ data[0] = 0xe4;
+ data[1] = 0x00;
+ rtp_state->patched_first_rtp_payload = true;
+ }
+
rc = mgcp_udp_send(rtp_end->rtp.fd,
&rtp_end->addr,
rtp_end->rtp_port, buf, len);