summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsua-lib/pjsua_call.c
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2006-07-18 00:33:02 +0000
committerBenny Prijono <bennylp@teluu.com>2006-07-18 00:33:02 +0000
commit65035358b4b7f51b4183a0937e9e93ff130d7525 (patch)
treed38d458e390fd2ac04e91f90bac5b856f4089c4c /pjsip/src/pjsua-lib/pjsua_call.c
parentcbb6c140cf6e47e65b31b93009cfe39916933009 (diff)
More intelligent PJSUA-LIB in selecting the appropriate address for Contact header
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@611 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src/pjsua-lib/pjsua_call.c')
-rw-r--r--pjsip/src/pjsua-lib/pjsua_call.c27
1 files changed, 24 insertions, 3 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_call.c b/pjsip/src/pjsua-lib/pjsua_call.c
index affe787b..e7455e80 100644
--- a/pjsip/src/pjsua-lib/pjsua_call.c
+++ b/pjsip/src/pjsua-lib/pjsua_call.c
@@ -191,6 +191,7 @@ PJ_DEF(pj_status_t) pjsua_call_make_call( pjsua_acc_id acc_id,
pjsua_acc *acc;
pjsua_call *call;
unsigned call_id;
+ pj_str_t contact;
pjsip_tx_data *tdata;
pj_status_t status;
@@ -232,9 +233,18 @@ PJ_DEF(pj_status_t) pjsua_call_make_call( pjsua_acc_id acc_id,
/* Reset first response time */
call->res_time.sec = 0;
+ /* Create suitable Contact header */
+ status = pjsua_acc_create_uac_contact(pjsua_var.pool, &contact,
+ acc_id, dest_uri);
+ if (status != PJ_SUCCESS) {
+ pjsua_perror(THIS_FILE, "Unable to generate Contact header", status);
+ PJSUA_UNLOCK();
+ return status;
+ }
+
/* Create outgoing dialog: */
status = pjsip_dlg_create_uac( pjsip_ua_instance(),
- &acc->cfg.id, &acc->real_contact,
+ &acc->cfg.id, &contact,
dest_uri, dest_uri, &dlg);
if (status != PJ_SUCCESS) {
pjsua_perror(THIS_FILE, "Dialog creation failed", status);
@@ -345,6 +355,7 @@ on_error:
*/
pj_bool_t pjsua_call_on_incoming(pjsip_rx_data *rdata)
{
+ pj_str_t contact;
pjsip_dialog *dlg = pjsip_rdata_get_dlg(rdata);
pjsip_transaction *tsx = pjsip_rdata_get_tsx(rdata);
pjsip_msg *msg = rdata->msg_info.msg;
@@ -439,10 +450,19 @@ pj_bool_t pjsua_call_on_incoming(pjsip_rx_data *rdata)
*/
acc_id = pjsua_acc_find_for_incoming(rdata);
+ /* Get suitable Contact header */
+ status = pjsua_acc_create_uas_contact(rdata->tp_info.pool, &contact,
+ acc_id, rdata);
+ if (status != PJ_SUCCESS) {
+ pjsua_perror(THIS_FILE, "Unable to generate Contact header", status);
+ pjsip_endpt_respond_stateless(pjsua_var.endpt, rdata, 500, NULL,
+ NULL, NULL);
+ return PJ_TRUE;
+ }
+
/* Create dialog: */
status = pjsip_dlg_create_uas( pjsip_ua_instance(), rdata,
- &pjsua_var.acc[acc_id].real_contact,
- &dlg);
+ &contact, &dlg);
if (status != PJ_SUCCESS) {
pjsip_endpt_respond_stateless(pjsua_var.endpt, rdata, 500, NULL,
NULL, NULL);
@@ -921,6 +941,7 @@ PJ_DEF(pj_status_t) pjsua_call_reinvite( pjsua_call_id call_id,
}
/* Create SDP */
+ PJ_TODO(create_active_inactive_sdp_based_on_unhold_arg);
status = pjmedia_endpt_create_sdp( pjsua_var.med_endpt, call->inv->pool,
1, &call->skinfo, &sdp);
if (status != PJ_SUCCESS) {