Ignore:
Timestamp:
May 24, 2019 3:32:17 AM (4 years ago)
Author:
riza
Message:

Close #1017: TURN TLS transport implementation.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip-apps/src/pjsua/pjsua_app_config.c

    r5788 r6004  
    197197    puts  ("                      0=SDES (default), 1=DTLS"); 
    198198#endif 
    199  
     199#if PJ_HAS_SSL_SOCK 
     200    puts  (""); 
     201    puts  ("TURN TLS Options:"); 
     202    puts  ("  --turn-tls          Use TLS connection to TURN server (default no)"); 
     203    puts  ("  --turn-tls-ca-file  Specify TURN TLS CA file (default=none)"); 
     204    puts  ("  --turn-tls-cert-file  Specify TURN TLS certificate file (default=none)"); 
     205    puts  ("  --turn-tls-privkey-file  Specify TURN TLS private key file (default=none)"); 
     206    puts  ("  --turn-tls-privkey-pwd Specify TURN TLS password to private key file (default=none)"); 
     207    puts  ("  --turn-tls-neg-timeout Specify TURN TLS negotiation timeout (default=no)"); 
     208    puts  ("  --turn-tls-cipher   Specify prefered TURN TLS cipher (optional)."); 
     209    puts  ("                      May be specified multiple times"); 
     210#endif 
    200211    puts  (""); 
    201212    puts  ("Buddy List (can be more than one):"); 
     
    361372           OPT_USE_ICE, OPT_ICE_REGULAR, OPT_USE_SRTP, OPT_SRTP_SECURE, 
    362373           OPT_USE_TURN, OPT_ICE_MAX_HOSTS, OPT_ICE_NO_RTCP, OPT_TURN_SRV, 
    363            OPT_TURN_TCP, OPT_TURN_USER, OPT_TURN_PASSWD, OPT_RTCP_MUX, 
    364            OPT_SRTP_KEYING, 
     374           OPT_TURN_TCP, OPT_TURN_USER, OPT_TURN_PASSWD, OPT_TURN_TLS,  
     375           OPT_TURN_TLS_CA_FILE, OPT_TURN_TLS_CERT_FILE,  
     376           OPT_TURN_TLS_NEG_TIMEOUT, OPT_TURN_TLS_CIPHER, 
     377           OPT_TURN_TLS_PRIV_FILE, OPT_TURN_TLS_PASSWORD, 
     378           OPT_RTCP_MUX, OPT_SRTP_KEYING, 
    365379           OPT_PLAY_FILE, OPT_PLAY_TONE, OPT_RTP_PORT, OPT_ADD_CODEC, 
    366380           OPT_ILBC_MODE, OPT_REC_FILE, OPT_AUTO_REC, 
     
    453467        { "turn-srv",   1, 0, OPT_TURN_SRV}, 
    454468        { "turn-tcp",   0, 0, OPT_TURN_TCP}, 
     469#if PJ_HAS_SSL_SOCK 
     470        { "turn-tls",   0, 0, OPT_TURN_TLS}, 
     471        { "turn-tls-ca-file",1, 0, OPT_TURN_TLS_CA_FILE}, 
     472        { "turn-tls-cert-file",1,0, OPT_TURN_TLS_CERT_FILE}, 
     473        { "turn-tls-privkey-file",1,0, OPT_TURN_TLS_PRIV_FILE}, 
     474        { "turn-tls-privkey-pwd",1,0, OPT_TURN_TLS_PASSWORD}, 
     475        { "turn-tls-neg-timeout", 1, 0, OPT_TURN_TLS_NEG_TIMEOUT}, 
     476        { "turn-tls-cipher", 1, 0, OPT_TURN_TLS_CIPHER}, 
     477#endif 
    455478        { "turn-user",  1, 0, OPT_TURN_USER}, 
    456479        { "turn-passwd",1, 0, OPT_TURN_PASSWD}, 
     
    10091032            break; 
    10101033 
     1034#if PJ_HAS_SSL_SOCK 
     1035        case OPT_TURN_TLS: 
     1036            cfg->media_cfg.turn_conn_type = 
     1037                    cur_acc->turn_cfg.turn_conn_type = PJ_TURN_TP_TLS; 
     1038            break; 
     1039        case OPT_TURN_TLS_CA_FILE: 
     1040            cfg->media_cfg.turn_tls_setting.ca_list_file = 
     1041                cur_acc->turn_cfg.turn_tls_setting.ca_list_file = 
     1042                    pj_str(pj_optarg); 
     1043            break; 
     1044 
     1045        case OPT_TURN_TLS_CERT_FILE: 
     1046            cfg->media_cfg.turn_tls_setting.cert_file = 
     1047                cur_acc->turn_cfg.turn_tls_setting.cert_file = 
     1048                    pj_str(pj_optarg); 
     1049            break; 
     1050 
     1051        case OPT_TURN_TLS_PRIV_FILE: 
     1052            cfg->media_cfg.turn_tls_setting.privkey_file = 
     1053                cur_acc->turn_cfg.turn_tls_setting.privkey_file = 
     1054                    pj_str(pj_optarg); 
     1055            break; 
     1056 
     1057        case OPT_TURN_TLS_PASSWORD: 
     1058            cfg->media_cfg.turn_tls_setting.password = 
     1059                cur_acc->turn_cfg.turn_tls_setting.password = 
     1060                    pj_str(pj_optarg); 
     1061            break; 
     1062 
     1063        case OPT_TURN_TLS_NEG_TIMEOUT: 
     1064            cfg->media_cfg.turn_tls_setting.ssock_param.timeout.sec = 
     1065                cur_acc->turn_cfg.turn_tls_setting.ssock_param.timeout.sec = 
     1066                    atoi(pj_optarg); 
     1067            break; 
     1068 
     1069        case OPT_TURN_TLS_CIPHER: 
     1070            { 
     1071                pj_ssl_cipher cipher; 
     1072 
     1073                if (pj_ansi_strnicmp(pj_optarg, "0x", 2) == 0) { 
     1074                    pj_str_t cipher_st = pj_str(pj_optarg + 2); 
     1075                    cipher = pj_strtoul2(&cipher_st, NULL, 16); 
     1076                } else { 
     1077                    cipher = atoi(pj_optarg); 
     1078                } 
     1079 
     1080                if (pj_ssl_cipher_is_supported(cipher)) { 
     1081                    static pj_ssl_cipher tls_ciphers[PJ_SSL_SOCK_MAX_CIPHERS]; 
     1082                    pj_ssl_sock_param *ssock_param = 
     1083                                  &cfg->media_cfg.turn_tls_setting.ssock_param; 
     1084 
     1085                    tls_ciphers[ssock_param->ciphers_num++] = cipher; 
     1086                    ssock_param->ciphers = 
     1087                       cur_acc->turn_cfg.turn_tls_setting.ssock_param.ciphers = 
     1088                            tls_ciphers; 
     1089                } else { 
     1090                    pj_ssl_cipher ciphers[PJ_SSL_SOCK_MAX_CIPHERS]; 
     1091                    unsigned j, ciphers_cnt; 
     1092 
     1093                    ciphers_cnt = PJ_ARRAY_SIZE(ciphers); 
     1094                    pj_ssl_cipher_get_availables(ciphers, &ciphers_cnt); 
     1095 
     1096                    PJ_LOG(1,(THIS_FILE, "Cipher \"%s\" is not supported by " 
     1097                                         "TLS/SSL backend.", pj_optarg)); 
     1098                    printf("Available TLS/SSL ciphers (%d):\n", ciphers_cnt); 
     1099                    for (j=0; j<ciphers_cnt; ++j) 
     1100                        printf("- 0x%06X: %s\n", ciphers[j],  
     1101                               pj_ssl_cipher_name(ciphers[j])); 
     1102                    return -1; 
     1103                } 
     1104            } 
     1105            break; 
     1106#endif 
     1107 
    10111108        case OPT_TURN_USER: 
    10121109            cfg->media_cfg.turn_auth_cred.type = 
Note: See TracChangeset for help on using the changeset viewer.