From d1a2ff0aaffb52c91d7b096aeb676a1202d67cdb Mon Sep 17 00:00:00 2001 From: lvl Date: Tue, 3 Mar 2020 16:57:27 +0000 Subject: [PATCH] res_pjsip_refer: ensure refer progress is still sent after Proceeding() ASTERISK-28766 #close Change-Id: I5ce2210062f9325db762edbf6e46075079bb2cd1 --- res/res_pjsip_refer.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/res/res_pjsip_refer.c b/res/res_pjsip_refer.c index 4ed505769f..797f25719c 100644 --- a/res/res_pjsip_refer.c +++ b/res/res_pjsip_refer.c @@ -233,11 +233,12 @@ static struct ast_frame *refer_progress_framehook(struct ast_channel *chan, stru /* Determine the state of the REFER based on the control frames (or voice frames) passing */ if (f->frametype == AST_FRAME_VOICE && !progress->subclass) { /* Media is passing without progress, this means the call has been answered */ + progress->subclass = AST_CONTROL_ANSWER; notification = refer_progress_notification_alloc(progress, 200, PJSIP_EVSUB_STATE_TERMINATED); } else if (f->frametype == AST_FRAME_CONTROL) { /* Based on the control frame being written we can send a NOTIFY advising of the progress */ if ((f->subclass.integer == AST_CONTROL_RING) || (f->subclass.integer == AST_CONTROL_RINGING)) { - progress->subclass = f->subclass.integer; + /* Don't set progress->subclass; an ANSWER can still follow */ notification = refer_progress_notification_alloc(progress, 180, PJSIP_EVSUB_STATE_ACTIVE); } else if (f->subclass.integer == AST_CONTROL_BUSY) { progress->subclass = f->subclass.integer; @@ -246,10 +247,10 @@ static struct ast_frame *refer_progress_framehook(struct ast_channel *chan, stru progress->subclass = f->subclass.integer; notification = refer_progress_notification_alloc(progress, 503, PJSIP_EVSUB_STATE_TERMINATED); } else if (f->subclass.integer == AST_CONTROL_PROGRESS) { - progress->subclass = f->subclass.integer; + /* Don't set progress->subclass; an ANSWER can still follow */ notification = refer_progress_notification_alloc(progress, 183, PJSIP_EVSUB_STATE_ACTIVE); } else if (f->subclass.integer == AST_CONTROL_PROCEEDING) { - progress->subclass = f->subclass.integer; + /* Don't set progress->subclass; an ANSWER can still follow */ notification = refer_progress_notification_alloc(progress, 100, PJSIP_EVSUB_STATE_ACTIVE); } else if (f->subclass.integer == AST_CONTROL_ANSWER) { progress->subclass = f->subclass.integer;