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