summaryrefslogtreecommitdiff
path: root/pjsip
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2012-06-26 09:37:41 +0000
committerLiong Sauw Ming <ming@teluu.com>2012-06-26 09:37:41 +0000
commitc6a4be00c6cd11309519adb5c693589f85d68aa4 (patch)
treeca0243f0813442089d9ebf16e3e8bc66fc1f3f18 /pjsip
parent212dca784b98723807900d8a935a67e77d4458d4 (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.h10
-rw-r--r--pjsip/src/pjsua-lib/pjsua_acc.c6
-rw-r--r--pjsip/src/pjsua-lib/pjsua_pres.c5
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;