diff options
Diffstat (limited to 'pjsip/src/pjsua/main.c')
-rw-r--r-- | pjsip/src/pjsua/main.c | 181 |
1 files changed, 131 insertions, 50 deletions
diff --git a/pjsip/src/pjsua/main.c b/pjsip/src/pjsua/main.c index 467c5a5a..4068e77f 100644 --- a/pjsip/src/pjsua/main.c +++ b/pjsip/src/pjsua/main.c @@ -113,8 +113,8 @@ static void keystroke_help(void) pj_snprintf(reg_status, sizeof(reg_status), "%s (%.*s;expires=%d)", pjsip_get_status_text(pjsua.regc_last_code)->ptr, - (int)info.server_uri.slen, - info.server_uri.ptr, + (int)info.client_uri.slen, + info.client_uri.ptr, info.next_reg); } else { @@ -131,16 +131,16 @@ static void keystroke_help(void) puts("| Call Commands: | IM & Presence: | Misc: |"); puts("| | | |"); puts("| m Make new call | i Send IM | o Send OPTIONS |"); - puts("| a Answer call | s Subscribe presence | R (Re-)register |"); - puts("| h Hangup call | u Unsubscribe presence | r Unregister |"); - puts("| ] Select next dialog | t Toggle Online status | d Dump status |"); + puts("| a Answer call | s Subscribe presence | rr (Re-)register |"); + puts("| h Hangup call | u Unsubscribe presence | ru Unregister |"); + puts("| ] Select next dialog | t ToGgle Online status | d Dump status |"); puts("| [ Select previous dialog | | |"); - puts("+-----------------------------------------------------------------------------+"); - puts("| Conference Command |"); - puts("| cl List ports |"); - puts("| cc Connect port |"); - puts("| cd Disconnect port |"); - puts("+-----------------------------------------------------------------------------+"); + puts("| +--------------------------+-------------------+"); + puts("| H Hold call | Conference Command | |"); + puts("| v re-inVite (release hold) | cl List ports | |"); + puts("| x Xfer call | cc Connect port | |"); + puts("| | cd Disconnect port | |"); + puts("+------------------------------+--------------------------+-------------------+"); puts("| q QUIT |"); puts("+=============================================================================+"); printf(">>> "); @@ -283,7 +283,6 @@ static void ui_console_main(void) { char menuin[10]; char buf[128]; - pjsip_inv_session *inv; struct input_result result; //keystroke_help(); @@ -305,9 +304,9 @@ static void ui_console_main(void) if (result.nb_result == -1) puts("You can't do that with make call!"); else - pjsua_invite(pjsua.buddies[result.nb_result].uri.ptr, &inv); + pjsua_invite(pjsua.buddies[result.nb_result].uri.ptr, NULL); } else if (result.uri_result) - pjsua_invite(result.uri_result, &inv); + pjsua_invite(result.uri_result, NULL); break; @@ -353,43 +352,100 @@ static void ui_console_main(void) continue; } else { - pj_status_t status; - pjsip_tx_data *tdata; + pjsua_inv_hangup(inv_session, PJSIP_SC_DECLINE); + } + break; - status = pjsip_inv_end_session(inv_session->inv, - PJSIP_SC_DECLINE, NULL, &tdata); - if (status != PJ_SUCCESS) { - pjsua_perror(THIS_FILE, - "Failed to create end session message", - status); - continue; - } + case ']': + case '[': + /* + * Cycle next/prev dialog. + */ + if (menuin[0] == ']') { + inv_session = inv_session->next; + if (inv_session == &pjsua.inv_list) + inv_session = pjsua.inv_list.next; - status = pjsip_inv_send_msg(inv_session->inv, tdata, NULL); - if (status != PJ_SUCCESS) { - pjsua_perror(THIS_FILE, - "Failed to send end session message", - status); - continue; + } else { + inv_session = inv_session->prev; + if (inv_session == &pjsua.inv_list) + inv_session = pjsua.inv_list.prev; + } + + if (inv_session != &pjsua.inv_list) { + char url[PJSIP_MAX_URL_SIZE]; + int len; + + len = pjsip_uri_print(0, inv_session->inv->dlg->remote.info->uri, + url, sizeof(url)-1); + if (len < 1) { + pj_ansi_strcpy(url, "<uri is too long>"); + } else { + url[len] = '\0'; } + + PJ_LOG(3,(THIS_FILE,"Current dialog: %s", url)); + + } else { + PJ_LOG(3,(THIS_FILE,"No current dialog")); } break; - case ']': - inv_session = inv_session->next; - if (inv_session == &pjsua.inv_list) - inv_session = pjsua.inv_list.next; + case 'H': + /* + * Hold call. + */ + if (inv_session != &pjsua.inv_list) { + + pjsua_inv_set_hold(inv_session); + + } else { + PJ_LOG(3,(THIS_FILE, "No current call")); + } break; - case '[': - inv_session = inv_session->prev; - if (inv_session == &pjsua.inv_list) - inv_session = pjsua.inv_list.prev; + case 'v': + /* + * Send re-INVITE (to release hold, etc). + */ + if (inv_session != &pjsua.inv_list) { + + pjsua_inv_reinvite(inv_session); + + } else { + PJ_LOG(3,(THIS_FILE, "No current call")); + } + break; + + case 'x': + /* + * Transfer call. + */ + if (inv_session == &pjsua.inv_list) { + + PJ_LOG(3,(THIS_FILE, "No current call")); + + } else { + ui_input_url("Transfer to URL", buf, sizeof(buf), &result); + if (result.nb_result != NO_NB) { + if (result.nb_result == -1) + puts("You can't do that with transfer call!"); + else + pjsua_inv_xfer_call( inv_session, + pjsua.buddies[result.nb_result].uri.ptr); + + } else if (result.uri_result) { + pjsua_inv_xfer_call( inv_session, result.uri_result); + } + } break; case 's': case 'u': - ui_input_url("Subscribe presence of", buf, sizeof(buf), &result); + /* + * Subscribe/unsubscribe presence. + */ + ui_input_url("(un)Subscribe presence of", buf, sizeof(buf), &result); if (result.nb_result != NO_NB) { if (result.nb_result == -1) { unsigned i; @@ -402,19 +458,29 @@ static void ui_console_main(void) pjsua_pres_refresh(); } else if (result.uri_result) { - puts("Sorry, can only subscribe to buddy's presence, not arbitrary URL (for now)"); + puts("Sorry, can only subscribe to buddy's presence, " + "not arbitrary URL (for now)"); } break; - case 'R': - pjsua_regc_update(PJ_TRUE); - break; - case 'r': - pjsua_regc_update(PJ_FALSE); + switch (menuin[1]) { + case 'r': + /* + * Re-Register. + */ + pjsua_regc_update(PJ_TRUE); + break; + case 'u': + /* + * Unregister + */ + pjsua_regc_update(PJ_FALSE); + break; + } break; - + case 't': pjsua.online_status = !pjsua.online_status; pjsua_pres_refresh(); @@ -430,16 +496,31 @@ static void ui_console_main(void) { char src_port[10], dst_port[10]; pj_status_t status; + const char *src_title, *dst_title; - if (!simple_input("Connect src port #:", src_port, sizeof(src_port))) + conf_list(); + + src_title = (menuin[1]=='c'? + "Connect src port #": + "Disconnect src port #"); + dst_title = (menuin[1]=='c'? + "To dst port #": + "From dst port #"); + + if (!simple_input(src_title, src_port, sizeof(src_port))) break; - if (!simple_input("To dst port #:", dst_port, sizeof(dst_port))) + + if (!simple_input(dst_title, dst_port, sizeof(dst_port))) break; if (menuin[1]=='c') { - status = pjmedia_conf_connect_port(pjsua.mconf, atoi(src_port), atoi(dst_port)); + status = pjmedia_conf_connect_port(pjsua.mconf, + atoi(src_port), + atoi(dst_port)); } else { - status = pjmedia_conf_disconnect_port(pjsua.mconf, atoi(src_port), atoi(dst_port)); + status = pjmedia_conf_disconnect_port(pjsua.mconf, + atoi(src_port), + atoi(dst_port)); } if (status == PJ_SUCCESS) { puts("Success"); |