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);
     }