summaryrefslogtreecommitdiff
path: root/res
diff options
context:
space:
mode:
authorJoshua Colp <jcolp@digium.com>2016-03-15 08:47:43 -0500
committerGerrit Code Review <gerrit2@gerrit.digium.api>2016-03-15 08:47:44 -0500
commitabe893725be12d3987f4efa14aed74ddb100fdee (patch)
treeb4a81c2ffaf1315b5f834c854c5aa7ba7af439b4 /res
parentdcb25bb05792f5cbbb458b264030f68cfb59b682 (diff)
parent0d2ccbca62e09dbf57ecfc921a33e4e08bbe462f (diff)
Merge "res_pjsip_refer.c: Delay sending the initial SIP Notify with frag 100"
Diffstat (limited to 'res')
-rw-r--r--res/res_pjsip_refer.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/res/res_pjsip_refer.c b/res/res_pjsip_refer.c
index f89f901cf..fbc3eb3e2 100644
--- a/res/res_pjsip_refer.c
+++ b/res/res_pjsip_refer.c
@@ -59,6 +59,8 @@ struct refer_progress {
struct transfer_channel_data *transfer_data;
/*! \brief Uniqueid of transferee channel */
char *transferee;
+ /*! \brief Non-zero if the 100 notify has been sent */
+ int sent_100;
};
/*! \brief REFER Progress notification structure */
@@ -133,6 +135,18 @@ static int refer_progress_notify(void *data)
notification->progress->sub = NULL;
}
+ /* Send a deferred initial 100 Trying SIP frag NOTIFY if we haven't already. */
+ if (!notification->progress->sent_100) {
+ notification->progress->sent_100 = 1;
+ if (notification->response != 100) {
+ ast_debug(3, "Sending initial 100 Trying NOTIFY for progress monitor '%p'\n",
+ notification->progress);
+ if (pjsip_xfer_notify(sub, PJSIP_EVSUB_STATE_ACTIVE, 100, NULL, &tdata) == PJ_SUCCESS) {
+ pjsip_xfer_send_request(sub, tdata);
+ }
+ }
+ }
+
ast_debug(3, "Sending NOTIFY with response '%d' and state '%u' on subscription '%p' and progress monitor '%p'\n",
notification->response, notification->state, sub, notification->progress);
@@ -340,7 +354,6 @@ static int refer_progress_alloc(struct ast_sip_session *session, pjsip_rx_data *
const pj_str_t str_refer_sub = { "Refer-Sub", 9 };
pjsip_generic_string_hdr *refer_sub = NULL;
const pj_str_t str_true = { "true", 4 };
- pjsip_tx_data *tdata;
pjsip_hdr hdr_list;
char tps_name[AST_TASKPROCESSOR_MAX_NAME + 1];
@@ -392,12 +405,6 @@ static int refer_progress_alloc(struct ast_sip_session *session, pjsip_rx_data *
ast_debug(3, "Accepting REFER request for progress monitor '%p'\n", *progress);
pjsip_xfer_accept((*progress)->sub, rdata, 202, &hdr_list);
- /* Send initial NOTIFY Request */
- ast_debug(3, "Sending initial 100 Trying NOTIFY for progress monitor '%p'\n", *progress);
- if (pjsip_xfer_notify((*progress)->sub, PJSIP_EVSUB_STATE_ACTIVE, 100, NULL, &tdata) == PJ_SUCCESS) {
- pjsip_xfer_send_request((*progress)->sub, tdata);
- }
-
return 0;
error: