summaryrefslogtreecommitdiff
path: root/pjsip
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
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')
-rw-r--r--pjsip/include/pjsip-ua/sip_regc.h13
-rw-r--r--pjsip/src/pjsip-ua/sip_reg.c33
-rw-r--r--pjsip/src/pjsua-lib/pjsua_acc.c18
3 files changed, 63 insertions, 1 deletions
diff --git a/pjsip/include/pjsip-ua/sip_regc.h b/pjsip/include/pjsip-ua/sip_regc.h
index a071fcc1..81aa07ed 100644
--- a/pjsip/include/pjsip-ua/sip_regc.h
+++ b/pjsip/include/pjsip-ua/sip_regc.h
@@ -199,6 +199,19 @@ PJ_DECL(pj_status_t) pjsip_regc_set_route_set(pjsip_regc *regc,
const pjsip_route_hdr*route_set);
/**
+ * Add headers to be added to outgoing REGISTER requests.
+ *
+ * @param regc The client registration structure.
+ * @param hdr_list List containing SIP headers to be added for all outgoing
+ * REGISTER requests.
+ *
+ * @return PJ_SUCCESS on success.
+ */
+PJ_DECL(pj_status_t) pjsip_regc_add_headers(pjsip_regc *regc,
+ const pjsip_hdr *hdr_list);
+
+
+/**
* Create REGISTER request for the specified client registration structure.
*
* After successfull registration, application can inspect the contacts in
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;
diff --git a/pjsip/src/pjsua-lib/pjsua_acc.c b/pjsip/src/pjsua-lib/pjsua_acc.c
index 10cc2367..fd71f993 100644
--- a/pjsip/src/pjsua-lib/pjsua_acc.c
+++ b/pjsip/src/pjsua-lib/pjsua_acc.c
@@ -550,6 +550,22 @@ static pj_status_t pjsua_regc_init(int acc_id)
pjsip_regc_set_route_set( acc->regc, &acc->route_set );
}
+ /* Add other request headers. */
+ if (pjsua_var.ua_cfg.user_agent.slen) {
+ pjsip_hdr hdr_list;
+ const pj_str_t STR_USER_AGENT = { "User-Agent", 10 };
+ pjsip_generic_string_hdr *h;
+
+ pool = pj_pool_create_on_buf(NULL, contact_buf, sizeof(contact_buf));
+ pj_list_init(&hdr_list);
+
+ h = pjsip_generic_string_hdr_create(pool, &STR_USER_AGENT,
+ &pjsua_var.ua_cfg.user_agent);
+ pj_list_push_back(&hdr_list, (pjsip_hdr*)h);
+
+ pjsip_regc_add_headers(acc->regc, &hdr_list);
+ }
+
return PJ_SUCCESS;
}
@@ -596,7 +612,7 @@ PJ_DEF(pj_status_t) pjsua_acc_set_registration( pjsua_acc_id acc_id,
}
if (status == PJ_SUCCESS) {
- pjsua_process_msg_data(tdata, NULL);
+ //pjsua_process_msg_data(tdata, NULL);
status = pjsip_regc_send( pjsua_var.acc[acc_id].regc, tdata );
}