Ignore:
Timestamp:
Dec 25, 2006 6:43:59 AM (17 years ago)
Author:
bennylp
Message:

Major TLS work (ticket #3): asynchronous socket, rather complete TLS options, and pjsua integration. The TLS support should work in both client and server mode.

File:
1 edited

Legend:

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

    r849 r861  
    139139    puts  ("  --use-stun1=host[:port]"); 
    140140    puts  ("  --use-stun2=host[:port]  Resolve local IP with the specified STUN servers"); 
    141 #if defined(PJSIP_HAS_TLS_TRANSPORT) && PJSIP_HAS_TLS_TRANSPORT!=0 
     141    puts  (""); 
     142    puts  ("TLS Options:"); 
    142143    puts  ("  --use-tls           Enable TLS transport"); 
    143     puts  ("  --tls-ca-file       Specify TLS CA file"); 
    144     puts  ("  --tls-key-file      Specify TLS client key file"); 
    145     puts  ("  --tls-password      Specify TLS password"); 
    146 #endif 
     144    puts  ("  --tls-ca-file       Specify TLS CA file (default=none)"); 
     145    puts  ("  --tls-cert-file     Specify TLS certificate file (default=none)"); 
     146    puts  ("  --tls-privkey-file  Specify TLS private key file (default=none)"); 
     147    puts  ("  --tls-password      Specify TLS password to private key file (default=none)"); 
     148    puts  ("  --tls-verify-server Verify server's certificate (default=no)"); 
     149    puts  ("  --tls-verify-client Verify client's certificate (default=no)"); 
     150    puts  ("  --tls-neg-timeout   Specify TLS negotiation timeout (default=no)"); 
     151 
    147152    puts  (""); 
    148153    puts  ("Media Options:"); 
     
    307312           OPT_DURATION, OPT_NO_TCP, OPT_NO_UDP, OPT_THREAD_CNT, 
    308313           OPT_NOREFERSUB, 
    309            OPT_USE_TLS, OPT_TLS_CA_FILE, OPT_TLS_KEY_FILE, OPT_TLS_PASSWORD, 
     314           OPT_USE_TLS, OPT_TLS_CA_FILE, OPT_TLS_CERT_FILE, OPT_TLS_PRIV_FILE, 
     315           OPT_TLS_PASSWORD, OPT_TLS_VERIFY_SERVER, OPT_TLS_VERIFY_CLIENT, 
     316           OPT_TLS_NEG_TIMEOUT, 
    310317    }; 
    311318    struct pj_getopt_option long_options[] = { 
     
    364371        { "use-tls",    0, 0, OPT_USE_TLS},  
    365372        { "tls-ca-file",1, 0, OPT_TLS_CA_FILE}, 
    366         { "tls-key-file",1,0, OPT_TLS_KEY_FILE},  
     373        { "tls-cert-file",1,0, OPT_TLS_CERT_FILE},  
     374        { "tls-privkey-file",1,0, OPT_TLS_PRIV_FILE}, 
    367375        { "tls-password",1,0, OPT_TLS_PASSWORD}, 
     376        { "tls-verify-server", 0, 0, OPT_TLS_VERIFY_SERVER}, 
     377        { "tls-verify-client", 0, 0, OPT_TLS_VERIFY_CLIENT}, 
     378        { "tls-neg-timeout", 1, 0, OPT_TLS_NEG_TIMEOUT}, 
    368379        { NULL, 0, 0, 0} 
    369380    }; 
     
    789800        case OPT_USE_TLS: 
    790801            cfg->use_tls = PJ_TRUE; 
     802#if !defined(PJSIP_HAS_TLS_TRANSPORT) || PJSIP_HAS_TLS_TRANSPORT==0 
     803            PJ_LOG(1,(THIS_FILE, "Error: TLS support is not configured")); 
     804            return -1; 
     805#endif 
    791806            break; 
    792807             
    793808        case OPT_TLS_CA_FILE: 
    794             cfg->udp_cfg.tls_ca_file = pj_str(pj_optarg); 
     809            cfg->udp_cfg.tls_setting.ca_list_file = pj_str(pj_optarg); 
     810#if !defined(PJSIP_HAS_TLS_TRANSPORT) || PJSIP_HAS_TLS_TRANSPORT==0 
     811            PJ_LOG(1,(THIS_FILE, "Error: TLS support is not configured")); 
     812            return -1; 
     813#endif 
    795814            break; 
    796815             
    797         case OPT_TLS_KEY_FILE: 
    798             cfg->udp_cfg.tls_key_file = pj_str(pj_optarg); 
     816        case OPT_TLS_CERT_FILE: 
     817            cfg->udp_cfg.tls_setting.cert_file = pj_str(pj_optarg); 
     818#if !defined(PJSIP_HAS_TLS_TRANSPORT) || PJSIP_HAS_TLS_TRANSPORT==0 
     819            PJ_LOG(1,(THIS_FILE, "Error: TLS support is not configured")); 
     820            return -1; 
     821#endif 
    799822            break; 
    800823             
     824        case OPT_TLS_PRIV_FILE: 
     825            cfg->udp_cfg.tls_setting.privkey_file = pj_str(pj_optarg); 
     826            break; 
     827 
    801828        case OPT_TLS_PASSWORD: 
    802             cfg->udp_cfg.tls_password = pj_str(pj_optarg); 
     829            cfg->udp_cfg.tls_setting.password = pj_str(pj_optarg); 
     830#if !defined(PJSIP_HAS_TLS_TRANSPORT) || PJSIP_HAS_TLS_TRANSPORT==0 
     831            PJ_LOG(1,(THIS_FILE, "Error: TLS support is not configured")); 
     832            return -1; 
     833#endif 
     834            break; 
     835 
     836        case OPT_TLS_VERIFY_SERVER: 
     837            cfg->udp_cfg.tls_setting.verify_server = PJ_TRUE; 
     838            break; 
     839 
     840        case OPT_TLS_VERIFY_CLIENT: 
     841            cfg->udp_cfg.tls_setting.verify_client = PJ_TRUE; 
     842            break; 
     843 
     844        case OPT_TLS_NEG_TIMEOUT: 
     845            cfg->udp_cfg.tls_setting.timeout.sec = atoi(pj_optarg); 
    803846            break; 
    804847 
     
    10341077    if (config->use_tls) 
    10351078        pj_strcat2(&cfg, "--use-tls\n"); 
    1036     if (config->udp_cfg.tls_ca_file.slen) { 
     1079    if (config->udp_cfg.tls_setting.ca_list_file.slen) { 
    10371080        pj_ansi_sprintf(line, "--tls-ca-file %.*s\n", 
    1038                         (int)config->udp_cfg.tls_ca_file.slen,  
    1039                         config->udp_cfg.tls_ca_file.ptr); 
     1081                        (int)config->udp_cfg.tls_setting.ca_list_file.slen,  
     1082                        config->udp_cfg.tls_setting.ca_list_file.ptr); 
    10401083        pj_strcat2(&cfg, line); 
    10411084    } 
    1042     if (config->udp_cfg.tls_key_file.slen) { 
    1043         pj_ansi_sprintf(line, "--tls-key-file %.*s\n", 
    1044                         (int)config->udp_cfg.tls_key_file.slen,  
    1045                         config->udp_cfg.tls_key_file.ptr); 
     1085    if (config->udp_cfg.tls_setting.cert_file.slen) { 
     1086        pj_ansi_sprintf(line, "--tls-cert-file %.*s\n", 
     1087                        (int)config->udp_cfg.tls_setting.cert_file.slen,  
     1088                        config->udp_cfg.tls_setting.cert_file.ptr); 
    10461089        pj_strcat2(&cfg, line); 
    10471090    } 
    1048     if (config->udp_cfg.tls_password.slen) { 
     1091    if (config->udp_cfg.tls_setting.privkey_file.slen) { 
     1092        pj_ansi_sprintf(line, "--tls-privkey-file %.*s\n", 
     1093                        (int)config->udp_cfg.tls_setting.privkey_file.slen,  
     1094                        config->udp_cfg.tls_setting.privkey_file.ptr); 
     1095        pj_strcat2(&cfg, line); 
     1096    } 
     1097 
     1098    if (config->udp_cfg.tls_setting.password.slen) { 
    10491099        pj_ansi_sprintf(line, "--tls-password %.*s\n", 
    1050                         (int)config->udp_cfg.tls_password.slen,  
    1051                         config->udp_cfg.tls_password.ptr); 
     1100                        (int)config->udp_cfg.tls_setting.password.slen,  
     1101                        config->udp_cfg.tls_setting.password.ptr); 
     1102        pj_strcat2(&cfg, line); 
     1103    } 
     1104 
     1105    if (config->udp_cfg.tls_setting.verify_server) 
     1106        pj_strcat2(&cfg, "--tls-verify-server\n"); 
     1107 
     1108    if (config->udp_cfg.tls_setting.verify_client) 
     1109        pj_strcat2(&cfg, "--tls-verify-client\n"); 
     1110 
     1111    if (config->udp_cfg.tls_setting.timeout.sec) { 
     1112        pj_ansi_sprintf(line, "--tls-neg-timeout %d\n", 
     1113                        config->udp_cfg.tls_setting.timeout.sec); 
    10521114        pj_strcat2(&cfg, line); 
    10531115    } 
     
    28302892    /* Add TLS transport when application wants one */ 
    28312893    if (app_config.use_tls) { 
     2894 
     2895        pjsua_acc_id acc_id; 
     2896 
     2897        /* Set TLS port as TCP port+1 */ 
     2898        app_config.udp_cfg.port++; 
    28322899        status = pjsua_transport_create(PJSIP_TRANSPORT_TLS, 
    28332900                                        &app_config.udp_cfg,  
    28342901                                        &transport_id); 
     2902        app_config.udp_cfg.port--; 
    28352903        if (status != PJ_SUCCESS) 
    28362904            goto on_error; 
     2905         
     2906        /* Add local account */ 
     2907        pjsua_acc_add_local(transport_id, PJ_FALSE, &acc_id); 
     2908        pjsua_acc_set_online_status(acc_id, PJ_TRUE); 
    28372909    } 
    28382910#endif 
Note: See TracChangeset for help on using the changeset viewer.