From f2d5263f261f4d2a1b714b3b91cc4229b86ad01d Mon Sep 17 00:00:00 2001 From: Nanang Izzuddin Date: Thu, 13 May 2010 05:22:51 +0000 Subject: Re #1069: - Added new approach of SRTP optional mode in pjsua-lib by duplicating SDP media line for secured and unsecured version of media transport. - Integrated this feature into pjsua app, it is activated via --use-srtp=3 param. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3172 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip-apps/src/pjsua/pjsua_app.c | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) (limited to 'pjsip-apps') diff --git a/pjsip-apps/src/pjsua/pjsua_app.c b/pjsip-apps/src/pjsua/pjsua_app.c index 6bb23d23..aed2dd53 100644 --- a/pjsip-apps/src/pjsua/pjsua_app.c +++ b/pjsip-apps/src/pjsua/pjsua_app.c @@ -178,7 +178,8 @@ static void usage(void) puts ("SIP Account options:"); puts (" --use-ims Enable 3GPP/IMS related settings on this account"); #if defined(PJMEDIA_HAS_SRTP) && (PJMEDIA_HAS_SRTP != 0) - puts (" --use-srtp=N Use SRTP? 0:disabled, 1:optional, 2:mandatory (def:0)"); + puts (" --use-srtp=N Use SRTP? 0:disabled, 1:optional, 2:mandatory,"); + puts (" 3:optional by duplicating media offer (def:0)"); puts (" --srtp-secure=N SRTP require secure SIP? 0:no, 1:tls, 1:sips (def:1)"); #endif puts (" --registrar=url Set the URL of registrar server"); @@ -1092,10 +1093,16 @@ static pj_status_t parse_args(int argc, char *argv[], #if defined(PJMEDIA_HAS_SRTP) && (PJMEDIA_HAS_SRTP != 0) case OPT_USE_SRTP: app_config.cfg.use_srtp = my_atoi(pj_optarg); - if (!pj_isdigit(*pj_optarg) || app_config.cfg.use_srtp > 2) { + if (!pj_isdigit(*pj_optarg) || app_config.cfg.use_srtp > 3) { PJ_LOG(1,(THIS_FILE, "Invalid value for --use-srtp option")); return -1; } + if ((int)app_config.cfg.use_srtp == 3) { + /* SRTP optional mode with duplicated media offer */ + app_config.cfg.use_srtp = PJMEDIA_SRTP_OPTIONAL; + app_config.cfg.srtp_optional_dup_offer = PJ_TRUE; + cur_acc->srtp_optional_dup_offer = PJ_TRUE; + } cur_acc->use_srtp = app_config.cfg.use_srtp; break; case OPT_SRTP_SECURE: @@ -1503,8 +1510,20 @@ static void write_account_settings(int acc_index, pj_str_t *result) #if defined(PJMEDIA_HAS_SRTP) && (PJMEDIA_HAS_SRTP != 0) /* SRTP */ if (acc_cfg->use_srtp) { - pj_ansi_sprintf(line, "--use-srtp %i\n", - (int)acc_cfg->use_srtp); + int use_srtp = (int)acc_cfg->use_srtp; + if (use_srtp == PJMEDIA_SRTP_OPTIONAL && + acc_cfg->srtp_optional_dup_offer) + { + use_srtp = 3; + } + pj_ansi_sprintf(line, "--use-srtp %i\n", use_srtp); + pj_strcat2(result, line); + } + if (acc_cfg->srtp_secure_signaling != + PJSUA_DEFAULT_SRTP_SECURE_SIGNALING) + { + pj_ansi_sprintf(line, "--srtp-secure %d\n", + acc_cfg->srtp_secure_signaling); pj_strcat2(result, line); } #endif @@ -1736,8 +1755,13 @@ static int write_settings(const struct app_config *config, /* SRTP */ #if PJMEDIA_HAS_SRTP if (app_config.cfg.use_srtp != PJSUA_DEFAULT_USE_SRTP) { - pj_ansi_sprintf(line, "--use-srtp %d\n", - app_config.cfg.use_srtp); + int use_srtp = (int)app_config.cfg.use_srtp; + if (use_srtp == PJMEDIA_SRTP_OPTIONAL && + app_config.cfg.srtp_optional_dup_offer) + { + use_srtp = 3; + } + pj_ansi_sprintf(line, "--use-srtp %d\n", use_srtp); pj_strcat2(&cfg, line); } if (app_config.cfg.srtp_secure_signaling != -- cgit v1.2.3