mobile/voice.c: send EFR frames back instead of FR

Related: SYS#4924
Change-Id: I73d1f88b0865ad97b85418ff76739febf2e128a7
osmith/virt-voice
Oliver Smith 2020-04-27 15:56:36 +02:00
parent 1bafb2c125
commit 7bee40eafb
2 changed files with 7 additions and 6 deletions

View File

@ -899,9 +899,9 @@ int l1ctl_tx_traffic_req(struct osmocom_ms *ms, struct msgb *msg,
DEBUGP(DL1C, "TRAFFIC REQ len=%zu (%s)\n", frame_len,
osmo_hexdump(frame, frame_len));
if ((frame[0] >> 4) != 0xd) {
if ((frame[0] >> 4) != 0xc) {
LOGP(DL1C, LOGL_ERROR, "Traffic Request has incorrect magic "
"(%u != 0xd)\n", frame[0] >> 4);
"(%u != 0xc)\n", frame[0] >> 4);
msgb_free(msg);
return -EINVAL;
}

View File

@ -22,6 +22,7 @@
#include <stdlib.h>
#include <osmocom/core/msgb.h>
#include <osmocom/codec/codec.h>
#include <osmocom/bb/common/osmocom_data.h>
#include <osmocom/bb/mobile/mncc.h>
@ -41,7 +42,7 @@ static int gsm_recv_voice(struct osmocom_ms *ms, struct msgb *msg)
/* push mncc header in front of data */
mncc = (struct gsm_data_frame *)
msgb_push(msg, sizeof(struct gsm_data_frame));
mncc->msg_type = GSM_TCHF_FRAME;
mncc->msg_type = GSM_TCHF_FRAME_EFR;
mncc->callref = ms->mncc_entity.ref;
/* HACK: send voice frame back */
@ -63,11 +64,11 @@ int gsm_send_voice(struct osmocom_ms *ms, struct gsm_data_frame *data)
{
struct msgb *nmsg;
nmsg = msgb_alloc_headroom(33 + 64, 64, "TCH/F");
nmsg = msgb_alloc_headroom(GSM_EFR_BYTES + 64, 64, "TCH/F");
if (!nmsg)
return -ENOMEM;
nmsg->l2h = msgb_put(nmsg, 33);
memcpy(nmsg->l2h, data->data, 33);
nmsg->l2h = msgb_put(nmsg, GSM_EFR_BYTES);
memcpy(nmsg->l2h, data->data, GSM_EFR_BYTES);
return gsm48_rr_tx_voice(ms, nmsg);
}