summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2006-02-23 18:03:29 +0000
committerBenny Prijono <bennylp@teluu.com>2006-02-23 18:03:29 +0000
commit83543421cc24dd7e2e3814a379dcbd8684f29268 (patch)
treefd4950c3bc47513750eb5cbf02cd99dd471ccf23
parentd54482a7bbe74ce08f20fc31c3fb8c0ba2004f9f (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
-rw-r--r--pjsip/src/pjsua/main.c29
-rw-r--r--pjsip/src/pjsua/pjsua_inv.c13
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)