diff options
author | Benny Prijono <bennylp@teluu.com> | 2006-02-23 18:03:29 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2006-02-23 18:03:29 +0000 |
commit | 83543421cc24dd7e2e3814a379dcbd8684f29268 (patch) | |
tree | fd4950c3bc47513750eb5cbf02cd99dd471ccf23 /pjsip | |
parent | d54482a7bbe74ce08f20fc31c3fb8c0ba2004f9f (diff) |
Fixed crashed bugs when session dissapers while pjsua is waiting for keyboard in
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@226 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip')
-rw-r--r-- | pjsip/src/pjsua/main.c | 29 | ||||
-rw-r--r-- | pjsip/src/pjsua/pjsua_inv.c | 13 |
2 files changed, 38 insertions, 4 deletions
diff --git a/pjsip/src/pjsua/main.c b/pjsip/src/pjsua/main.c index 5218c7cd..f0d04818 100644 --- a/pjsip/src/pjsua/main.c +++ b/pjsip/src/pjsua/main.c @@ -344,6 +344,17 @@ static void ui_console_main(void) if (atoi(buf) < 100) continue; + /* + * Must check again! + * Call may have been disconnected while we're waiting for + * keyboard input. + */ + if (inv_session == &pjsua.inv_list) { + puts("Call has been disconnected"); + fflush(stdout); + continue; + } + status = pjsip_inv_answer(inv_session->inv, atoi(buf), NULL, NULL, &tdata); if (status == PJ_SUCCESS) @@ -439,7 +450,17 @@ static void ui_console_main(void) PJ_LOG(3,(THIS_FILE, "No current call")); } else { + struct pjsua_inv_data *cur = inv_session; + ui_input_url("Transfer to URL", buf, sizeof(buf), &result); + + /* Check if call is still there. */ + + if (cur != inv_session) { + puts("Call has been disconnected"); + continue; + } + if (result.nb_result != NO_NB) { if (result.nb_result == -1) puts("You can't do that with transfer call!"); @@ -467,11 +488,19 @@ static void ui_console_main(void) } else { pj_str_t digits; + struct pjsua_inv_data *cur = inv_session; pj_status_t status; if (!simple_input("DTMF strings to send (0-9*#A-B)", buf, sizeof(buf))) + { break; + } + + if (cur != inv_session) { + puts("Call has been disconnected"); + continue; + } digits = pj_str(buf); status = pjmedia_session_dial_dtmf(inv_session->session, 0, diff --git a/pjsip/src/pjsua/pjsua_inv.c b/pjsip/src/pjsua/pjsua_inv.c index f8b211d3..f2994558 100644 --- a/pjsip/src/pjsua/pjsua_inv.c +++ b/pjsip/src/pjsua/pjsua_inv.c @@ -121,19 +121,24 @@ pj_status_t pjsua_invite(const char *cstr_dest_uri, } + /* Add invite session to the list. */ + + pj_list_push_back(&pjsua.inv_list, inv_data); + + /* Send initial INVITE: */ status = pjsip_inv_send_msg(inv, tdata, NULL); if (status != PJ_SUCCESS) { + /* + * Note: + * inv_data will be removed from the list in the callback + */ pjsua_perror(THIS_FILE, "Unable to send initial INVITE request", status); goto on_error; } - /* Add invite session to the list. */ - - pj_list_push_back(&pjsua.inv_list, inv_data); - /* Done. */ if (p_inv_data) |