summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsip-ua
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2006-11-11 21:25:55 +0000
committerBenny Prijono <bennylp@teluu.com>2006-11-11 21:25:55 +0000
commit9115df1d57547f0d3747ddeb048e9ac87c0b9292 (patch)
tree98492d5270a02a683fb772aa15d93b0c3428c349 /pjsip/src/pjsip-ua
parent83a6cef9411b0d748450fb8e955ec8397979e252 (diff)
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: http://svn.pjsip.org/repos/pjproject/trunk@799 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src/pjsip-ua')
-rw-r--r--pjsip/src/pjsip-ua/sip_reg.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/pjsip/src/pjsip-ua/sip_reg.c b/pjsip/src/pjsip-ua/sip_reg.c
index b7770488..20bfb786 100644
--- a/pjsip/src/pjsip-ua/sip_reg.c
+++ b/pjsip/src/pjsip-ua/sip_reg.c
@@ -65,6 +65,7 @@ struct pjsip_regc
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 @@ PJ_DEF(pj_status_t) pjsip_regc_create( pjsip_endpoint *endpt, void *token,
return status;
pj_list_init(&regc->route_set);
+ pj_list_init(&regc->hdr_list);
/* Done */
*p_regc = regc;
@@ -307,6 +309,25 @@ PJ_DEF(pj_status_t) pjsip_regc_set_route_set( pjsip_regc *regc,
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 @@ static pj_status_t create_request(pjsip_regc *regc,
}
}
+ /* 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;