diff options
-rw-r--r-- | channels/chan_pjsip.c | 13 | ||||
-rw-r--r-- | res/res_pjsip_caller_id.c | 14 |
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); } |