diff --git a/res/res_pjsip_refer.c b/res/res_pjsip_refer.c index f89f901cf0..fbc3eb3e24 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: