summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--channels/chan_pjsip.c13
-rw-r--r--res/res_pjsip_caller_id.c14
2 files changed, 16 insertions, 11 deletions
diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c
index 523a01560..d72a25b61 100644
--- a/channels/chan_pjsip.c
+++ b/channels/chan_pjsip.c
@@ -2134,7 +2134,8 @@ static int chan_pjsip_incoming_request(struct ast_sip_session *session, struct p
return 0;
}
- if (session->inv_session->state >= PJSIP_INV_STATE_CONFIRMED) {
+ /* Check for a to-tag to determine if this is a reinvite */
+ if (rdata->msg_info.to->tag.slen) {
/* Weird case. We've received a reinvite but we don't have a channel. The most
* typical case for this happening is that a blind transfer fails, and so the
* transferer attempts to reinvite himself back into the call. We already got
@@ -2181,8 +2182,9 @@ static int call_pickup_incoming_request(struct ast_sip_session *session, pjsip_r
struct ast_features_pickup_config *pickup_cfg;
struct ast_channel *chan;
- /* We don't care about reinvites */
- if (session->inv_session->state >= PJSIP_INV_STATE_CONFIRMED) {
+ /* Check for a to-tag to determine if this is a reinvite */
+ if (rdata->msg_info.to->tag.slen) {
+ /* We don't care about reinvites */
return 0;
}
@@ -2229,8 +2231,9 @@ static int pbx_start_incoming_request(struct ast_sip_session *session, pjsip_rx_
{
int res;
- /* We don't care about reinvites */
- if (session->inv_session->state >= PJSIP_INV_STATE_CONFIRMED) {
+ /* Check for a to-tag to determine if this is a reinvite */
+ if (rdata->msg_info.to->tag.slen) {
+ /* We don't care about reinvites */
return 0;
}
diff --git a/res/res_pjsip_caller_id.c b/res/res_pjsip_caller_id.c
index c084a8181..07b12669d 100644
--- a/res/res_pjsip_caller_id.c
+++ b/res/res_pjsip_caller_id.c
@@ -351,10 +351,11 @@ static void update_incoming_connected_line(struct ast_sip_session *session, pjsi
*/
static int caller_id_incoming_request(struct ast_sip_session *session, pjsip_rx_data *rdata)
{
- if (session->inv_session->state < PJSIP_INV_STATE_CONFIRMED) {
+ if (!session->channel) {
/*
- * Initial inbound INVITE. Set the session ID directly
- * because the channel has not been created yet.
+ * Since we have no channel this must be the initial inbound
+ * INVITE. Set the session ID directly because the channel
+ * has not been created yet.
*/
if (session->endpoint->id.trust_inbound
&& (!set_id_from_pai(rdata, &session->id)
@@ -367,9 +368,10 @@ static int caller_id_incoming_request(struct ast_sip_session *session, pjsip_rx_
if (!session->endpoint->id.self.number.valid) {
set_id_from_from(rdata, &session->id);
}
- } else if (session->channel) {
- /* Reinvite. Check for changes to the ID and queue a connected line
- * update if necessary
+ } else {
+ /*
+ * ReINVITE or UPDATE. Check for changes to the ID and queue
+ * a connected line update if necessary.
*/
update_incoming_connected_line(session, rdata);
}