diff options
author | Liong Sauw Ming <ming@teluu.com> | 2012-06-26 09:37:41 +0000 |
---|---|---|
committer | Liong Sauw Ming <ming@teluu.com> | 2012-06-26 09:37:41 +0000 |
commit | c6a4be00c6cd11309519adb5c693589f85d68aa4 (patch) | |
tree | ca0243f0813442089d9ebf16e3e8bc66fc1f3f18 /pjsip | |
parent | 212dca784b98723807900d8a935a67e77d4458d4 (diff) |
Re #1540: Modify MWI subscription setting on run-time
* Add subscription state callback
* Terminate subscription when deleting acc
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4180 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip')
-rw-r--r-- | pjsip/include/pjsua-lib/pjsua.h | 10 | ||||
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_acc.c | 6 | ||||
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_pres.c | 5 |
3 files changed, 21 insertions, 0 deletions
diff --git a/pjsip/include/pjsua-lib/pjsua.h b/pjsip/include/pjsua-lib/pjsua.h index 553f3dad..f95cd29f 100644 --- a/pjsip/include/pjsua-lib/pjsua.h +++ b/pjsip/include/pjsua-lib/pjsua.h @@ -1170,6 +1170,16 @@ typedef struct pjsua_callback const pjsip_event *e); /** + * This callback is called when message waiting indication subscription + * state has changed. Application can then query the subscription state + * by calling #pjsip_evsub_get_state(). + * + * @param acc_id The account ID. + * @param evsub The subscription instance. + */ + void (*on_mwi_state)(pjsua_acc_id acc_id, pjsip_evsub *evsub); + + /** * This callback is called when a NOTIFY request for message summary / * message waiting indication is received. * diff --git a/pjsip/src/pjsua-lib/pjsua_acc.c b/pjsip/src/pjsua-lib/pjsua_acc.c index f6c97df0..d4df760f 100644 --- a/pjsip/src/pjsua-lib/pjsua_acc.c +++ b/pjsip/src/pjsua-lib/pjsua_acc.c @@ -612,6 +612,12 @@ PJ_DEF(pj_status_t) pjsua_acc_del(pjsua_acc_id acc_id) acc->regc = NULL; } + /* Terminate mwi subscription */ + if (acc->cfg.mwi_enabled) { + acc->cfg.mwi_enabled = PJ_FALSE; + pjsua_start_mwi(acc_id, PJ_FALSE); + } + /* Delete server presence subscription */ pjsua_pres_delete_acc(acc_id, 0); diff --git a/pjsip/src/pjsua-lib/pjsua_pres.c b/pjsip/src/pjsua-lib/pjsua_pres.c index 5eac4415..21cb4d69 100644 --- a/pjsip/src/pjsua-lib/pjsua_pres.c +++ b/pjsip/src/pjsua-lib/pjsua_pres.c @@ -1958,6 +1958,11 @@ static void mwi_evsub_on_state( pjsip_evsub *sub, pjsip_event *event) (int)acc->cfg.id.slen, acc->cfg.id.ptr, pjsip_evsub_get_state_name(sub))); + /* Call callback */ + if (pjsua_var.ua_cfg.cb.on_mwi_state) { + (*pjsua_var.ua_cfg.cb.on_mwi_state)(acc->index, sub); + } + if (pjsip_evsub_get_state(sub) == PJSIP_EVSUB_STATE_TERMINATED) { /* Clear subscription */ acc->mwi_dlg = NULL; |