Ticket #408: Route set shouldn't be updated once it has been set (thanks Anshuman S. Rawat)
git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@1537 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/pjsip/include/pjsip/sip_dialog.h b/pjsip/include/pjsip/sip_dialog.h
index 626ec08..b11ba4c 100644
--- a/pjsip/include/pjsip/sip_dialog.h
+++ b/pjsip/include/pjsip/sip_dialog.h
@@ -130,6 +130,7 @@
pj_bool_t add_allow; /**< Add Allow header in requests? */
pjsip_cid_hdr *call_id; /**< Call-ID header. */
pjsip_route_hdr route_set; /**< Route set. */
+ pj_bool_t route_set_frozen; /**< Route set has been set. */
pjsip_auth_clt_sess auth_sess; /**< Client authentication session. */
/** Session counter. */
diff --git a/pjsip/src/pjsip/sip_dialog.c b/pjsip/src/pjsip/sip_dialog.c
index 85212bb..b431775 100644
--- a/pjsip/src/pjsip/sip_dialog.c
+++ b/pjsip/src/pjsip/sip_dialog.c
@@ -472,6 +472,7 @@
rr = (pjsip_route_hdr*) pjsip_msg_find_hdr(rdata->msg_info.msg,
PJSIP_H_RECORD_ROUTE, rr);
}
+ dlg->route_set_frozen = PJ_TRUE;
/* Init client authentication session. */
status = pjsip_auth_clt_init(&dlg->auth_sess, dlg->endpt,
@@ -641,6 +642,7 @@
r = r->next;
}
+ dlg->route_set_frozen = PJ_TRUE;
/* Clone client authentication session. */
status = pjsip_auth_clt_clone(dlg->pool, &dlg->auth_sess,
@@ -1540,6 +1542,10 @@
{
const pjsip_hdr *hdr, *end_hdr;
+ /* Ignore if route set has been set */
+ if (dlg->route_set_frozen)
+ return;
+
pj_list_init(&dlg->route_set);
end_hdr = &msg->hdr;
@@ -1551,6 +1557,7 @@
pj_list_push_back(&dlg->route_set, r);
}
}
+ dlg->route_set_frozen = PJ_TRUE;
}
/* This function is called by user agent upon receiving incoming response
@@ -1559,7 +1566,6 @@
void pjsip_dlg_on_rx_response( pjsip_dialog *dlg, pjsip_rx_data *rdata )
{
unsigned i;
- pj_bool_t routeset_updated = PJ_FALSE;
int res_code;
PJ_LOG(5,(dlg->obj_name, "Received %s",
@@ -1613,7 +1619,6 @@
* route set for future requests in this dialog.
*/
dlg_update_routeset(dlg, rdata->msg_info.msg);
- routeset_updated = PJ_TRUE;
/* The remote target MUST be set to the URI from the Contact header
* field of the response.
@@ -1673,10 +1678,7 @@
dlg->target = dlg->remote.contact->uri;
}
- if (!routeset_updated) {
- dlg_update_routeset(dlg, rdata->msg_info.msg);
- routeset_updated = PJ_TRUE;
- }
+ dlg_update_routeset(dlg, rdata->msg_info.msg);
}