diff options
author | Benny Prijono <bennylp@teluu.com> | 2006-06-06 18:40:40 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2006-06-06 18:40:40 +0000 |
commit | 8db4ef281d67eee2ebeac22a31bc1961e96d78b2 (patch) | |
tree | b910ef526c864da15ab3d05840fc78ff8c6c7608 /pjsip/src/pjsua-lib/pjsua_pres.c | |
parent | 40d75a0cb404fc0bafa20934e992befd0eab673b (diff) |
Another huge chunks of modifications in PJSUA API, too many things to mention!
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@492 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 | 67 |
1 files changed, 51 insertions, 16 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_pres.c b/pjsip/src/pjsua-lib/pjsua_pres.c index c76d3cbb..b24ffd3c 100644 --- a/pjsip/src/pjsua-lib/pjsua_pres.c +++ b/pjsip/src/pjsua-lib/pjsua_pres.c @@ -97,7 +97,7 @@ static pj_bool_t pres_on_rx_request(pjsip_rx_data *rdata) /* Incoming SUBSCRIBE: */ /* Find which account for the incoming request. */ - acc_index = pjsua_find_account_for_incoming(rdata); + acc_index = pjsua_acc_find_for_incoming(rdata); acc_config = &pjsua.config.acc_config[acc_index]; /* Create UAS dialog: */ @@ -310,7 +310,8 @@ static void subscribe_buddy_presence(unsigned index) pjsip_tx_data *tdata; pj_status_t status; - acc_index = pjsua.buddies[index].acc_index; + acc_index = pjsua_acc_find_for_outgoing(&pjsua.config.buddy_uri[index]); + acc_config = &pjsua.config.acc_config[acc_index]; status = pjsip_dlg_create_uac( pjsip_ua_instance(), @@ -439,12 +440,13 @@ PJ_DEF(unsigned) pjsua_get_buddy_count(void) /** * Get buddy info. */ -PJ_DEF(pj_status_t) pjsua_buddy_get_info(unsigned index, +PJ_DEF(pj_status_t) pjsua_buddy_get_info(pjsua_buddy_id index, pjsua_buddy_info *info) { pjsua_buddy *buddy; - PJ_ASSERT_RETURN(index < pjsua.config.buddy_cnt, PJ_EINVAL); + PJ_ASSERT_RETURN(index < (int)PJ_ARRAY_SIZE(pjsua.config.buddy_uri), + PJ_EINVAL); pj_memset(info, 0, sizeof(pjsua_buddy_info)); @@ -471,7 +473,6 @@ PJ_DEF(pj_status_t) pjsua_buddy_get_info(unsigned index, info->status_text = pj_str("Offline"); } - info->acc_index = buddy->acc_index; return PJ_SUCCESS; } @@ -480,17 +481,27 @@ PJ_DEF(pj_status_t) pjsua_buddy_get_info(unsigned index, * Add new buddy. */ PJ_DEF(pj_status_t) pjsua_buddy_add( const pj_str_t *uri, - int *buddy_index) + pjsua_buddy_id *buddy_index) { pjsip_name_addr *url; pjsip_sip_uri *sip_uri; int index; pj_str_t tmp; - PJ_ASSERT_RETURN(pjsua.config.buddy_cnt <= PJ_ARRAY_SIZE(pjsua.config.buddy_uri), + PJ_ASSERT_RETURN(pjsua.config.buddy_cnt <= + PJ_ARRAY_SIZE(pjsua.config.buddy_uri), + PJ_ETOOMANY); + + /* Find empty slot */ + for (index=0; index<PJ_ARRAY_SIZE(pjsua.config.buddy_uri); ++index) { + if (pjsua.config.buddy_uri[index].slen == 0) + break; + } + + /* Expect to find an empty slot */ + PJ_ASSERT_RETURN(index < PJ_ARRAY_SIZE(pjsua.config.buddy_uri), PJ_ETOOMANY); - index = pjsua.config.buddy_cnt; /* Get name and display name for buddy */ pj_strdup_with_null(pjsua.pool, &tmp, uri); @@ -511,10 +522,6 @@ PJ_DEF(pj_status_t) pjsua_buddy_add( const pj_str_t *uri, if (pjsua.buddies[index].port == 0) pjsua.buddies[index].port = 5060; - /* Find account for outgoing preence subscription */ - pjsua.buddies[index].acc_index = - pjsua_find_account_for_outgoing(&pjsua.config.buddy_uri[index]); - if (buddy_index) *buddy_index = index; @@ -525,24 +532,52 @@ PJ_DEF(pj_status_t) pjsua_buddy_add( const pj_str_t *uri, -PJ_DEF(pj_status_t) pjsua_buddy_subscribe_pres( unsigned index, +/** + * Delete buddy. + */ +PJ_DEF(pj_status_t) pjsua_buddy_del(pjsua_buddy_id index) +{ + PJ_ASSERT_RETURN(index < (int)PJ_ARRAY_SIZE(pjsua.config.buddy_uri), + PJ_EINVAL); + + if (pjsua.config.buddy_uri[index].slen == 0) + return PJ_SUCCESS; + + /* Unsubscribe presence */ + pjsua_buddy_subscribe_pres(index, PJ_FALSE); + + /* Remove buddy */ + pjsua.config.buddy_uri[index].slen = 0; + pjsua.config.buddy_cnt--; + + return PJ_SUCCESS; +} + + +PJ_DEF(pj_status_t) pjsua_buddy_subscribe_pres( pjsua_buddy_id index, pj_bool_t monitor) { pjsua_buddy *buddy; - PJ_ASSERT_RETURN(index < pjsua.config.buddy_cnt, PJ_EINVAL); + PJ_ASSERT_RETURN(index < (int)PJ_ARRAY_SIZE(pjsua.config.buddy_uri), + PJ_EINVAL); buddy = &pjsua.buddies[index]; buddy->monitor = monitor; + pjsua_pres_refresh(); return PJ_SUCCESS; } -PJ_DEF(pj_status_t) pjsua_acc_set_online_status( unsigned acc_index, +PJ_DEF(pj_status_t) pjsua_acc_set_online_status( pjsua_acc_id acc_index, pj_bool_t is_online) { - PJ_ASSERT_RETURN(acc_index < pjsua.config.acc_cnt, PJ_EINVAL); + PJ_ASSERT_RETURN(acc_index < (int)PJ_ARRAY_SIZE(pjsua.acc), + PJ_EINVAL); + PJ_ASSERT_RETURN(pjsua.acc[acc_index].valid, PJ_EINVALIDOP); + pjsua.acc[acc_index].online_status = is_online; + pjsua_pres_refresh(); return PJ_SUCCESS; } |