mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-12 15:45:18 +00:00
Merge "chan_pjsip: Fix crash on reINVITE before initial INVITE completes." into 13
This commit is contained in:
@@ -2085,7 +2085,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
|
||||
@@ -2132,8 +2133,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;
|
||||
}
|
||||
|
||||
@@ -2180,8 +2182,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;
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user