From b8fbde4253511f13ba91b5072e30794544e63ca4 Mon Sep 17 00:00:00 2001 From: Kevin Cernekee Date: Sat, 27 Oct 2012 21:14:07 -0700 Subject: [PATCH] http: Record the last redirection type The AnyConnect client uses the redirection type (new host, or just a new URL on the same host) to figure out whether to use XML POST or the old urlencoded scheme. Preserve this information for future use. Signed-off-by: Kevin Cernekee --- http.c | 5 +++++ openconnect-internal.h | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/http.c b/http.c index def8b9dd..50816b8e 100644 --- a/http.c +++ b/http.c @@ -706,6 +706,8 @@ static void clear_cookies(struct openconnect_info *vpninfo) */ static int handle_redirect(struct openconnect_info *vpninfo) { + vpninfo->redirect_type = REDIR_TYPE_LOCAL; + if (!strncmp(vpninfo->redirect_url, "https://", 8)) { /* New host. Tear down the existing connection and make a new one */ char *host; @@ -735,6 +737,7 @@ static int handle_redirect(struct openconnect_info *vpninfo) vpninfo->peer_addr = NULL; openconnect_close_https(vpninfo, 0); clear_cookies(vpninfo); + vpninfo->redirect_type = REDIR_TYPE_NEWHOST; } else free(host); @@ -805,6 +808,8 @@ static int do_https_request(struct openconnect_info *vpninfo, const char *method int result, buflen; retry: + vpninfo->redirect_type = REDIR_TYPE_NONE; + if (*form_buf) { free(*form_buf); *form_buf = NULL; diff --git a/openconnect-internal.h b/openconnect-internal.h index f1a3fb63..4b4c4550 100644 --- a/openconnect-internal.h +++ b/openconnect-internal.h @@ -129,8 +129,13 @@ struct pin_cache { #define CERT_TYPE_PKCS12 2 #define CERT_TYPE_TPM 3 +#define REDIR_TYPE_NONE 0 +#define REDIR_TYPE_NEWHOST 1 +#define REDIR_TYPE_LOCAL 2 + struct openconnect_info { char *redirect_url; + int redirect_type; const char *csd_xmltag; const char *platname;