Add pjsip_regc_add_headers() APi to set headers to be added 
to the REGISTER request. This solves the problem where headers
 registered in the initial REGISTER request (such as User-Agent
 header) are not sent in subsequent reregistration request.



git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@799 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/pjsip/src/pjsip-ua/sip_reg.c b/pjsip/src/pjsip-ua/sip_reg.c
index b777048..20bfb78 100644
--- a/pjsip/src/pjsip-ua/sip_reg.c
+++ b/pjsip/src/pjsip-ua/sip_reg.c
@@ -65,6 +65,7 @@
     pjsip_expires_hdr		*unreg_expires_hdr;
     pj_uint32_t			 expires;
     pjsip_route_hdr		 route_set;
+    pjsip_hdr			 hdr_list;
 
     /* Authorization sessions. */
     pjsip_auth_clt_sess		 auth_sess;
@@ -106,6 +107,7 @@
 	return status;
 
     pj_list_init(&regc->route_set);
+    pj_list_init(&regc->hdr_list);
 
     /* Done */
     *p_regc = regc;
@@ -307,6 +309,25 @@
     return PJ_SUCCESS;
 }
 
+PJ_DEF(pj_status_t) pjsip_regc_add_headers( pjsip_regc *regc,
+					    const pjsip_hdr *hdr_list)
+{
+    const pjsip_hdr *hdr;
+
+    PJ_ASSERT_RETURN(regc && hdr_list, PJ_EINVAL);
+
+    //This is "add" operation, so don't remove headers.
+    //pj_list_init(&regc->hdr_list);
+
+    hdr = hdr_list->next;
+    while (hdr != hdr_list) {
+	pj_list_push_back(&regc->hdr_list, pjsip_hdr_clone(regc->pool, hdr));
+	hdr = hdr->next;
+    }
+
+    return PJ_SUCCESS;
+}
+
 static pj_status_t create_request(pjsip_regc *regc, 
 				  pjsip_tx_data **p_tdata)
 {
@@ -350,6 +371,18 @@
 	}
     }
 
+    /* Add additional request headers */
+    if (!pj_list_empty(&regc->hdr_list)) {
+	const pjsip_hdr *hdr;
+
+	hdr = regc->hdr_list.next;
+	while (hdr != &regc->hdr_list) {
+	    pjsip_hdr *new_hdr = pjsip_hdr_shallow_clone(tdata->pool, hdr);
+	    pjsip_msg_add_hdr(tdata->msg, new_hdr);
+	    hdr = hdr->next;
+	}
+    }
+
     /* Done. */
     *p_tdata = tdata;
     return PJ_SUCCESS;