From 3c4a1722b6ee522a6155686bb53b1bd245e793d5 Mon Sep 17 00:00:00 2001
From: Kevin Harwell <kharwell@digium.com>
Date: Mon, 24 Aug 2020 16:26:23 -0500
Subject: [PATCH] chan_pjsip: disallow PJSIP_SEND_SESSION_REFRESH pre-answer
 execution

This patch makes it so if the PJSIP_SEND_SESSION_REFRESH dialplan function
is called on a channel prior to answering a warning is issued and the
function returns unsuccessful.

ASTERISK-28878 #close

Change-Id: I053f767d10cf3b2b898fa9e3e7c35ff07e23c9bb
---
 channels/pjsip/dialplan_functions.c                | 5 +++++
 doc/CHANGES-staging/pjsip_send_session_refresh.txt | 4 ++++
 2 files changed, 9 insertions(+)
 create mode 100644 doc/CHANGES-staging/pjsip_send_session_refresh.txt

diff --git a/channels/pjsip/dialplan_functions.c b/channels/pjsip/dialplan_functions.c
index 721f47fae6..176bc496a8 100644
--- a/channels/pjsip/dialplan_functions.c
+++ b/channels/pjsip/dialplan_functions.c
@@ -1680,6 +1680,11 @@ int pjsip_acf_session_refresh_write(struct ast_channel *chan, const char *cmd, c
 		return -1;
 	}
 
+	if (ast_channel_state(chan) != AST_STATE_UP) {
+		ast_log(LOG_WARNING, "'%s' not allowed on unanswered channel '%s'.\n", cmd, ast_channel_name(chan));
+		return -1;
+	}
+
 	if (strcmp(ast_channel_tech(chan)->type, "PJSIP")) {
 		ast_log(LOG_WARNING, "Cannot call %s on a non-PJSIP channel\n", cmd);
 		return -1;
diff --git a/doc/CHANGES-staging/pjsip_send_session_refresh.txt b/doc/CHANGES-staging/pjsip_send_session_refresh.txt
new file mode 100644
index 0000000000..0705c293d7
--- /dev/null
+++ b/doc/CHANGES-staging/pjsip_send_session_refresh.txt
@@ -0,0 +1,4 @@
+Subject: chan_pjsip
+
+The PJSIP_SEND_SESSION_REFRESH dialplan function now issues a warning, and
+returns unsuccessful if it's used on a channel prior to answering.
-- 
GitLab