diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c index 33c023de9b..79e7c6e131 100644 --- a/channels/chan_pjsip.c +++ b/channels/chan_pjsip.c @@ -1816,18 +1816,21 @@ static int chan_pjsip_digit_begin(struct ast_channel *chan, char digit) struct ast_sip_channel_pvt *channel = ast_channel_tech_pvt(chan); struct chan_pjsip_pvt *pvt = channel->pvt; struct ast_sip_session_media *media = pvt->media[SIP_MEDIA_AUDIO]; - int res = 0; switch (channel->session->dtmf) { case AST_SIP_DTMF_RFC_4733: if (!media || !media->rtp) { - return -1; + return 0; } ast_rtp_instance_dtmf_begin(media->rtp, digit); break; case AST_SIP_DTMF_AUTO: - if (!media || !media->rtp || (ast_rtp_instance_dtmf_mode_get(media->rtp) == AST_RTP_DTMF_MODE_INBAND)) { + if (!media || !media->rtp) { + return 0; + } + + if (ast_rtp_instance_dtmf_mode_get(media->rtp) == AST_RTP_DTMF_MODE_INBAND) { return -1; } @@ -1842,13 +1845,12 @@ static int chan_pjsip_digit_begin(struct ast_channel *chan, char digit) case AST_SIP_DTMF_NONE: break; case AST_SIP_DTMF_INBAND: - res = -1; - break; + return -1; default: break; } - return res; + return 0; } struct info_dtmf_data { @@ -1936,7 +1938,6 @@ static int chan_pjsip_digit_end(struct ast_channel *ast, char digit, unsigned in struct ast_sip_channel_pvt *channel = ast_channel_tech_pvt(ast); struct chan_pjsip_pvt *pvt = channel->pvt; struct ast_sip_session_media *media = pvt->media[SIP_MEDIA_AUDIO]; - int res = 0; if (!channel || !channel->session) { /* This happens when the channel is hungup while a DTMF digit is playing. See ASTERISK-28086 */ @@ -1948,8 +1949,9 @@ static int chan_pjsip_digit_end(struct ast_channel *ast, char digit, unsigned in case AST_SIP_DTMF_AUTO_INFO: { if (!media || !media->rtp) { - return -1; + return 0; } + if (ast_rtp_instance_dtmf_mode_get(media->rtp) != AST_RTP_DTMF_MODE_NONE) { ast_debug(3, "Told to send end of digit on Auto-Info channel %s RFC4733 negotiated so using it.\n", ast_channel_name(ast)); ast_rtp_instance_dtmf_end_with_duration(media->rtp, digit, duration); @@ -1987,28 +1989,29 @@ static int chan_pjsip_digit_end(struct ast_channel *ast, char digit, unsigned in } case AST_SIP_DTMF_RFC_4733: if (!media || !media->rtp) { - return -1; + return 0; } ast_rtp_instance_dtmf_end_with_duration(media->rtp, digit, duration); break; case AST_SIP_DTMF_AUTO: - if (!media || !media->rtp || (ast_rtp_instance_dtmf_mode_get(media->rtp) == AST_RTP_DTMF_MODE_INBAND)) { + if (!media || !media->rtp) { + return 0; + } + + if (ast_rtp_instance_dtmf_mode_get(media->rtp) == AST_RTP_DTMF_MODE_INBAND) { return -1; } ast_rtp_instance_dtmf_end_with_duration(media->rtp, digit, duration); break; - - case AST_SIP_DTMF_NONE: break; case AST_SIP_DTMF_INBAND: - res = -1; - break; + return -1; } - return res; + return 0; } static void update_initial_connected_line(struct ast_sip_session *session)