Ticket #552: Added TLS server name extension to support connecting to multi-hosted SIP TLS server (thanks Klaus Darilion for the suggestion)

git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@2094 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/pjsip-apps/src/pjsua/pjsua_app.c b/pjsip-apps/src/pjsua/pjsua_app.c
index 96bdb25..2a21a24 100644
--- a/pjsip-apps/src/pjsua/pjsua_app.c
+++ b/pjsip-apps/src/pjsua/pjsua_app.c
@@ -206,6 +206,7 @@
     puts  ("  --tls-verify-server Verify server's certificate (default=no)");
     puts  ("  --tls-verify-client Verify client's certificate (default=no)");
     puts  ("  --tls-neg-timeout   Specify TLS negotiation timeout (default=no)");
+    puts  ("  --tls-srv-name      Specify TLS server name for multi-hosting server (optional)");
 
     puts  ("");
     puts  ("Media Options:");
@@ -460,7 +461,7 @@
 	   OPT_NOREFERSUB,
 	   OPT_USE_TLS, OPT_TLS_CA_FILE, OPT_TLS_CERT_FILE, OPT_TLS_PRIV_FILE,
 	   OPT_TLS_PASSWORD, OPT_TLS_VERIFY_SERVER, OPT_TLS_VERIFY_CLIENT,
-	   OPT_TLS_NEG_TIMEOUT,
+	   OPT_TLS_NEG_TIMEOUT, OPT_TLS_SRV_NAME,
 	   OPT_CAPTURE_DEV, OPT_PLAYBACK_DEV,
 	   OPT_CAPTURE_LAT, OPT_PLAYBACK_LAT, OPT_NO_TONES,
 	   OPT_STDOUT_REFRESH, OPT_STDOUT_REFRESH_TEXT,
@@ -551,6 +552,7 @@
 	{ "tls-verify-server", 0, 0, OPT_TLS_VERIFY_SERVER},
 	{ "tls-verify-client", 0, 0, OPT_TLS_VERIFY_CLIENT},
 	{ "tls-neg-timeout", 1, 0, OPT_TLS_NEG_TIMEOUT},
+	{ "tls-srv-name", 1, 0, OPT_TLS_SRV_NAME},
 	{ "capture-dev",    1, 0, OPT_CAPTURE_DEV},
 	{ "playback-dev",   1, 0, OPT_PLAYBACK_DEV},
 	{ "capture-lat",    1, 0, OPT_CAPTURE_LAT},
@@ -1136,6 +1138,10 @@
 	    cfg->udp_cfg.tls_setting.timeout.sec = atoi(pj_optarg);
 	    break;
 
+	case OPT_TLS_SRV_NAME:
+	    cfg->udp_cfg.tls_setting.server_name = pj_str(pj_optarg);
+	    break;
+
 	case OPT_CAPTURE_DEV:
 	    cfg->capture_dev = atoi(pj_optarg);
 	    break;
@@ -1471,6 +1477,13 @@
 	pj_strcat2(&cfg, line);
     }
 
+    if (config->udp_cfg.tls_setting.server_name.slen) {
+	pj_ansi_sprintf(line, "--tls-srv-name %.*s\n",
+			(int)config->udp_cfg.tls_setting.server_name.slen, 
+			config->udp_cfg.tls_setting.server_name.ptr);
+	pj_strcat2(&cfg, line);
+    }
+
     if (config->udp_cfg.tls_setting.verify_server)
 	pj_strcat2(&cfg, "--tls-verify-server\n");