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(®c->route_set);
+ pj_list_init(®c->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(®c->hdr_list);
+
+ hdr = hdr_list->next;
+ while (hdr != hdr_list) {
+ pj_list_push_back(®c->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(®c->hdr_list)) {
+ const pjsip_hdr *hdr;
+
+ hdr = regc->hdr_list.next;
+ while (hdr != ®c->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;