X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=gsm.cpp;h=ee46ff6503da426aaf701c17978dfd49e9f1a1cd;hp=9e17920449fd84920a0d7e089a8cdc792a9cbf02;hb=0ab74c122c8965a916fc395c0f72d4599aeb3f9f;hpb=b3d8622de3b364b2a6b5b6cf1f8d32364d37672b diff --git a/gsm.cpp b/gsm.cpp index 9e17920..ee46ff6 100644 --- a/gsm.cpp +++ b/gsm.cpp @@ -139,10 +139,10 @@ void Pgsm::send_mncc_rtp_connect(void) nrtp->payload_msg_type = GSM_TCHF_FRAME_EFR; break; case MEDIA_TYPE_AMR: - nrtp->payload_msg_type = GSM_TCHF_FRAME_AMR; + nrtp->payload_msg_type = GSM_TCH_FRAME_AMR; break; case MEDIA_TYPE_GSM_HR: - nrtp->payload_msg_type = GSM_TCHF_FRAME_HR; + nrtp->payload_msg_type = GSM_TCHH_FRAME; break; } nrtp->payload_type = p_g_payload_type; @@ -229,7 +229,7 @@ void Pgsm::frame_receive(void *arg) if (!p_g_decoder) return; - if (frame->msg_type != GSM_TCHF_BAD_FRAME) { + if (frame->msg_type != GSM_BAD_FRAME) { if ((frame->data[0]>>4) != 0xd) PERROR("received GSM frame with wrong magig 0x%x\n", frame->data[0]>>4); @@ -375,12 +375,8 @@ void Pgsm::modify_lchan(int media_type) add_trace("speech", "version", "AMR given"); mode->lchan_mode = 0x41; /* GSM V3 */ break; - case MEDIA_TYPE_GSM_HR: - add_trace("speech", "version", "Half Rate given"); - mode->lchan_mode = 0x05; /* GSM V1 HR */ - break; default: - add_trace("speech", "version", "Full Rate given"); + add_trace("speech", "version", "Full/Half Rate given"); mode->lchan_mode = 0x01; /* GSM V1 */ } mode->lchan_type = 0x02; /* FIXME: unused */ @@ -1113,6 +1109,7 @@ static int mncc_fd_read(struct lcr_fd *lfd, void *inst, int idx) int rc; static char buf[sizeof(struct gsm_mncc)+1024]; struct gsm_mncc *mncc_prim = (struct gsm_mncc *) buf; + struct gsm_mncc_hello *hello = (struct gsm_mncc_hello *) buf; memset(buf, 0, sizeof(buf)); rc = recv(lfd->fd, buf, sizeof(buf), 0); @@ -1121,6 +1118,17 @@ static int mncc_fd_read(struct lcr_fd *lfd, void *inst, int idx) if (rc < 0) return rc; + /* TODO: size check? */ + switch (mncc_prim->msg_type) { + case MNCC_SOCKET_HELLO: + if (hello->version != MNCC_SOCK_VERSION) { + PERROR("MNCC version different. BSC version is %u\n", hello->version); + mncc_fd_close(lcr_gsm, lfd); + return 0; + } + break; + } + /* Hand the MNCC message into LCR */ switch (lcr_gsm->type) { #ifdef WITH_GSM_BS