With this patch the BusyBox httpd pass the "Accept:" and "Accept-Language:" header by the environment variables to the CGI-Script, so this can make Content Negotiation to deliver the page in the language, which was selected by the user in the browser settings, and/or serve the XHTML page with the right MIME-Type application/xhtml+xml to user agents which support it und text/html which don't.

Signed-off-by: Alina Friedrichsen <[EMAIL PROTECTED]>

Index: package/busybox/patches/450-httpd_accept_header.patch
===================================================================
--- package/busybox/patches/450-httpd_accept_header.patch    (Revision 0)
+++ package/busybox/patches/450-httpd_accept_header.patch    (Revision 0)
@@ -0,0 +1,42 @@
+--- a/networking/httpd.c
++++ b/networking/httpd.c
+@@ -255,6 +255,8 @@
+     USE_FEATURE_HTTPD_BASIC_AUTH(char *remoteuser;)
+     USE_FEATURE_HTTPD_CGI(char *referer;)
+     USE_FEATURE_HTTPD_CGI(char *user_agent;)
++    USE_FEATURE_HTTPD_CGI(char *http_accept;)
++    USE_FEATURE_HTTPD_CGI(char *http_accept_language;)
+
+     off_t file_size;        /* -1 - unknown */
+ #if ENABLE_FEATURE_HTTPD_RANGES
+@@ -302,6 +304,8 @@
+ #define remoteuser        (G.remoteuser       )
+ #define referer           (G.referer          )
+ #define user_agent        (G.user_agent       )
++#define http_accept       (G.http_accept      )
++#define http_accept_language (G.http_accept_language)
+ #define file_size         (G.file_size        )
+ #if ENABLE_FEATURE_HTTPD_RANGES
+ #define range_start       (G.range_start      )
+@@ -1383,6 +1387,10 @@
+         }
+     }
+     setenv1("HTTP_USER_AGENT", user_agent);
++    if (http_accept)
++        setenv1("HTTP_ACCEPT", http_accept);
++    if (http_accept_language)
++        setenv1("HTTP_ACCEPT_LANGUAGE", http_accept_language);
+     if (post_len)
+         putenv(xasprintf("CONTENT_LENGTH=%d", post_len));
+     if (cookie)
+@@ -2009,6 +2017,10 @@
+ referer = xstrdup(skip_whitespace(iobuf + sizeof("Referer:")-1));
+             } else if (STRNCASECMP(iobuf, "User-Agent:") == 0) {
+ user_agent = xstrdup(skip_whitespace(iobuf + sizeof("User-Agent:")-1));
++            } else if (STRNCASECMP(iobuf, "Accept:") == 0) {
++ http_accept = xstrdup(skip_whitespace(iobuf + sizeof("Accept:")-1));
++            } else if (STRNCASECMP(iobuf, "Accept-Language:") == 0) {
++ http_accept_language = xstrdup(skip_whitespace(iobuf + sizeof("Accept-Language:")-1));
+             }
+ #endif
+ #if ENABLE_FEATURE_HTTPD_BASIC_AUTH
Index: package/busybox/patches/450-httpd_accept_header.patch
===================================================================
--- package/busybox/patches/450-httpd_accept_header.patch	(Revision 0)
+++ package/busybox/patches/450-httpd_accept_header.patch	(Revision 0)
@@ -0,0 +1,42 @@
+--- a/networking/httpd.c
++++ b/networking/httpd.c
+@@ -255,6 +255,8 @@
+ 	USE_FEATURE_HTTPD_BASIC_AUTH(char *remoteuser;)
+ 	USE_FEATURE_HTTPD_CGI(char *referer;)
+ 	USE_FEATURE_HTTPD_CGI(char *user_agent;)
++	USE_FEATURE_HTTPD_CGI(char *http_accept;)
++	USE_FEATURE_HTTPD_CGI(char *http_accept_language;)
+ 
+ 	off_t file_size;        /* -1 - unknown */
+ #if ENABLE_FEATURE_HTTPD_RANGES
+@@ -302,6 +304,8 @@
+ #define remoteuser        (G.remoteuser       )
+ #define referer           (G.referer          )
+ #define user_agent        (G.user_agent       )
++#define http_accept       (G.http_accept      )
++#define http_accept_language (G.http_accept_language)
+ #define file_size         (G.file_size        )
+ #if ENABLE_FEATURE_HTTPD_RANGES
+ #define range_start       (G.range_start      )
+@@ -1383,6 +1387,10 @@
+ 		}
+ 	}
+ 	setenv1("HTTP_USER_AGENT", user_agent);
++	if (http_accept)
++		setenv1("HTTP_ACCEPT", http_accept);
++	if (http_accept_language)
++		setenv1("HTTP_ACCEPT_LANGUAGE", http_accept_language);
+ 	if (post_len)
+ 		putenv(xasprintf("CONTENT_LENGTH=%d", post_len));
+ 	if (cookie)
+@@ -2009,6 +2017,10 @@
+ 				referer = xstrdup(skip_whitespace(iobuf + sizeof("Referer:")-1));
+ 			} else if (STRNCASECMP(iobuf, "User-Agent:") == 0) {
+ 				user_agent = xstrdup(skip_whitespace(iobuf + sizeof("User-Agent:")-1));
++			} else if (STRNCASECMP(iobuf, "Accept:") == 0) {
++				http_accept = xstrdup(skip_whitespace(iobuf + sizeof("Accept:")-1));
++			} else if (STRNCASECMP(iobuf, "Accept-Language:") == 0) {
++				http_accept_language = xstrdup(skip_whitespace(iobuf + sizeof("Accept-Language:")-1));
+ 			}
+ #endif
+ #if ENABLE_FEATURE_HTTPD_BASIC_AUTH
Index: networking/httpd.c
===================================================================
--- networking/httpd.c	(Revision 23199)
+++ networking/httpd.c	(Arbeitskopie)
@@ -253,6 +253,8 @@
 	USE_FEATURE_HTTPD_BASIC_AUTH(char *remoteuser;)
 	USE_FEATURE_HTTPD_CGI(char *referer;)
 	USE_FEATURE_HTTPD_CGI(char *user_agent;)
+	USE_FEATURE_HTTPD_CGI(char *http_accept;)
+	USE_FEATURE_HTTPD_CGI(char *http_accept_language;)
 
 	off_t file_size;        /* -1 - unknown */
 #if ENABLE_FEATURE_HTTPD_RANGES
@@ -298,6 +300,8 @@
 #define remoteuser        (G.remoteuser       )
 #define referer           (G.referer          )
 #define user_agent        (G.user_agent       )
+#define http_accept       (G.http_accept      )
+#define http_accept_language (G.http_accept_language)
 #define file_size         (G.file_size        )
 #if ENABLE_FEATURE_HTTPD_RANGES
 #define range_start       (G.range_start      )
@@ -1376,6 +1380,10 @@
 		}
 	}
 	setenv1("HTTP_USER_AGENT", user_agent);
+	if (http_accept)
+		setenv1("HTTP_ACCEPT", http_accept);
+	if (http_accept_language)
+		setenv1("HTTP_ACCEPT_LANGUAGE", http_accept_language);
 	if (post_len)
 		putenv(xasprintf("CONTENT_LENGTH=%d", post_len));
 	if (cookie)
@@ -1997,6 +2005,10 @@
 				referer = xstrdup(skip_whitespace(iobuf + sizeof("Referer:")-1));
 			} else if (STRNCASECMP(iobuf, "User-Agent:") == 0) {
 				user_agent = xstrdup(skip_whitespace(iobuf + sizeof("User-Agent:")-1));
+			} else if (STRNCASECMP(iobuf, "Accept:") == 0) {
+				http_accept = xstrdup(skip_whitespace(iobuf + sizeof("Accept:")-1));
+			} else if (STRNCASECMP(iobuf, "Accept-Language:") == 0) {
+				http_accept_language = xstrdup(skip_whitespace(iobuf + sizeof("Accept-Language:")-1));
 			}
 #endif
 #if ENABLE_FEATURE_HTTPD_BASIC_AUTH
_______________________________________________
openwrt-devel mailing list
[email protected]
http://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to