From b54048fe25a28c47149f916ae293654b5330ff78 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Mon, 1 Nov 2010 19:57:50 +0100 Subject: mgcp: Make transcoding a per Endpoint configuration This allows to switch off transcoding on the fly, or only enable it for certain vessels with known problems. --- openbsc/src/mgcp/mgcp_protocol.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'openbsc/src/mgcp/mgcp_protocol.c') diff --git a/openbsc/src/mgcp/mgcp_protocol.c b/openbsc/src/mgcp/mgcp_protocol.c index c73031c08..4e7ebf8bb 100644 --- a/openbsc/src/mgcp/mgcp_protocol.c +++ b/openbsc/src/mgcp/mgcp_protocol.c @@ -421,12 +421,17 @@ static int allocate_ports(struct mgcp_endpoint *endp) return -1; } - if (endp->cfg->transcoder_ip && - allocate_port(endp, &endp->transcoder_end, &endp->cfg->transcoder_ports, - mgcp_bind_transcoder_rtp_port) != 0) { - mgcp_rtp_end_reset(&endp->net_end); - mgcp_rtp_end_reset(&endp->bts_end); - return -1; + if (endp->cfg->transcoder_ip) { + if (allocate_port(endp, &endp->transcoder_end, + &endp->cfg->transcoder_ports, + mgcp_bind_transcoder_rtp_port) != 0) { + mgcp_rtp_end_reset(&endp->net_end); + mgcp_rtp_end_reset(&endp->bts_end); + return -1; + } + + /* remember that we have set up transcoding */ + endp->is_transcoded = 1; } return 0; @@ -848,6 +853,7 @@ void mgcp_free_endp(struct mgcp_endpoint *endp) mgcp_rtp_end_reset(&endp->bts_end); mgcp_rtp_end_reset(&endp->net_end); mgcp_rtp_end_reset(&endp->transcoder_end); + endp->is_transcoded = 0; memset(&endp->net_state, 0, sizeof(endp->net_state)); memset(&endp->bts_state, 0, sizeof(endp->bts_state)); @@ -927,7 +933,7 @@ static void create_transcoder(struct mgcp_endpoint *endp) int in_endp = ENDPOINT_NUMBER(endp); int out_endp = back_channel(in_endp); - if (!endp->cfg->transcoder_ip) + if (!endp->is_transcoded) return; send_msg(endp, in_endp, endp->bts_end.local_port, "CRCX", "recvonly"); @@ -945,7 +951,7 @@ static void delete_transcoder(struct mgcp_endpoint *endp) int in_endp = ENDPOINT_NUMBER(endp); int out_endp = back_channel(in_endp); - if (!endp->cfg->transcoder_ip) + if (!endp->is_transcoded) return; send_dlcx(endp, in_endp); -- cgit v1.2.3