static int dtls_reconnect(struct openconnect_info *vpninfo)
{
dtls_close(vpninfo);
+
+ if (vpninfo->dtls_state == DTLS_DISABLED)
+ return -EINVAL;
+
vpninfo->dtls_state = DTLS_SLEEPING;
return connect_dtls_socket(vpninfo);
}
unmonitor_except_fd(vpninfo, dtls);
vpninfo->dtls_fd = -1;
}
- vpninfo->dtls_state = DTLS_SLEEPING;
+ if (vpninfo->dtls_state > DTLS_DISABLED)
+ vpninfo->dtls_state = DTLS_SLEEPING;
}
void esp_shutdown(struct openconnect_info *vpninfo)
STRDUP(vpninfo->vpnc_script, vpnc_script);
if (vpninfo->dtls_state != DTLS_DISABLED &&
- openconnect_setup_dtls(vpninfo, 60))
+ openconnect_setup_dtls(vpninfo, 60)) {
+ /* Disable DTLS if we cannot set it up, otherwise
+ * reconnects end up in infinite loop trying to connect
+ * to non existing DTLS */
+ vpninfo->dtls_state = DTLS_DISABLED;
fprintf(stderr, _("Set up DTLS failed; using SSL instead\n"));
+ }
openconnect_get_ip_info(vpninfo, &ip_info, NULL, NULL);