From 2b4ce727a94196b76c3d2e6bf3f43c201207b82c Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Tue, 15 Aug 2006 13:11:22 +0000 Subject: Added initial PUBLISH client support, and also default account selection in pjsua/pjsua-lib git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@683 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip/src/pjsua-lib/pjsua_acc.c | 43 ++++++++++++++++++++++++++++++++++------ pjsip/src/pjsua-lib/pjsua_pres.c | 14 ++++++++++--- 2 files changed, 48 insertions(+), 9 deletions(-) (limited to 'pjsip/src/pjsua-lib') diff --git a/pjsip/src/pjsua-lib/pjsua_acc.c b/pjsip/src/pjsua-lib/pjsua_acc.c index 05815ede..7860c33f 100644 --- a/pjsip/src/pjsua-lib/pjsua_acc.c +++ b/pjsip/src/pjsua-lib/pjsua_acc.c @@ -42,6 +42,25 @@ PJ_DEF(pj_bool_t) pjsua_acc_is_valid(pjsua_acc_id acc_id) } +/* + * Set default account + */ +PJ_DEF(pj_status_t) pjsua_acc_set_default(pjsua_acc_id acc_id) +{ + pjsua_var.default_acc = acc_id; + return PJ_SUCCESS; +} + + +/* + * Get default account. + */ +PJ_DEF(pjsua_acc_id) pjsua_acc_get_default(void) +{ + return pjsua_var.default_acc; +} + + /* * Copy account configuration. */ @@ -724,13 +743,25 @@ PJ_DEF(pjsua_acc_id) pjsua_acc_find_for_outgoing(const pj_str_t *url) sip_uri = pjsip_uri_get_uri(uri); + /* See if default acc match */ + if (pjsua_var.default_acc != PJSUA_INVALID_ID && + pj_stricmp(&pjsua_var.acc[pjsua_var.default_acc].srv_domain, &sip_uri->host)==0 && + pjsua_var.acc[pjsua_var.default_acc].srv_port == sip_uri->port) + { + acc_id = pjsua_var.default_acc; + } else { + acc_id = PJ_ARRAY_SIZE(pjsua_var.acc); + } + /* Find matching domain AND port */ - for (acc_id=0; acc_idhost)==0 && - pjsua_var.acc[acc_id].srv_port == sip_uri->port) - break; + if (acc_id == PJ_ARRAY_SIZE(pjsua_var.acc)) { + for (acc_id=0; acc_idhost)==0 && + pjsua_var.acc[acc_id].srv_port == sip_uri->port) + break; + } } /* If no match, try to match the domain part only */ diff --git a/pjsip/src/pjsua-lib/pjsua_pres.c b/pjsip/src/pjsua-lib/pjsua_pres.c index cba0724c..ceb1b762 100644 --- a/pjsip/src/pjsua-lib/pjsua_pres.c +++ b/pjsip/src/pjsua-lib/pjsua_pres.c @@ -543,8 +543,10 @@ static pj_bool_t pres_on_rx_request(pjsip_rx_data *rdata) /* Create and send the first NOTIFY to active subscription: */ status = pjsip_pres_notify( sub, PJSIP_EVSUB_STATE_ACTIVE, NULL, NULL, &tdata); - if (status == PJ_SUCCESS) + if (status == PJ_SUCCESS) { + pjsua_process_msg_data(tdata, NULL); status = pjsip_pres_send_request( sub, tdata); + } if (status != PJ_SUCCESS) { pjsua_perror(THIS_FILE, "Unable to create/send NOTIFY", @@ -611,8 +613,10 @@ static void refresh_server_subscription(int acc_id) pres_status.info[0].basic_open = pjsua_var.acc[acc_id].online_status; pjsip_pres_set_status(uapres->sub, &pres_status); - if (pjsip_pres_current_notify(uapres->sub, &tdata)==PJ_SUCCESS) + if (pjsip_pres_current_notify(uapres->sub, &tdata)==PJ_SUCCESS) { + pjsua_process_msg_data(tdata, NULL); pjsip_pres_send_request(uapres->sub, tdata); + } } uapres = uapres->next; @@ -835,6 +839,8 @@ static void subscribe_buddy_presence(unsigned index) return; } + pjsua_process_msg_data(tdata, NULL); + status = pjsip_pres_send_request(buddy->sub, tdata); if (status != PJ_SUCCESS) { pjsip_pres_terminate(buddy->sub, PJ_FALSE); @@ -864,8 +870,10 @@ static void unsubscribe_buddy_presence(unsigned index) } status = pjsip_pres_initiate( buddy->sub, 0, &tdata); - if (status == PJ_SUCCESS) + if (status == PJ_SUCCESS) { + pjsua_process_msg_data(tdata, NULL); status = pjsip_pres_send_request( buddy->sub, tdata ); + } if (status != PJ_SUCCESS) { pjsip_pres_terminate(buddy->sub, PJ_FALSE); -- cgit v1.2.3