Skip to content

Commit

Permalink
Add openconnect_set_protocol() API
Browse files Browse the repository at this point in the history
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
  • Loading branch information
David Woodhouse authored and David Woodhouse committed Feb 24, 2015
1 parent 92c22a0 commit d68987a
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 27 deletions.
2 changes: 1 addition & 1 deletion libopenconnect.map.in
Expand Up @@ -69,14 +69,14 @@ OPENCONNECT_5_1 {

OPENCONNECT_5_2 {
global:
openconnect_set_protocol;
openconnect_set_http_auth;
} OPENCONNECT_5_1;

OPENCONNECT_PRIVATE {
global: @SYMVER_TIME@ @SYMVER_GETLINE@ @SYMVER_JAVA@ @SYMVER_ASPRINTF@ @SYMVER_VASPRINTF@ @SYMVER_WIN32_STRERROR@
openconnect_fopen_utf8;
openconnect_open_utf8;
openconnect_set_juniper;
openconnect_sha1;
openconnect_version_str;
local:
Expand Down
58 changes: 34 additions & 24 deletions library.c
Expand Up @@ -94,19 +94,7 @@ struct openconnect_info *openconnect_vpninfo_new(const char *useragent,
#ifdef ENABLE_NLS
bindtextdomain("openconnect", LOCALEDIR);
#endif
vpninfo->proto.vpn_close_session = cstp_bye;
vpninfo->proto.tcp_connect = cstp_connect;
vpninfo->proto.tcp_mainloop = cstp_mainloop;
vpninfo->proto.add_http_headers = cstp_common_headers;
vpninfo->proto.obtain_cookie = cstp_obtain_cookie;
#ifdef HAVE_DTLS
vpninfo->proto.udp_setup = dtls_setup;
vpninfo->proto.udp_mainloop = dtls_mainloop;
vpninfo->proto.udp_close = dtls_close;
vpninfo->proto.udp_shutdown = dtls_shutdown;
#else
vpninfo->dtls_state = DTLS_DISABLED;
#endif
openconnect_set_protocol(vpninfo, "anyconnect");
return vpninfo;

err:
Expand All @@ -116,21 +104,43 @@ struct openconnect_info *openconnect_vpninfo_new(const char *useragent,
return NULL;
}

void openconnect_set_juniper(struct openconnect_info *vpninfo)
int openconnect_set_protocol(struct openconnect_info *vpninfo, const char *protocol)
{
vpninfo->proto.vpn_close_session = NULL;
vpninfo->proto.tcp_connect = oncp_connect;
vpninfo->proto.tcp_mainloop = oncp_mainloop;
vpninfo->proto.add_http_headers = oncp_common_headers;
vpninfo->proto.obtain_cookie = oncp_obtain_cookie;
if (!strcmp(protocol, "anyconnect")) {
vpninfo->proto.vpn_close_session = cstp_bye;
vpninfo->proto.tcp_connect = cstp_connect;
vpninfo->proto.tcp_mainloop = cstp_mainloop;
vpninfo->proto.add_http_headers = cstp_common_headers;
vpninfo->proto.obtain_cookie = cstp_obtain_cookie;
#ifdef HAVE_DTLS
vpninfo->proto.udp_setup = dtls_setup;
vpninfo->proto.udp_mainloop = dtls_mainloop;
vpninfo->proto.udp_close = dtls_close;
vpninfo->proto.udp_shutdown = dtls_shutdown;
#else
vpninfo->dtls_state = DTLS_DISABLED;
#endif
} else if (!strcmp(protocol, "nc")) {
vpninfo->proto.vpn_close_session = NULL;
vpninfo->proto.tcp_connect = oncp_connect;
vpninfo->proto.tcp_mainloop = oncp_mainloop;
vpninfo->proto.add_http_headers = oncp_common_headers;
vpninfo->proto.obtain_cookie = oncp_obtain_cookie;
#if defined(ESP_GNUTLS) || defined(ESP_OPENSSL)
vpninfo->proto.udp_setup = esp_setup;
vpninfo->proto.udp_mainloop = esp_mainloop;
vpninfo->proto.udp_close = esp_close;
vpninfo->proto.udp_shutdown = esp_shutdown;
vpninfo->proto.udp_setup = esp_setup;
vpninfo->proto.udp_mainloop = esp_mainloop;
vpninfo->proto.udp_close = esp_close;
vpninfo->proto.udp_shutdown = esp_shutdown;
#else
vpninfo->dtls_state = DTLS_DISABLED;
vpninfo->dtls_state = DTLS_DISABLED;
#endif
} else {
vpn_progress(vpninfo, PRG_ERR,
_("Unknown VPN protocol '%s'\n"), protocol);
return -EINVAL;
}

return 0;
}

void openconnect_set_loglevel(struct openconnect_info *vpninfo,
Expand Down
4 changes: 3 additions & 1 deletion main.c
Expand Up @@ -1035,7 +1035,9 @@ int main(int argc, char **argv)
break;
}
case OPT_JUNIPER:
openconnect_set_juniper(vpninfo);
fprintf(stderr, "WARNING: Juniper Network Connect support is experimental.\n");
fprintf(stderr, "It will probably be superseded by Junos Pulse support.\n");
openconnect_set_protocol(vpninfo, "nc");
break;
case OPT_CSD_USER: {
char *strend;
Expand Down
4 changes: 3 additions & 1 deletion openconnect.h
Expand Up @@ -33,7 +33,7 @@

/*
* API version 5.2:
* - Add openconnect_set_http_auth().
* - Add openconnect_set_http_auth(), openconnect_set_protocol().
*
* API version 5.1:
* - Add openconnect_set_compression_mode(), openconnect_set_loglevel()
Expand Down Expand Up @@ -573,4 +573,6 @@ int openconnect_has_oath_support(void);
int openconnect_has_yubioath_support(void);
int openconnect_has_system_key_support(void);

int openconnect_set_protocol(struct openconnect_info *vpninfo, const char *protocol);

#endif /* __OPENCONNECT_H__ */

0 comments on commit d68987a

Please sign in to comment.