diff options
-rw-r--r-- | openbsc/src/libmgcp/mgcp_protocol.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/openbsc/src/libmgcp/mgcp_protocol.c b/openbsc/src/libmgcp/mgcp_protocol.c index ccd15e842..62f6974d0 100644 --- a/openbsc/src/libmgcp/mgcp_protocol.c +++ b/openbsc/src/libmgcp/mgcp_protocol.c @@ -111,7 +111,7 @@ static struct msgb *handle_noti_req(struct mgcp_parse_data *data); static void create_transcoder(struct mgcp_endpoint *endp); static void delete_transcoder(struct mgcp_endpoint *endp); -static void setup_rtp_processing(struct mgcp_endpoint *endp); +static int setup_rtp_processing(struct mgcp_endpoint *endp); static int mgcp_analyze_header(struct mgcp_parse_data *parse, char *data); @@ -1050,7 +1050,8 @@ mgcp_header_done: endp->bts_end.force_output_ptime = 1; } - setup_rtp_processing(endp); + if (setup_rtp_processing(endp) != 0) + goto error2; /* policy CB */ if (p->cfg->policy_cb) { @@ -1161,7 +1162,8 @@ static struct msgb *handle_modify_con(struct mgcp_parse_data *p) set_audio_info(p->cfg, &endp->net_end.codec, PTYPE_UNDEFINED, endp->local_options.codec); - setup_rtp_processing(endp); + if (setup_rtp_processing(endp) != 0) + goto error3; /* policy CB */ if (p->cfg->policy_cb) { @@ -1659,25 +1661,27 @@ int mgcp_send_reset_ep(struct mgcp_endpoint *endp, int endpoint) return send_agent(endp->cfg, buf, len); } -static void setup_rtp_processing(struct mgcp_endpoint *endp) +static int setup_rtp_processing(struct mgcp_endpoint *endp) { + int rc = 0; struct mgcp_config *cfg = endp->cfg; if (endp->type != MGCP_RTP_DEFAULT) - return; + return 0; if (endp->conn_mode == MGCP_CONN_LOOPBACK) - return; + return 0; if (endp->conn_mode & MGCP_CONN_SEND_ONLY) - cfg->setup_rtp_processing_cb(endp, &endp->net_end, &endp->bts_end); + rc |= cfg->setup_rtp_processing_cb(endp, &endp->net_end, &endp->bts_end); else - cfg->setup_rtp_processing_cb(endp, &endp->net_end, NULL); + rc |= cfg->setup_rtp_processing_cb(endp, &endp->net_end, NULL); if (endp->conn_mode & MGCP_CONN_RECV_ONLY) - cfg->setup_rtp_processing_cb(endp, &endp->bts_end, &endp->net_end); + rc |= cfg->setup_rtp_processing_cb(endp, &endp->bts_end, &endp->net_end); else - cfg->setup_rtp_processing_cb(endp, &endp->bts_end, NULL); + rc |= cfg->setup_rtp_processing_cb(endp, &endp->bts_end, NULL); + return rc; } static void create_transcoder(struct mgcp_endpoint *endp) |