diff --git a/pjsip-apps/src/pjsua/pjsua_app.c b/pjsip-apps/src/pjsua/pjsua_app.c index f072b3908..3c819b34e 100644 --- a/pjsip-apps/src/pjsua/pjsua_app.c +++ b/pjsip-apps/src/pjsua/pjsua_app.c @@ -1998,6 +1998,9 @@ static pj_status_t app_init(void) pjsua_call_setting_default(&call_opt); call_opt.aud_cnt = app_config.aud_cnt; call_opt.vid_cnt = app_config.vid.vid_cnt; + if (app_config.enable_loam) { + call_opt.flag |= PJSUA_CALL_NO_SDP_OFFER; + } #if defined(PJSIP_HAS_TLS_TRANSPORT) && PJSIP_HAS_TLS_TRANSPORT!=0 /* Wipe out TLS key settings in transport configs */ diff --git a/pjsip-apps/src/pjsua/pjsua_app_cli.c b/pjsip-apps/src/pjsua/pjsua_app_cli.c index bf2237eda..44849230d 100644 --- a/pjsip-apps/src/pjsua/pjsua_app_cli.c +++ b/pjsip-apps/src/pjsua/pjsua_app_cli.c @@ -38,6 +38,7 @@ #define CMD_QUIT 110 #define CMD_RESTART 120 #define CMD_HANDLE_IP_CHANGE 130 +#define CMD_TOGGLE_SDP_OFFER 140 /* call level 2 command */ #define CMD_CALL_NEW ((CMD_CALL*10)+1) @@ -2086,6 +2087,19 @@ static pj_status_t cmd_show_current_call(pj_cli_cmd_val *cval) return PJ_SUCCESS; } +static pj_status_t cmd_toggle_call_sdp_offer(pj_cli_cmd_val* cval) +{ + char out_str[64]; + app_config.enable_loam = !app_config.enable_loam; + + pj_ansi_snprintf(out_str, sizeof(out_str), + "Subsequent calls and UPDATEs will contain SDP offer: %s\n", + app_config.enable_loam ? "No" : "Yes"); + pj_cli_sess_write_msg(cval->sess, out_str, pj_ansi_strlen(out_str)); + + return PJ_SUCCESS; +} + /* Call handler */ pj_status_t cmd_call_handler(pj_cli_cmd_val *cval) { @@ -2094,6 +2108,14 @@ pj_status_t cmd_call_handler(pj_cli_cmd_val *cval) CHECK_PJSUA_RUNNING(); + /* Update call setting */ + pjsua_call_setting_default(&call_opt); + call_opt.aud_cnt = app_config.aud_cnt; + call_opt.vid_cnt = app_config.vid.vid_cnt; + if (app_config.enable_loam) { + call_opt.flag |= PJSUA_CALL_NO_SDP_OFFER; + } + switch(cmd_id) { case CMD_CALL_NEW: status = cmd_make_single_call(cval); @@ -3221,12 +3243,17 @@ static pj_status_t add_other_command(pj_cli_t *c) char* ip_change_command = ""; + char* toggle_sdp_offer_command = + ""; + pj_status_t status; pj_str_t sleep_xml = pj_str(sleep_command); pj_str_t network_xml = pj_str(network_command); pj_str_t shutdown_xml = pj_str(shutdown_command); pj_str_t restart_xml = pj_str(restart_command); pj_str_t ip_change_xml = pj_str(ip_change_command); + pj_str_t toggle_sdp_offer_xml = pj_str(toggle_sdp_offer_command); status = pj_cli_add_cmd_from_xml(c, NULL, &sleep_xml, cmd_sleep_handler, @@ -3257,6 +3284,13 @@ static pj_status_t add_other_command(pj_cli_t *c) status = pj_cli_add_cmd_from_xml(c, NULL, &ip_change_xml, cmd_ip_change_handler, NULL, NULL); + if (status != PJ_SUCCESS) + return status; + + status = pj_cli_add_cmd_from_xml(c, NULL, + &toggle_sdp_offer_xml, + cmd_toggle_call_sdp_offer, + NULL, NULL); return status; } diff --git a/pjsip-apps/src/pjsua/pjsua_app_common.h b/pjsip-apps/src/pjsua/pjsua_app_common.h index 06c81718d..f3359a379 100644 --- a/pjsip-apps/src/pjsua/pjsua_app_common.h +++ b/pjsip-apps/src/pjsua/pjsua_app_common.h @@ -78,6 +78,7 @@ typedef struct pjsua_app_config pj_bool_t ipv6; pj_bool_t enable_qos; pj_bool_t no_mci; + pj_bool_t enable_loam; pj_bool_t no_tcp; pj_bool_t no_udp; pj_bool_t use_tls; diff --git a/pjsip-apps/src/pjsua/pjsua_app_config.c b/pjsip-apps/src/pjsua/pjsua_app_config.c index 6168f7789..76825a1bf 100644 --- a/pjsip-apps/src/pjsua/pjsua_app_config.c +++ b/pjsip-apps/src/pjsua/pjsua_app_config.c @@ -1988,6 +1988,7 @@ int write_settings(pjsua_app_config *config, char *buf, pj_size_t max) if (config->no_mci) { pj_strcat2(&cfg, "--no-mci\n"); } + /* UDP Transport. */ pj_ansi_snprintf(line, sizeof(line), "--local-port %d\n", config->udp_cfg.port); diff --git a/pjsip-apps/src/pjsua/pjsua_app_legacy.c b/pjsip-apps/src/pjsua/pjsua_app_legacy.c index fbc011bf8..d174f0ece 100644 --- a/pjsip-apps/src/pjsua/pjsua_app_legacy.c +++ b/pjsip-apps/src/pjsua/pjsua_app_legacy.c @@ -236,7 +236,7 @@ static void keystroke_help() puts("| a Answer call | i Send IM | !a Modify accnt. |"); puts("| h Hangup call (ha=all) | s Subscribe presence | rr (Re-)register |"); puts("| H Hold call | u Unsubscribe presence | ru Unregister |"); - puts("| | D Subscribe dlg event | |"); + puts("| o Toggle call SDP offer | D Subscribe dlg event | |"); puts("| | Du Unsub dlg event | |"); puts("| v re-inVite (release hold) | t Toggle online status | > Cycle next ac.|"); puts("| U send UPDATE | T Set online status | < Cycle prev ac.|"); @@ -734,6 +734,9 @@ static void ui_make_new_call() pjsua_msg_data_init(&msg_data_); TEST_MULTIPART(&msg_data_); + if (app_config.enable_loam) { + call_opt.flag |= PJSUA_CALL_NO_SDP_OFFER; + } pjsua_call_make_call(current_acc, &tmp, &call_opt, NULL, &msg_data_, ¤t_call); @@ -773,6 +776,10 @@ static void ui_make_multi_call() tmp = pj_str(result.uri_result); } + if (app_config.enable_loam) { + call_opt.flag |= PJSUA_CALL_NO_SDP_OFFER; + } + for (i=0; i