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.
This commit is contained in:
parent
fbca4ea117
commit
b54048fe25
|
@ -99,6 +99,7 @@ struct mgcp_endpoint {
|
|||
struct mgcp_rtp_end bts_end;
|
||||
struct mgcp_rtp_end net_end;
|
||||
struct mgcp_rtp_end transcoder_end;
|
||||
int is_transcoded;
|
||||
|
||||
/* sequence bits */
|
||||
struct mgcp_rtp_state net_state;
|
||||
|
|
|
@ -383,7 +383,7 @@ static int rtp_data_bts(struct bsc_fd *fd, unsigned int what)
|
|||
endp->bts_end.packets += 1;
|
||||
|
||||
forward_data(fd->fd, &endp->taps[MGCP_TAP_BTS_IN], buf, rc);
|
||||
if (cfg->transcoder_ip)
|
||||
if (endp->is_transcoded)
|
||||
return send_transcoder(endp, proto == PROTO_RTP, &buf[0], rc);
|
||||
else
|
||||
return send_to(endp, DEST_NETWORK, proto == PROTO_RTP, &addr, &buf[0], rc);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue