From 48ed4f670f124e9d97c580406ed167ecbaca0e1d Mon Sep 17 00:00:00 2001
From: Holger Hans Peter Freyther <holger@moiji-mobile.com>
Date: Thu, 7 Jan 2021 22:25:05 +0800
Subject: [PATCH] pjsip: Generate progress (once) when receiving a 180 with a
 SDP

ASTERISK-29105

Change-Id: If1615fe7115fe544ef974b044d3cea5c48b94a38
---
 channels/chan_pjsip.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c
index 5c19443468..773471d8ef 100644
--- a/channels/chan_pjsip.c
+++ b/channels/chan_pjsip.c
@@ -3193,15 +3193,23 @@ static void chan_pjsip_incoming_response(struct ast_sip_session *session, struct
 	}
 
 	switch (status.code) {
-	case 180:
-		ast_trace(-1, "%s: Queueing RINGING\n", ast_sip_session_get_name(session));
-		ast_queue_control(session->channel, AST_CONTROL_RINGING);
+	case 180: {
+		pjsip_rdata_sdp_info *sdp = pjsip_rdata_get_sdp_info(rdata);
+		if (sdp && sdp->body.ptr) {
+			ast_trace(-1, "%s: Queueing PROGRESS\n", ast_sip_session_get_name(session));
+			ast_queue_control(session->channel, AST_CONTROL_PROGRESS);
+		} else {
+			ast_trace(-1, "%s: Queueing RINGING\n", ast_sip_session_get_name(session));
+			ast_queue_control(session->channel, AST_CONTROL_RINGING);
+		}
+
 		ast_channel_lock(session->channel);
 		if (ast_channel_state(session->channel) != AST_STATE_UP) {
 			ast_setstate(session->channel, AST_STATE_RINGING);
 		}
 		ast_channel_unlock(session->channel);
 		break;
+	}
 	case 183:
 		ast_trace(-1, "%s: Queueing PROGRESS\n", ast_sip_session_get_name(session));
 		if (session->endpoint->ignore_183_without_sdp) {
-- 
GitLab