diff --git a/cstp.c b/cstp.c index ba2f01a5..2f4799b4 100644 --- a/cstp.c +++ b/cstp.c @@ -576,7 +576,7 @@ static int start_cstp_connection(struct openconnect_info *vpninfo) } -int openconnect_make_cstp_connection(struct openconnect_info *vpninfo) +int cstp_connect(struct openconnect_info *vpninfo) { int ret; int deflate_bufsize = 0; diff --git a/library.c b/library.c index d885d75d..6fbfc4c0 100644 --- a/library.c +++ b/library.c @@ -92,6 +92,8 @@ struct openconnect_info *openconnect_vpninfo_new(const char *useragent, #endif vpninfo->proto.vpn_close_session = cstp_bye; + vpninfo->proto.tcp_connect = cstp_connect; + vpninfo->proto.tcp_mainloop = cstp_mainloop; #ifdef HAVE_DTLS vpninfo->proto.udp_setup = dtls_setup; vpninfo->proto.udp_mainloop = dtls_mainloop; @@ -122,6 +124,11 @@ int openconnect_setup_dtls(struct openconnect_info *vpninfo, return -EINVAL; } +int openconnect_make_cstp_connection(struct openconnect_info *vpninfo) +{ + return vpninfo->proto.tcp_connect(vpninfo); +} + int openconnect_set_reported_os(struct openconnect_info *vpninfo, const char *os) { diff --git a/mainloop.c b/mainloop.c index 43ccaff4..4f0a4ba7 100644 --- a/mainloop.c +++ b/mainloop.c @@ -145,7 +145,7 @@ int openconnect_mainloop(struct openconnect_info *vpninfo, did_work += ret; } - ret = cstp_mainloop(vpninfo, &timeout); + ret = vpninfo->proto.tcp_mainloop(vpninfo, &timeout); if (vpninfo->quit_reason) break; did_work += ret; diff --git a/openconnect-internal.h b/openconnect-internal.h index 807d0672..8b54b326 100644 --- a/openconnect-internal.h +++ b/openconnect-internal.h @@ -205,6 +205,11 @@ struct proxy_auth_state { struct vpn_proto { int (*vpn_close_session)(struct openconnect_info *vpninfo, const char *reason); + /* Establish the TCP connection (and obtain configuration) */ + int (*tcp_connect)(struct openconnect_info *vpninfo); + + int (*tcp_mainloop)(struct openconnect_info *vpninfo, int *timeout); + /* Set up the UDP (DTLS) connection. Doesn't actually *start* it. */ int (*udp_setup)(struct openconnect_info *vpninfo, int attempt_period); @@ -656,6 +661,7 @@ void dtls_close(struct openconnect_info *vpninfo); void dtls_shutdown(struct openconnect_info *vpninfo); /* cstp.c */ +int cstp_connect(struct openconnect_info *vpninfo); int cstp_mainloop(struct openconnect_info *vpninfo, int *timeout); int cstp_bye(struct openconnect_info *vpninfo, const char *reason); void cstp_free_splits(struct openconnect_info *vpninfo);