Ignore:
Timestamp:
Mar 30, 2012 7:10:13 AM (12 years ago)
Author:
bennylp
Message:

Re #1474: Merged all changes from 1.12 - HEAD (from the 1.x branch)

Location:
pjproject/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk

  • pjproject/trunk/pjsip-apps/src/pjsua/pjsua_app.c

    r3971 r3999  
    270270    puts  ("  --stun-srv=FORMAT   Set STUN server host or domain. This option may be"); 
    271271    puts  ("                      specified more than once. FORMAT is hostdom[:PORT]"); 
     272 
     273#if defined(PJSIP_HAS_TLS_TRANSPORT) && (PJSIP_HAS_TLS_TRANSPORT != 0) 
    272274    puts  (""); 
    273275    puts  ("TLS Options:"); 
     
    281283    puts  ("  --tls-neg-timeout   Specify TLS negotiation timeout (default=no)"); 
    282284    puts  ("  --tls-srv-name      Specify TLS server name for multihosting server"); 
     285    puts  ("  --tls-cipher        Specify prefered TLS cipher (optional)."); 
     286    puts  ("                      May be specified multiple times"); 
     287#endif 
    283288 
    284289    puts  (""); 
     
    561566           OPT_USE_TLS, OPT_TLS_CA_FILE, OPT_TLS_CERT_FILE, OPT_TLS_PRIV_FILE, 
    562567           OPT_TLS_PASSWORD, OPT_TLS_VERIFY_SERVER, OPT_TLS_VERIFY_CLIENT, 
    563            OPT_TLS_NEG_TIMEOUT, OPT_TLS_SRV_NAME, 
     568           OPT_TLS_NEG_TIMEOUT, OPT_TLS_CIPHER, 
    564569           OPT_CAPTURE_DEV, OPT_PLAYBACK_DEV, 
    565570           OPT_CAPTURE_LAT, OPT_PLAYBACK_LAT, OPT_NO_TONES, OPT_JB_MAX_SIZE, 
     
    663668        { "duration",   1, 0, OPT_DURATION}, 
    664669        { "thread-cnt", 1, 0, OPT_THREAD_CNT}, 
     670#if defined(PJSIP_HAS_TLS_TRANSPORT) && (PJSIP_HAS_TLS_TRANSPORT != 0) 
    665671        { "use-tls",    0, 0, OPT_USE_TLS},  
    666672        { "tls-ca-file",1, 0, OPT_TLS_CA_FILE}, 
     
    671677        { "tls-verify-client", 0, 0, OPT_TLS_VERIFY_CLIENT}, 
    672678        { "tls-neg-timeout", 1, 0, OPT_TLS_NEG_TIMEOUT}, 
    673         { "tls-srv-name", 1, 0, OPT_TLS_SRV_NAME}, 
     679        { "tls-cipher", 1, 0, OPT_TLS_CIPHER}, 
     680#endif 
    674681        { "capture-dev",    1, 0, OPT_CAPTURE_DEV}, 
    675682        { "playback-dev",   1, 0, OPT_PLAYBACK_DEV}, 
     
    13461353            break; 
    13471354 
     1355#if defined(PJSIP_HAS_TLS_TRANSPORT) && (PJSIP_HAS_TLS_TRANSPORT != 0) 
    13481356        case OPT_USE_TLS: 
    13491357            cfg->use_tls = PJ_TRUE; 
    1350 #if !defined(PJSIP_HAS_TLS_TRANSPORT) || PJSIP_HAS_TLS_TRANSPORT==0 
    1351             PJ_LOG(1,(THIS_FILE, "Error: TLS support is not configured")); 
    1352             return -1; 
    1353 #endif 
    13541358            break; 
    13551359             
    13561360        case OPT_TLS_CA_FILE: 
    13571361            cfg->udp_cfg.tls_setting.ca_list_file = pj_str(pj_optarg); 
    1358 #if !defined(PJSIP_HAS_TLS_TRANSPORT) || PJSIP_HAS_TLS_TRANSPORT==0 
    1359             PJ_LOG(1,(THIS_FILE, "Error: TLS support is not configured")); 
    1360             return -1; 
    1361 #endif 
    13621362            break; 
    13631363             
    13641364        case OPT_TLS_CERT_FILE: 
    13651365            cfg->udp_cfg.tls_setting.cert_file = pj_str(pj_optarg); 
    1366 #if !defined(PJSIP_HAS_TLS_TRANSPORT) || PJSIP_HAS_TLS_TRANSPORT==0 
    1367             PJ_LOG(1,(THIS_FILE, "Error: TLS support is not configured")); 
    1368             return -1; 
    1369 #endif 
    13701366            break; 
    13711367             
     
    13761372        case OPT_TLS_PASSWORD: 
    13771373            cfg->udp_cfg.tls_setting.password = pj_str(pj_optarg); 
    1378 #if !defined(PJSIP_HAS_TLS_TRANSPORT) || PJSIP_HAS_TLS_TRANSPORT==0 
    1379             PJ_LOG(1,(THIS_FILE, "Error: TLS support is not configured")); 
    1380             return -1; 
    1381 #endif 
    13821374            break; 
    13831375 
     
    13951387            break; 
    13961388 
    1397         case OPT_TLS_SRV_NAME: 
    1398             cfg->udp_cfg.tls_setting.server_name = pj_str(pj_optarg); 
    1399             break; 
     1389        case OPT_TLS_CIPHER: 
     1390            { 
     1391                pj_ssl_cipher cipher; 
     1392 
     1393                if (pj_ansi_strnicmp(pj_optarg, "0x", 2) == 0) { 
     1394                    pj_str_t cipher_st = pj_str(pj_optarg + 2); 
     1395                    cipher = pj_strtoul2(&cipher_st, NULL, 16); 
     1396                } else { 
     1397                    cipher = atoi(pj_optarg); 
     1398                } 
     1399 
     1400                if (pj_ssl_cipher_is_supported(cipher)) { 
     1401                    static pj_ssl_cipher tls_ciphers[128]; 
     1402 
     1403                    tls_ciphers[cfg->udp_cfg.tls_setting.ciphers_num++] = cipher; 
     1404                    cfg->udp_cfg.tls_setting.ciphers = tls_ciphers; 
     1405                } else { 
     1406                    pj_ssl_cipher ciphers[128]; 
     1407                    unsigned j, ciphers_cnt; 
     1408 
     1409                    ciphers_cnt = PJ_ARRAY_SIZE(ciphers); 
     1410                    pj_ssl_cipher_get_availables(ciphers, &ciphers_cnt); 
     1411                     
     1412                    PJ_LOG(1,(THIS_FILE, "Cipher \"%s\" is not supported by " 
     1413                                         "TLS/SSL backend.", pj_optarg)); 
     1414                    printf("Available TLS/SSL ciphers (%d):\n", ciphers_cnt); 
     1415                    for (j=0; j<ciphers_cnt; ++j) 
     1416                        printf("- 0x%06X: %s\n", ciphers[j], pj_ssl_cipher_name(ciphers[j])); 
     1417                    return -1; 
     1418                } 
     1419            } 
     1420            break; 
     1421#endif /* PJSIP_HAS_TLS_TRANSPORT */ 
    14001422 
    14011423        case OPT_CAPTURE_DEV: 
     
    18351857    } 
    18361858 
     1859#if defined(PJSIP_HAS_TLS_TRANSPORT) && (PJSIP_HAS_TLS_TRANSPORT != 0) 
    18371860    /* TLS */ 
    18381861    if (config->use_tls) 
     
    18641887    } 
    18651888 
    1866     if (config->udp_cfg.tls_setting.server_name.slen) { 
    1867         pj_ansi_sprintf(line, "--tls-srv-name %.*s\n", 
    1868                         (int)config->udp_cfg.tls_setting.server_name.slen,  
    1869                         config->udp_cfg.tls_setting.server_name.ptr); 
    1870         pj_strcat2(&cfg, line); 
    1871     } 
    1872  
    18731889    if (config->udp_cfg.tls_setting.verify_server) 
    18741890        pj_strcat2(&cfg, "--tls-verify-server\n"); 
     
    18821898        pj_strcat2(&cfg, line); 
    18831899    } 
     1900 
     1901    for (i=0; i<config->udp_cfg.tls_setting.ciphers_num; ++i) { 
     1902        pj_ansi_sprintf(line, "--tls-cipher 0x%06X # %s\n", 
     1903                        config->udp_cfg.tls_setting.ciphers[i], 
     1904                        pj_ssl_cipher_name(config->udp_cfg.tls_setting.ciphers[i])); 
     1905        pj_strcat2(&cfg, line); 
     1906    } 
     1907#endif 
    18841908 
    18851909    pj_strcat2(&cfg, "\n#\n# Media settings:\n#\n"); 
     
    32113235        const char *verif_msgs[32]; 
    32123236        unsigned verif_msg_cnt; 
     3237 
     3238        /* Dump server TLS cipher */ 
     3239        PJ_LOG(4,(THIS_FILE, "TLS cipher used: 0x%06X/%s", 
     3240                  ssl_sock_info->cipher, 
     3241                  pj_ssl_cipher_name(ssl_sock_info->cipher) )); 
    32133242 
    32143243        /* Dump server TLS certificate */ 
Note: See TracChangeset for help on using the changeset viewer.