summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsua-lib
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2006-08-15 13:11:22 +0000
committerBenny Prijono <bennylp@teluu.com>2006-08-15 13:11:22 +0000
commit2b4ce727a94196b76c3d2e6bf3f43c201207b82c (patch)
treedfbe08872ec71616ef3c34a56e461695b7581d9c /pjsip/src/pjsua-lib
parenta3efa6db12c8d49a7021150e803e3183def178b0 (diff)
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
Diffstat (limited to 'pjsip/src/pjsua-lib')
-rw-r--r--pjsip/src/pjsua-lib/pjsua_acc.c43
-rw-r--r--pjsip/src/pjsua-lib/pjsua_pres.c14
2 files changed, 48 insertions, 9 deletions
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
@@ -43,6 +43,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.
*/
static void copy_acc_config(pj_pool_t *pool,
@@ -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_id<PJ_ARRAY_SIZE(pjsua_var.acc); ++acc_id) {
- if (!pjsua_var.acc[acc_id].valid)
- continue;
- if (pj_stricmp(&pjsua_var.acc[acc_id].srv_domain, &sip_uri->host)==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_id<PJ_ARRAY_SIZE(pjsua_var.acc); ++acc_id) {
+ if (!pjsua_var.acc[acc_id].valid)
+ continue;
+ if (pj_stricmp(&pjsua_var.acc[acc_id].srv_domain, &sip_uri->host)==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);