From f198259f57f868bc85726cbac3df47b143b0300f Mon Sep 17 00:00:00 2001 From: Sylvain Munaut Date: Sun, 27 Dec 2015 23:19:25 +0100 Subject: HACK for HR Signed-off-by: Sylvain Munaut --- openbsc/src/libtrau/rtp_proxy.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/openbsc/src/libtrau/rtp_proxy.c b/openbsc/src/libtrau/rtp_proxy.c index 8c982c976..26bffef98 100644 --- a/openbsc/src/libtrau/rtp_proxy.c +++ b/openbsc/src/libtrau/rtp_proxy.c @@ -147,6 +147,7 @@ static int rtp_decode(struct msgb *msg, uint32_t callref, struct msgb **data) break; case RTP_PT_GSM_HALF: msg_type = GSM_TCHH_FRAME; + payload_len++; if (payload_len != RTP_LEN_GSM_HALF) { DEBUGPC(DLMUX, "received RTP half rate frame with " "payload length != %d (len = %d)\n", @@ -187,7 +188,12 @@ static int rtp_decode(struct msgb *msg, uint32_t callref, struct msgb **data) *data0 = payload_len; } payload_out = msgb_put(new_msg, payload_len); - memcpy(payload_out, payload, payload_len); + if (rtph->payload_type == RTP_PT_GSM_HALF) { + payload_out[0] = 0; + memcpy(payload_out + 1, payload, payload_len - 1); + } else { + memcpy(payload_out, payload, payload_len); + } *data = new_msg; return 0; @@ -229,7 +235,7 @@ int rtp_send_frame(struct rtp_socket *rs, struct gsm_data_frame *frame) break; case GSM_TCHH_FRAME: payload_type = RTP_PT_GSM_HALF; - payload_len = RTP_LEN_GSM_HALF; + payload_len = RTP_LEN_GSM_HALF - 1; duration = RTP_GSM_DURATION; break; case GSM_TCH_FRAME_AMR: @@ -280,6 +286,8 @@ int rtp_send_frame(struct rtp_socket *rs, struct gsm_data_frame *frame) payload = msgb_put(msg, payload_len); if (frame->msg_type == GSM_TCH_FRAME_AMR) memcpy(payload, frame->data + 1, payload_len); + else if (frame->msg_type == GSM_TCHH_FRAME) + memcpy(payload, frame->data + 1, payload_len); else memcpy(payload, frame->data, payload_len); msgb_enqueue(&rss->tx_queue, msg); -- cgit v1.2.3