[PATCH/RFC V2 10/26] dtls: Export setup_dtls() function

Kevin Cernekee cernekee at gmail.com
Sun Aug 11 21:49:11 EDT 2013


This is an optional call; the default is "no DTLS."

Signed-off-by: Kevin Cernekee <cernekee at gmail.com>
---
 dtls.c                 |    8 ++++++--
 libopenconnect.map.in  |    1 +
 library.c              |    1 -
 main.c                 |    5 +++--
 openconnect-internal.h |    1 -
 openconnect.h          |    3 +++
 6 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/dtls.c b/dtls.c
index 47e97d9..e08b2bf 100644
--- a/dtls.c
+++ b/dtls.c
@@ -615,11 +615,15 @@ static int dtls_restart(struct openconnect_info *vpninfo)
 }
 
 
-int setup_dtls(struct openconnect_info *vpninfo)
+int openconnect_setup_dtls(struct openconnect_info *vpninfo, int dtls_attempt_period)
 {
 	struct vpn_option *dtls_opt = vpninfo->dtls_options;
 	int dtls_port = 0;
 
+	vpninfo->dtls_attempt_period = dtls_attempt_period;
+	if (!dtls_attempt_period)
+		return 0;
+
 #if defined(OPENCONNECT_GNUTLS) && defined(DTLS_OPENSSL)
 	/* If we're using GnuTLS for authentication but OpenSSL for DTLS,
 	   we'll need to initialise OpenSSL now... */
@@ -874,7 +878,7 @@ int dtls_mainloop(struct openconnect_info *vpninfo, int *timeout)
 }
 #else /* !HAVE_DTLS */
 #warning Your SSL library does not seem to support Cisco DTLS compatibility
-int setup_dtls(struct openconnect_info *vpninfo)
+int openconnect_setup_dtls(struct openconnect_info *vpninfo, int dtls_attempt_period)
 {
 	vpn_progress(vpninfo, PRG_ERR,
 		     _("Built against SSL library with no Cisco DTLS support\n"));
diff --git a/libopenconnect.map.in b/libopenconnect.map.in
index 72dbd84..f941e8f 100644
--- a/libopenconnect.map.in
+++ b/libopenconnect.map.in
@@ -50,6 +50,7 @@ OPENCONNECT_2.3 {
 	openconnect_setup_tun_device;
 	openconnect_setup_tun_script;
 	openconnect_setup_tun_fd;
+	openconnect_setup_dtls;
 } OPENCONNECT_2.2;
 
 OPENCONNECT_PRIVATE {
diff --git a/library.c b/library.c
index 726e4dd..869f3d7 100644
--- a/library.c
+++ b/library.c
@@ -57,7 +57,6 @@ struct openconnect_info *openconnect_vpninfo_new(char *useragent,
 	vpninfo->cancel_fd = vpninfo->cancel_fd_write = -1;
 	vpninfo->cert_expire_warning = 60 * 86400;
 	vpninfo->deflate = 1;
-	vpninfo->dtls_attempt_period = 60;
 	vpninfo->max_qlen = 10;
 	vpninfo->reconnect_interval = RECONNECT_INTERVAL_MIN;
 	vpninfo->reconnect_timeout = 300;
diff --git a/main.c b/main.c
index faf0448..f3bd972 100644
--- a/main.c
+++ b/main.c
@@ -491,6 +491,7 @@ int main(int argc, char **argv)
 	uid_t uid = getuid();
 	int opt;
 	char *pidfile = NULL;
+	int use_dtls = 1;
 	FILE *fp = NULL;
 	char *config_arg;
 	char *token_str = NULL;
@@ -552,7 +553,7 @@ int main(int argc, char **argv)
 			vpninfo->servercert = keep_config_arg();
 			break;
 		case OPT_NO_DTLS:
-			vpninfo->dtls_attempt_period = 0;
+			use_dtls = 0;
 			break;
 		case OPT_COOKIEONLY:
 			cookieonly = 1;
@@ -900,7 +901,7 @@ int main(int argc, char **argv)
 		}
 	}
 
-	if (vpninfo->dtls_attempt_period && setup_dtls(vpninfo))
+	if (use_dtls && openconnect_setup_dtls(vpninfo, 60))
 		fprintf(stderr, _("Set up DTLS failed; using SSL instead\n"));
 
 	vpn_progress(vpninfo, PRG_INFO,
diff --git a/openconnect-internal.h b/openconnect-internal.h
index 226cd72..b731f0d 100644
--- a/openconnect-internal.h
+++ b/openconnect-internal.h
@@ -402,7 +402,6 @@ int script_config_tun(struct openconnect_info *vpninfo, const char *reason);
 
 /* dtls.c */
 unsigned char unhex(const char *data);
-int setup_dtls(struct openconnect_info *vpninfo);
 int dtls_mainloop(struct openconnect_info *vpninfo, int *timeout);
 int dtls_try_handshake(struct openconnect_info *vpninfo);
 int connect_dtls_socket(struct openconnect_info *vpninfo);
diff --git a/openconnect.h b/openconnect.h
index 5641656..1f9e0c5 100644
--- a/openconnect.h
+++ b/openconnect.h
@@ -234,6 +234,9 @@ int openconnect_setup_tun_script(struct openconnect_info *vpninfo, char *tun_scr
 /* Caller will provide a file descriptor for the tunnel traffic. */
 int openconnect_setup_tun_fd(struct openconnect_info *vpninfo, int tun_fd);
 
+/* Optional call to enable DTLS on the connection. */
+int openconnect_setup_dtls(struct openconnect_info *vpninfo, int dtls_attempt_period);
+
 /* Start the main loop; exits if data is received on cancel_fd or the remote
    site aborts. */
 int openconnect_mainloop(struct openconnect_info *vpninfo);
-- 
1.7.9.5




More information about the openconnect-devel mailing list