summaryrefslogtreecommitdiff
path: root/pjsip
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2008-12-10 16:54:16 +0000
committerBenny Prijono <bennylp@teluu.com>2008-12-10 16:54:16 +0000
commiteb5756d2c401568e24c448776cc1a914b57b80b0 (patch)
tree227210f2e0d329cf7c785b2f7934e05b05f36912 /pjsip
parent51ea10ee4adb41c3e8ddcfdee5fb165faffa432e (diff)
Ticket #672: Option to add custom parameters in the account Contact URI
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2373 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip')
-rw-r--r--pjsip/include/pjsua-lib/pjsua.h12
-rw-r--r--pjsip/src/pjsua-lib/pjsua_acc.c18
2 files changed, 24 insertions, 6 deletions
diff --git a/pjsip/include/pjsua-lib/pjsua.h b/pjsip/include/pjsua-lib/pjsua.h
index 74cbffec..c8073e70 100644
--- a/pjsip/include/pjsua-lib/pjsua.h
+++ b/pjsip/include/pjsua-lib/pjsua.h
@@ -2131,6 +2131,18 @@ typedef struct pjsua_acc_config
pj_str_t force_contact;
/**
+ * Additional URI parameters that will be appended in the Contact header
+ * for this account. This will affect the Contact header in all SIP
+ * messages sent on behalf of this account, including but not limited to
+ * REGISTER, INVITE, and SUBCRIBE requests or responses.
+ *
+ * The parameters should be preceeded by semicolon, and all strings must
+ * be properly escaped. Example:
+ * ";my-param=X;another-param=Hi%20there"
+ */
+ pj_str_t contact_params;
+
+ /**
* Specify whether support for reliable provisional response (100rel and
* PRACK) should be required for all sessions of this account.
*
diff --git a/pjsip/src/pjsua-lib/pjsua_acc.c b/pjsip/src/pjsua-lib/pjsua_acc.c
index 7faec4e4..12d7af4f 100644
--- a/pjsip/src/pjsua-lib/pjsua_acc.c
+++ b/pjsip/src/pjsua-lib/pjsua_acc.c
@@ -681,14 +681,16 @@ static pj_bool_t acc_check_nat_addr(pjsua_acc *acc,
tmp = (char*) pj_pool_alloc(pool, PJSIP_MAX_URL_SIZE);
len = pj_ansi_snprintf(tmp, PJSIP_MAX_URL_SIZE,
- "<sip:%.*s%s%.*s:%d;transport=%s>",
+ "<sip:%.*s%s%.*s:%d;transport=%s%.*s>",
(int)acc->user_part.slen,
acc->user_part.ptr,
(acc->user_part.slen? "@" : ""),
(int)via_addr->slen,
via_addr->ptr,
rport,
- tp->type_name);
+ tp->type_name,
+ (int)acc->cfg.contact_params.slen,
+ acc->cfg.contact_params.ptr);
if (len < 1) {
PJ_LOG(1,(THIS_FILE, "URI too long"));
pj_pool_release(pool);
@@ -1663,7 +1665,7 @@ PJ_DEF(pj_status_t) pjsua_acc_create_uac_contact( pj_pool_t *pool,
/* Create the contact header */
contact->ptr = (char*)pj_pool_alloc(pool, PJSIP_MAX_URL_SIZE);
contact->slen = pj_ansi_snprintf(contact->ptr, PJSIP_MAX_URL_SIZE,
- "%.*s%s<%s:%.*s%s%s%.*s%s:%d%s>",
+ "%.*s%s<%s:%.*s%s%s%.*s%s:%d%s%.*s>",
(int)acc->display.slen,
acc->display.ptr,
(acc->display.slen?" " : ""),
@@ -1676,7 +1678,9 @@ PJ_DEF(pj_status_t) pjsua_acc_create_uac_contact( pj_pool_t *pool,
local_addr.ptr,
endquote,
local_port,
- transport_param);
+ transport_param,
+ (int)acc->cfg.contact_params.slen,
+ acc->cfg.contact_params.ptr);
return PJ_SUCCESS;
}
@@ -1813,7 +1817,7 @@ PJ_DEF(pj_status_t) pjsua_acc_create_uas_contact( pj_pool_t *pool,
/* Create the contact header */
contact->ptr = (char*) pj_pool_alloc(pool, PJSIP_MAX_URL_SIZE);
contact->slen = pj_ansi_snprintf(contact->ptr, PJSIP_MAX_URL_SIZE,
- "%.*s%s<%s:%.*s%s%s%.*s%s:%d%s>",
+ "%.*s%s<%s:%.*s%s%s%.*s%s:%d%s%.*s>",
(int)acc->display.slen,
acc->display.ptr,
(acc->display.slen?" " : ""),
@@ -1826,7 +1830,9 @@ PJ_DEF(pj_status_t) pjsua_acc_create_uas_contact( pj_pool_t *pool,
local_addr.ptr,
endquote,
local_port,
- transport_param);
+ transport_param,
+ (int)acc->cfg.contact_params.slen,
+ acc->cfg.contact_params.ptr);
return PJ_SUCCESS;
}