]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - cgi-bin/html.c
Merge changes from CUPS 1.4svn-r8252.
[thirdparty/cups.git] / cgi-bin / html.c
index e992458688db23e503d83ca1c2999a97482fc2f9..2db9bdd25344daaa07177dc9216e71cb6f1a117d 100644 (file)
@@ -3,7 +3,7 @@
  *
  *   HTML support functions for the Common UNIX Printing System (CUPS).
  *
- *   Copyright 2007-2008 by Apple Inc.
+ *   Copyright 2007-2009 by Apple Inc.
  *   Copyright 1997-2006 by Easy Software Products.
  *
  *   These coded instructions, statements, and computer programs are the
  *
  * Contents:
  *
- *   cgiEndHTML()        - End a HTML page.
- *   cgiEndMultipart()   - End the delivery of a multipart web page.
- *   cgiFormEncode()     - Encode a string as a form variable...
- *   cgiStartHTML()      - Start a HTML page.
- *   cgiStartMultipart() - Start a multipart delivery of a web page...
- *   cgi_null_passwd()   - Return a NULL password for authentication.
+ *   cgiEndHTML()           - End a HTML page.
+ *   cgiEndMultipart()      - End the delivery of a multipart web page.
+ *   cgiFormEncode()        - Encode a string as a form variable.
+ *   cgiStartHTML()         - Start a HTML page.
+ *   cgiStartMultipart()    - Start a multipart delivery of a web page.
+ *   cgiSupportsMultipart() - Does the browser support multi-part documents?
+ *   cgi_null_passwd()      - Return a NULL password for authentication.
  */
 
 /*
@@ -72,7 +73,7 @@ cgiEndMultipart(void)
 
 
 /*
- * 'cgiFormEncode()' - Encode a string as a form variable...
+ * 'cgiFormEncode()' - Encode a string as a form variable.
  */
 
 char *                                 /* O - Destination string */
@@ -183,7 +184,7 @@ cgiStartHTML(const char *title)             /* I - Title of page */
 
 
 /*
- * 'cgiStartMultipart()' - Start a multipart delivery of a web page...
+ * 'cgiStartMultipart()' - Start a multipart delivery of a web page.
  */
 
 void
@@ -195,6 +196,41 @@ cgiStartMultipart(void)
 }
 
 
+/*
+ * 'cgiSupportsMultipart()' - Does the browser support multi-part documents?
+ */
+
+int                                    /* O - 1 if multi-part supported, 0 otherwise */
+cgiSupportsMultipart(void)
+{
+  const char   *user_agent;            /* User-Agent string */
+  static int   supports_multipart = -1;/* Cached value */
+
+
+  if (supports_multipart < 0)
+  {
+   /*
+    * CUPS STR #3049: Apparently some browsers don't support multi-part
+    * documents, which makes them useless for many web sites.  Rather than
+    * abandoning those users, we'll offer a degraded single-part mode...
+    *
+    * Currently we know that anything based on Gecko, MSIE, and Safari all
+    * work.  We'll add more as they are reported/tested.
+    */
+
+    if ((user_agent = getenv("HTTP_USER_AGENT")) != NULL &&
+        (strstr(user_agent, " Gecko/") != NULL ||
+        strstr(user_agent, " MSIE ") != NULL ||
+        strstr(user_agent, " Safari/") != NULL))
+      supports_multipart = 1;
+    else
+      supports_multipart = 0;
+  }
+
+  return (supports_multipart);
+}
+
+
 /*
  * 'cgi_null_passwd()' - Return a NULL password for authentication.
  */