diff options
author | Benny Prijono <bennylp@teluu.com> | 2006-07-18 00:33:02 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2006-07-18 00:33:02 +0000 |
commit | 65035358b4b7f51b4183a0937e9e93ff130d7525 (patch) | |
tree | d38d458e390fd2ac04e91f90bac5b856f4089c4c /pjsip/src/pjsua-lib/pjsua_pres.c | |
parent | cbb6c140cf6e47e65b31b93009cfe39916933009 (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_pres.c')
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_pres.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_pres.c b/pjsip/src/pjsua-lib/pjsua_pres.c index 4af2b6e0..cba0724c 100644 --- a/pjsip/src/pjsua-lib/pjsua_pres.c +++ b/pjsip/src/pjsua-lib/pjsua_pres.c @@ -440,6 +440,7 @@ static pj_bool_t pres_on_rx_request(pjsip_rx_data *rdata) { int acc_id; pjsua_acc *acc; + pj_str_t contact; pjsip_method *req_method = &rdata->msg_info.msg->line.req.method; pjsua_srv_pres *uapres; pjsip_evsub *sub; @@ -463,10 +464,18 @@ static pj_bool_t pres_on_rx_request(pjsip_rx_data *rdata) PJ_LOG(4,(THIS_FILE, "Creating server subscription, using account %d", acc_id)); + /* Create 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); + PJSUA_UNLOCK(); + return PJ_TRUE; + } + /* Create UAS dialog: */ status = pjsip_dlg_create_uas(pjsip_ua_instance(), rdata, - &acc->real_contact, - &dlg); + &contact, &dlg); if (status != PJ_SUCCESS) { pjsua_perror(THIS_FILE, "Unable to create UAS dialog for subscription", @@ -761,6 +770,7 @@ static void subscribe_buddy_presence(unsigned index) pjsua_buddy *buddy; int acc_id; pjsua_acc *acc; + pj_str_t contact; pjsip_dialog *dlg; pjsip_tx_data *tdata; pj_status_t status; @@ -773,10 +783,18 @@ static void subscribe_buddy_presence(unsigned index) PJ_LOG(4,(THIS_FILE, "Using account %d for buddy %d subscription", acc_id, index)); + /* Generate suitable Contact header */ + status = pjsua_acc_create_uac_contact(pjsua_var.pool, &contact, + acc_id, &buddy->uri); + if (status != PJ_SUCCESS) { + pjsua_perror(THIS_FILE, "Unable to generate Contact header", status); + return; + } + /* Create UAC dialog */ status = pjsip_dlg_create_uac( pjsip_ua_instance(), &acc->cfg.id, - &acc->real_contact, + &contact, &buddy->uri, NULL, &dlg); if (status != PJ_SUCCESS) { |