diff options
Diffstat (limited to 'pjsip/src/pjsip-ua/sip_reg.c')
-rw-r--r-- | pjsip/src/pjsip-ua/sip_reg.c | 33 |
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(®c->route_set); + pj_list_init(®c->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(®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 @@ static pj_status_t create_request(pjsip_regc *regc, } } + /* 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; |