[PATCH 16/24] http: Record the last redirection type

Kevin Cernekee cernekee at gmail.com
Sat Nov 3 13:22:58 EDT 2012


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 <cernekee at gmail.com>
---
 http.c                 |    5 +++++
 openconnect-internal.h |    5 +++++
 2 files changed, 10 insertions(+)

diff --git a/http.c b/http.c
index def8b9d..50816b8 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 f1a3fb6..4b4c455 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;
-- 
1.7.10.4




More information about the openconnect-devel mailing list