FreeCalypso > hg > themwi-system-sw
diff mgw/mdcx.c @ 95:f280328e7e2e
themwi-mgw: initial implementation of PSTN to GSM forwarding
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 25 Sep 2022 19:17:44 -0800 |
parents | 020ba624bdd8 |
children | 738be11ac432 |
line wrap: on
line diff
--- a/mgw/mdcx.c Sat Sep 24 15:14:50 2022 -0800 +++ b/mgw/mdcx.c Sun Sep 25 19:17:44 2022 -0800 @@ -22,6 +22,8 @@ struct tmgw_ctrl_req *req; struct tmgw_ctrl_resp *resp; { + int rc; + if (req->setup_mask & TMGW_CTRL_MASK_GSM_CONN) { if (ep->ep_type != TMGW_EP_TYPE_GATEWAY) { resp->res = TMGW_RESP_ERR_PROT; @@ -31,6 +33,10 @@ resp->res = TMGW_RESP_ERR_PARAM; return(-1); } + if (req->gsm_payload_type > 0x7F) { + resp->res = TMGW_RESP_ERR_PARAM; + return(-1); + } switch (req->gsm_payload_msg_type) { case GSM_TCHF_FRAME: break; @@ -43,6 +49,11 @@ resp->res = TMGW_RESP_ERR_PARAM; return(-1); } + if (ep->gsm_payload_msg_type && + ep->gsm_payload_msg_type != req->gsm_payload_msg_type) { + resp->res = TMGW_RESP_ERR_PROT; + return(-1); + } bcopy(&req->gsm_addr, &ep->rtp_gsm.remote_addr, sizeof(struct sockaddr_in)); ep->gsm_payload_type = req->gsm_payload_type; @@ -76,6 +87,14 @@ resp->res = TMGW_RESP_ERR_PROT; return(-1); } + if ((req->fwd_mode & TMGW_FWD_ENABLE_PSTN2GSM) && + !(ep->fwd_mode & TMGW_FWD_ENABLE_PSTN2GSM)) { + rc = pstn2gsm_init(ep); + if (rc != TMGW_RESP_OK) { + resp->res = rc; + return(-1); + } + } ep->fwd_mode = req->fwd_mode; } return(0);