Enable Late Offer Answer Mode (LOAM) feature in the pjsua (#3869)
This commit is contained in:
parent
cfde494dc3
commit
a7c4d83807
|
@ -1998,6 +1998,9 @@ static pj_status_t app_init(void)
|
||||||
pjsua_call_setting_default(&call_opt);
|
pjsua_call_setting_default(&call_opt);
|
||||||
call_opt.aud_cnt = app_config.aud_cnt;
|
call_opt.aud_cnt = app_config.aud_cnt;
|
||||||
call_opt.vid_cnt = app_config.vid.vid_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
|
#if defined(PJSIP_HAS_TLS_TRANSPORT) && PJSIP_HAS_TLS_TRANSPORT!=0
|
||||||
/* Wipe out TLS key settings in transport configs */
|
/* Wipe out TLS key settings in transport configs */
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
#define CMD_QUIT 110
|
#define CMD_QUIT 110
|
||||||
#define CMD_RESTART 120
|
#define CMD_RESTART 120
|
||||||
#define CMD_HANDLE_IP_CHANGE 130
|
#define CMD_HANDLE_IP_CHANGE 130
|
||||||
|
#define CMD_TOGGLE_SDP_OFFER 140
|
||||||
|
|
||||||
/* call level 2 command */
|
/* call level 2 command */
|
||||||
#define CMD_CALL_NEW ((CMD_CALL*10)+1)
|
#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;
|
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 */
|
/* Call handler */
|
||||||
pj_status_t cmd_call_handler(pj_cli_cmd_val *cval)
|
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();
|
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) {
|
switch(cmd_id) {
|
||||||
case CMD_CALL_NEW:
|
case CMD_CALL_NEW:
|
||||||
status = cmd_make_single_call(cval);
|
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* ip_change_command =
|
||||||
"<CMD name='ip_change' id='130' desc='Handle IP change'/>";
|
"<CMD name='ip_change' id='130' desc='Handle IP change'/>";
|
||||||
|
|
||||||
|
char* toggle_sdp_offer_command =
|
||||||
|
"<CMD name='toggle_sdp_offer' sc='o' id='140' "
|
||||||
|
"desc='Toggle SDP offer use on subsequent calls and UPDATEs' />";
|
||||||
|
|
||||||
pj_status_t status;
|
pj_status_t status;
|
||||||
pj_str_t sleep_xml = pj_str(sleep_command);
|
pj_str_t sleep_xml = pj_str(sleep_command);
|
||||||
pj_str_t network_xml = pj_str(network_command);
|
pj_str_t network_xml = pj_str(network_command);
|
||||||
pj_str_t shutdown_xml = pj_str(shutdown_command);
|
pj_str_t shutdown_xml = pj_str(shutdown_command);
|
||||||
pj_str_t restart_xml = pj_str(restart_command);
|
pj_str_t restart_xml = pj_str(restart_command);
|
||||||
pj_str_t ip_change_xml = pj_str(ip_change_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,
|
status = pj_cli_add_cmd_from_xml(c, NULL,
|
||||||
&sleep_xml, cmd_sleep_handler,
|
&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,
|
status = pj_cli_add_cmd_from_xml(c, NULL,
|
||||||
&ip_change_xml, cmd_ip_change_handler,
|
&ip_change_xml, cmd_ip_change_handler,
|
||||||
NULL, NULL);
|
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;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,6 +78,7 @@ typedef struct pjsua_app_config
|
||||||
pj_bool_t ipv6;
|
pj_bool_t ipv6;
|
||||||
pj_bool_t enable_qos;
|
pj_bool_t enable_qos;
|
||||||
pj_bool_t no_mci;
|
pj_bool_t no_mci;
|
||||||
|
pj_bool_t enable_loam;
|
||||||
pj_bool_t no_tcp;
|
pj_bool_t no_tcp;
|
||||||
pj_bool_t no_udp;
|
pj_bool_t no_udp;
|
||||||
pj_bool_t use_tls;
|
pj_bool_t use_tls;
|
||||||
|
|
|
@ -1988,6 +1988,7 @@ int write_settings(pjsua_app_config *config, char *buf, pj_size_t max)
|
||||||
if (config->no_mci) {
|
if (config->no_mci) {
|
||||||
pj_strcat2(&cfg, "--no-mci\n");
|
pj_strcat2(&cfg, "--no-mci\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* UDP Transport. */
|
/* UDP Transport. */
|
||||||
pj_ansi_snprintf(line, sizeof(line), "--local-port %d\n",
|
pj_ansi_snprintf(line, sizeof(line), "--local-port %d\n",
|
||||||
config->udp_cfg.port);
|
config->udp_cfg.port);
|
||||||
|
|
|
@ -236,7 +236,7 @@ static void keystroke_help()
|
||||||
puts("| a Answer call | i Send IM | !a Modify accnt. |");
|
puts("| a Answer call | i Send IM | !a Modify accnt. |");
|
||||||
puts("| h Hangup call (ha=all) | s Subscribe presence | rr (Re-)register |");
|
puts("| h Hangup call (ha=all) | s Subscribe presence | rr (Re-)register |");
|
||||||
puts("| H Hold call | u Unsubscribe presence | ru Unregister |");
|
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("| | Du Unsub dlg event | |");
|
||||||
puts("| v re-inVite (release hold) | t Toggle online status | > Cycle next ac.|");
|
puts("| v re-inVite (release hold) | t Toggle online status | > Cycle next ac.|");
|
||||||
puts("| U send UPDATE | T Set online status | < Cycle prev 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_);
|
pjsua_msg_data_init(&msg_data_);
|
||||||
TEST_MULTIPART(&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,
|
pjsua_call_make_call(current_acc, &tmp, &call_opt, NULL,
|
||||||
&msg_data_, ¤t_call);
|
&msg_data_, ¤t_call);
|
||||||
|
|
||||||
|
@ -773,6 +776,10 @@ static void ui_make_multi_call()
|
||||||
tmp = pj_str(result.uri_result);
|
tmp = pj_str(result.uri_result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (app_config.enable_loam) {
|
||||||
|
call_opt.flag |= PJSUA_CALL_NO_SDP_OFFER;
|
||||||
|
}
|
||||||
|
|
||||||
for (i=0; i<my_atoi(menuin); ++i) {
|
for (i=0; i<my_atoi(menuin); ++i) {
|
||||||
pj_status_t status;
|
pj_status_t status;
|
||||||
|
|
||||||
|
@ -1081,6 +1088,11 @@ static void ui_delete_account()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ui_unset_loam_mode()
|
||||||
|
{
|
||||||
|
app_config.enable_loam = PJ_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
static void ui_call_hold()
|
static void ui_call_hold()
|
||||||
{
|
{
|
||||||
if (current_call != -1) {
|
if (current_call != -1) {
|
||||||
|
@ -1099,6 +1111,9 @@ static void ui_call_reinvite()
|
||||||
static void ui_send_update()
|
static void ui_send_update()
|
||||||
{
|
{
|
||||||
if (current_call != -1) {
|
if (current_call != -1) {
|
||||||
|
if (app_config.enable_loam) {
|
||||||
|
call_opt.flag |= PJSUA_CALL_NO_SDP_OFFER;
|
||||||
|
}
|
||||||
pjsua_call_update2(current_call, &call_opt, NULL);
|
pjsua_call_update2(current_call, &call_opt, NULL);
|
||||||
} else {
|
} else {
|
||||||
PJ_LOG(3,(THIS_FILE, "No current call"));
|
PJ_LOG(3,(THIS_FILE, "No current call"));
|
||||||
|
@ -1443,6 +1458,18 @@ static void ui_send_arbitrary_request()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ui_toggle_call_sdp_offer()
|
||||||
|
{
|
||||||
|
app_config.enable_loam = !app_config.enable_loam;
|
||||||
|
|
||||||
|
printf("Subsequent calls and UPDATEs will contain SDP offer: ");
|
||||||
|
if (app_config.enable_loam) {
|
||||||
|
printf("NO.\n");
|
||||||
|
} else {
|
||||||
|
printf("YES.\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void ui_echo(char menuin[])
|
static void ui_echo(char menuin[])
|
||||||
{
|
{
|
||||||
if (pj_ansi_strnicmp(menuin, "echo", 4)==0) {
|
if (pj_ansi_strnicmp(menuin, "echo", 4)==0) {
|
||||||
|
@ -1942,6 +1969,13 @@ void legacy_main(void)
|
||||||
ui_call_hold();
|
ui_call_hold();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'o':
|
||||||
|
/*
|
||||||
|
* Toggle call SDP offer
|
||||||
|
*/
|
||||||
|
ui_toggle_call_sdp_offer();
|
||||||
|
break;
|
||||||
|
|
||||||
case 'v':
|
case 'v':
|
||||||
#if PJSUA_HAS_VIDEO
|
#if PJSUA_HAS_VIDEO
|
||||||
if (menuin[1]=='i' && menuin[2]=='d' && menuin[3]==' ') {
|
if (menuin[1]=='i' && menuin[2]=='d' && menuin[3]==' ') {
|
||||||
|
|
Loading…
Reference in New Issue