diff options
Diffstat (limited to 'pjsip/src/pjsua/pjsua_inv.c')
-rw-r--r-- | pjsip/src/pjsua/pjsua_inv.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/pjsip/src/pjsua/pjsua_inv.c b/pjsip/src/pjsua/pjsua_inv.c index 72272c32..7c6dbf26 100644 --- a/pjsip/src/pjsua/pjsua_inv.c +++ b/pjsip/src/pjsua/pjsua_inv.c @@ -78,6 +78,7 @@ pj_status_t pjsua_invite(const char *cstr_dest_uri, /* Create and associate our data in the session. */ inv_data = pj_pool_zalloc( dlg->pool, sizeof(struct pjsua_inv_data)); + inv_data->inv = inv; dlg->mod_data[pjsua.mod.id] = inv_data; @@ -110,6 +111,10 @@ pj_status_t pjsua_invite(const char *cstr_dest_uri, goto on_error; } + /* Add invite session to the list. */ + + pj_list_push_back(&pjsua.inv_list, inv_data); + /* Done. */ @@ -214,8 +219,11 @@ pj_bool_t pjsua_inv_on_incoming(pjsip_rx_data *rdata) /* Create and attach pjsua data to the dialog: */ inv_data = pj_pool_zalloc(dlg->pool, sizeof(struct pjsua_inv_data)); + inv_data->inv = inv; dlg->mod_data[pjsua.mod.id] = inv_data; + pj_list_push_back(&pjsua.inv_list, inv_data); + /* Answer with 100 (using the dialog, not invite): */ @@ -244,6 +252,9 @@ void pjsua_inv_on_state_changed(pjsip_inv_session *inv, pjsip_event *e) struct pjsua_inv_data *inv_data; inv_data = inv->dlg->mod_data[pjsua.mod.id]; + + pj_assert(inv_data != NULL); + if (inv_data && inv_data->session) { pjmedia_session_destroy(inv_data->session); inv_data->session = NULL; @@ -251,6 +262,11 @@ void pjsua_inv_on_state_changed(pjsip_inv_session *inv, pjsip_event *e) PJ_LOG(3,(THIS_FILE,"Media session is destroyed")); } + if (inv_data) { + + pj_list_erase(inv_data); + + } } pjsua_ui_inv_on_state_changed(inv, e); |