summaryrefslogtreecommitdiff
path: root/pjsip-apps
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2006-12-08 21:58:31 +0000
committerBenny Prijono <bennylp@teluu.com>2006-12-08 21:58:31 +0000
commite1f1e702acaed16de56fb5d19fad61a1de83e070 (patch)
tree052eee4c64444b8e68f994eb4ac6b5c82692ba17 /pjsip-apps
parentec5923a4081a5014ee7242e5ef91b2af8394aceb (diff)
Initial implementation of TLS transport for ticket #3 (still not working at all)
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@849 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip-apps')
-rw-r--r--pjsip-apps/src/pjsua/pjsua_app.c61
1 files changed, 60 insertions, 1 deletions
diff --git a/pjsip-apps/src/pjsua/pjsua_app.c b/pjsip-apps/src/pjsua/pjsua_app.c
index 81a6e5cb..a3156e38 100644
--- a/pjsip-apps/src/pjsua/pjsua_app.c
+++ b/pjsip-apps/src/pjsua/pjsua_app.c
@@ -40,6 +40,7 @@ static struct app_config
pj_bool_t no_refersub;
pj_bool_t no_tcp;
pj_bool_t no_udp;
+ pj_bool_t use_tls;
pjsua_transport_config udp_cfg;
pjsua_transport_config rtp_cfg;
@@ -137,6 +138,12 @@ static void usage(void)
puts (" May be specified multiple times");
puts (" --use-stun1=host[:port]");
puts (" --use-stun2=host[:port] Resolve local IP with the specified STUN servers");
+#if defined(PJSIP_HAS_TLS_TRANSPORT) && PJSIP_HAS_TLS_TRANSPORT!=0
+ puts (" --use-tls Enable TLS transport");
+ puts (" --tls-ca-file Specify TLS CA file");
+ puts (" --tls-key-file Specify TLS client key file");
+ puts (" --tls-password Specify TLS password");
+#endif
puts ("");
puts ("Media Options:");
puts (" --add-codec=name Manually add codec (default is to enable all)");
@@ -299,6 +306,7 @@ static pj_status_t parse_args(int argc, char *argv[],
OPT_NEXT_ACCOUNT, OPT_NEXT_CRED, OPT_MAX_CALLS,
OPT_DURATION, OPT_NO_TCP, OPT_NO_UDP, OPT_THREAD_CNT,
OPT_NOREFERSUB,
+ OPT_USE_TLS, OPT_TLS_CA_FILE, OPT_TLS_KEY_FILE, OPT_TLS_PASSWORD,
};
struct pj_getopt_option long_options[] = {
{ "config-file",1, 0, OPT_CONFIG_FILE},
@@ -353,6 +361,10 @@ static pj_status_t parse_args(int argc, char *argv[],
{ "max-calls", 1, 0, OPT_MAX_CALLS},
{ "duration", 1, 0, OPT_DURATION},
{ "thread-cnt", 1, 0, OPT_THREAD_CNT},
+ { "use-tls", 0, 0, OPT_USE_TLS},
+ { "tls-ca-file",1, 0, OPT_TLS_CA_FILE},
+ { "tls-key-file",1,0, OPT_TLS_KEY_FILE},
+ { "tls-password",1,0, OPT_TLS_PASSWORD},
{ NULL, 0, 0, 0}
};
pj_status_t status;
@@ -774,6 +786,22 @@ static pj_status_t parse_args(int argc, char *argv[],
}
break;
+ case OPT_USE_TLS:
+ cfg->use_tls = PJ_TRUE;
+ break;
+
+ case OPT_TLS_CA_FILE:
+ cfg->udp_cfg.tls_ca_file = pj_str(pj_optarg);
+ break;
+
+ case OPT_TLS_KEY_FILE:
+ cfg->udp_cfg.tls_key_file = pj_str(pj_optarg);
+ break;
+
+ case OPT_TLS_PASSWORD:
+ cfg->udp_cfg.tls_password = pj_str(pj_optarg);
+ break;
+
default:
PJ_LOG(1,(THIS_FILE,
"Argument \"%s\" is not valid. Use --help to see help",
@@ -1002,6 +1030,27 @@ static int write_settings(const struct app_config *config,
pj_strcat2(&cfg, line);
}
+ /* TLS */
+ if (config->use_tls)
+ pj_strcat2(&cfg, "--use-tls\n");
+ if (config->udp_cfg.tls_ca_file.slen) {
+ pj_ansi_sprintf(line, "--tls-ca-file %.*s\n",
+ (int)config->udp_cfg.tls_ca_file.slen,
+ config->udp_cfg.tls_ca_file.ptr);
+ pj_strcat2(&cfg, line);
+ }
+ if (config->udp_cfg.tls_key_file.slen) {
+ pj_ansi_sprintf(line, "--tls-key-file %.*s\n",
+ (int)config->udp_cfg.tls_key_file.slen,
+ config->udp_cfg.tls_key_file.ptr);
+ pj_strcat2(&cfg, line);
+ }
+ if (config->udp_cfg.tls_password.slen) {
+ pj_ansi_sprintf(line, "--tls-password %.*s\n",
+ (int)config->udp_cfg.tls_password.slen,
+ config->udp_cfg.tls_password.ptr);
+ pj_strcat2(&cfg, line);
+ }
pj_strcat2(&cfg, "\n#\n# Media settings:\n#\n");
@@ -2764,7 +2813,6 @@ pj_status_t app_init(int argc, char *argv[])
}
-
/* Add UDP transport unless it's disabled. */
if (!app_config.no_udp) {
status = pjsua_transport_create(PJSIP_TRANSPORT_UDP,
@@ -2778,6 +2826,17 @@ pj_status_t app_init(int argc, char *argv[])
pjsua_acc_set_online_status(current_acc, PJ_TRUE);
}
+#if defined(PJSIP_HAS_TLS_TRANSPORT) && PJSIP_HAS_TLS_TRANSPORT!=0
+ /* Add TLS transport when application wants one */
+ if (app_config.use_tls) {
+ status = pjsua_transport_create(PJSIP_TRANSPORT_TLS,
+ &app_config.udp_cfg,
+ &transport_id);
+ if (status != PJ_SUCCESS)
+ goto on_error;
+ }
+#endif
+
if (transport_id == -1) {
PJ_LOG(3,(THIS_FILE, "Error: no transport is configured"));
status = -1;