[PATCH 5/6] cstp: Add X-AnyConnnect-* mobile headers on CONNECT request

Kevin Cernekee cernekee at gmail.com
Sun Feb 8 14:20:40 PST 2015


The AnyConnect mobile clients send these headers, and as it so happens,
ocserv uses them to detect whether to apply "mobile-idle-timeout" or
"idle-timeout" to the connection.  Currently ocserv applies "idle-timeout"
to all mobile and non-mobile openconnect clients because we aren't sending
the necessary headers.  This commit fixes that.

This only has an effect when "--os android" or "--os apple-ios" is used,
or if openconnect_set_mobile_info() is called.  The headers will not be
sent for traditional Linux/OSX/... clients.

Signed-off-by: Kevin Cernekee <cernekee at gmail.com>
---
 cstp.c | 31 +++++++++++++++++++------------
 1 file changed, 19 insertions(+), 12 deletions(-)

diff --git a/cstp.c b/cstp.c
index 9004370d813e..eed45f6fe4e6 100644
--- a/cstp.c
+++ b/cstp.c
@@ -157,6 +157,22 @@ static void append_compr_types(struct oc_text_buf *buf, const char *proto, int a
 	}
 }
 
+static void append_mobile_headers(struct openconnect_info *vpninfo, struct oc_text_buf *buf)
+{
+	if (vpninfo->mobile_platform_version) {
+		buf_append(buf, "X-AnyConnect-Identifier-ClientVersion: %s\r\n",
+			   openconnect_version_str);
+		buf_append(buf, "X-AnyConnect-Identifier-Platform: %s\r\n",
+			   vpninfo->platname);
+		buf_append(buf, "X-AnyConnect-Identifier-PlatformVersion: %s\r\n",
+			   vpninfo->mobile_platform_version);
+		buf_append(buf, "X-AnyConnect-Identifier-DeviceType: %s\r\n",
+			   vpninfo->mobile_device_type);
+		buf_append(buf, "X-AnyConnect-Identifier-Device-UniqueID: %s\r\n",
+			   vpninfo->mobile_device_uniqueid);
+	}
+}
+
 static int start_cstp_connection(struct openconnect_info *vpninfo)
 {
 	struct oc_text_buf *reqbuf;
@@ -196,6 +212,7 @@ static int start_cstp_connection(struct openconnect_info *vpninfo)
 	buf_append(reqbuf, "X-CSTP-Version: 1\r\n");
 	buf_append(reqbuf, "X-CSTP-Hostname: %s\r\n", vpninfo->localname);
 
+	append_mobile_headers(vpninfo, reqbuf);
 	append_compr_types(reqbuf, "CSTP", vpninfo->req_compr);
 
 	if (base_mtu)
@@ -1120,16 +1137,6 @@ void cstp_common_headers(struct openconnect_info *vpninfo, struct oc_text_buf *b
 		buf_append(buf, "X-AnyConnect-Platform: %s\r\n",
 			   vpninfo->platname);
 	}
-	if (vpninfo->mobile_platform_version) {
-		buf_append(buf, "X-AnyConnect-Identifier-ClientVersion: %s\r\n",
-			   openconnect_version_str);
-		buf_append(buf, "X-AnyConnect-Identifier-Platform: %s\r\n",
-			   vpninfo->platname);
-		buf_append(buf, "X-AnyConnect-Identifier-PlatformVersion: %s\r\n",
-			   vpninfo->mobile_platform_version);
-		buf_append(buf, "X-AnyConnect-Identifier-DeviceType: %s\r\n",
-			   vpninfo->mobile_device_type);
-		buf_append(buf, "X-AnyConnect-Identifier-Device-UniqueID: %s\r\n",
-			   vpninfo->mobile_device_uniqueid);
-	}
+
+	append_mobile_headers(vpninfo, buf);
 }
-- 
2.2.2




More information about the openconnect-devel mailing list