commit 70b1126a710fd0fff9cc9c63ba81645e2ac21eae
parent ee7bf0c1b8e86154a30baa94a90c05f21d3d9f58
Author: Christoph Lohmann <20h@r-36.net>
Date:   Wed, 19 Apr 2017 21:10:23 +0200
Allow custom http headers to be specified.
Diffstat:
2 files changed, 35 insertions(+), 7 deletions(-)
diff --git a/config.def.h b/config.def.h
@@ -37,6 +37,12 @@ static Bool loadimages            = TRUE;
 static Bool hidebackground        = FALSE;
 static Bool allowgeolocation      = TRUE;
 
+/* custom http headers */
+static HttpHeader customheaders[] = {
+	/* key			value */
+	{ "DNT",		"1" },
+};
+
 #define PROMPT_GOTO  "Go To"
 #define PROMPT_FIND  "Find"
 #define PROMPT_SLASH "/"
diff --git a/surf.c b/surf.c
@@ -66,6 +66,11 @@ typedef struct Client {
 } Client;
 
 typedef struct {
+	char *key;
+	char *value;
+} HttpHeader;
+
+typedef struct {
 	guint mod;
 	guint keyval;
 	void (*func)(Client *c, const Arg *arg);
@@ -243,6 +248,8 @@ beforerequest(WebKitWebView *w, WebKitWebFrame *f, WebKitWebResource *r,
               WebKitNetworkRequest *req, WebKitNetworkResponse *resp,
               Client *c)
 {
+	SoupMessage *msg;
+	SoupMessageHeaders *hdrs;
 	const gchar *uri = webkit_network_request_get_uri(req);
 	int i, isascii = 1;
 
@@ -250,12 +257,12 @@ beforerequest(WebKitWebView *w, WebKitWebFrame *f, WebKitWebResource *r,
 		webkit_network_request_set_uri(req, "about:blank");
 
 	if (!g_str_has_prefix(uri, "http://")
-	    && !g_str_has_prefix(uri, "https://")
-	    && !g_str_has_prefix(uri, "about:")
-	    && !g_str_has_prefix(uri, "file://")
-	    && !g_str_has_prefix(uri, "data:")
-	    && !g_str_has_prefix(uri, "blob:")
-	    && strlen(uri) > 0) {
+			&& !g_str_has_prefix(uri, "https://")
+			&& !g_str_has_prefix(uri, "about:")
+			&& !g_str_has_prefix(uri, "file://")
+			&& !g_str_has_prefix(uri, "data:")
+			&& !g_str_has_prefix(uri, "blob:")
+			&& strlen(uri) > 0) {
 		for (i = 0; i < strlen(uri); i++) {
 			if (!g_ascii_isprint(uri[i])) {
 				isascii = 0;
@@ -264,6 +271,21 @@ beforerequest(WebKitWebView *w, WebKitWebFrame *f, WebKitWebResource *r,
 		}
 		if (isascii)
 			handleplumb(c, w, uri);
+
+		return;
+	}
+	if (g_str_has_prefix(uri, "http://")
+			|| g_str_has_prefix(uri, "https://")) {
+		msg = webkit_network_request_get_message(req);
+		g_object_get(G_OBJECT(msg), "request-headers", &hdrs,
+				NULL);
+		if (hdrs != NULL) {
+			for (i = 0; i < LENGTH(customheaders); i++) {
+				soup_message_headers_replace(hdrs,
+						customheaders[i].key,
+						customheaders[i].value);
+			}
+		}
 	}
 }
 
@@ -882,6 +904,7 @@ loaduri(Client *c, const Arg *arg)
 
 	setatom(c, AtomUri, uri);
 
+
 	/* prevents endless loop */
 	if (strcmp(u, geturi(c)) == 0) {
 		reload(c, &a);
@@ -1399,7 +1422,6 @@ setup(void)
 
 	/* ssl */
 	tlsdb = g_tls_file_database_new(cafile, &error);
-
 	if (error) {
 		g_warning("Error loading SSL database %s: %s", cafile,
 		          error->message);