]> granicus.if.org Git - apache/commitdiff
Add logic to read the Upgrade header and use it in the response.
authorJean-Frederic Clere <jfclere@apache.org>
Tue, 11 Jul 2017 11:41:44 +0000 (11:41 +0000)
committerJean-Frederic Clere <jfclere@apache.org>
Tue, 11 Jul 2017 11:41:44 +0000 (11:41 +0000)
Use we you are proxying to a server that has multiple upgrade on the same IP/Port.
PR 61142

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1801594 13f79535-47bb-0310-9956-ffa450edef68

docs/manual/mod/mod_proxy_wstunnel.xml
modules/proxy/mod_proxy_wstunnel.c

index 41afed05487cb174f99322eb95f2ec7686506cbb..111adfc81ef0e2a4670fd3e8134f9f41071b0f5d 100644 (file)
@@ -55,7 +55,9 @@ ProxyPass "/wss2/" "wss://echo.websocket.org/"
 <p>In fact the module can be used to upgrade to other protocols, you can set the <code>upgrade</code>
 parameter in the <directive type="ProxyPass" module="mod_proxy">ProxyPass</directive>
 directive to allow the module to accept other protocol.
-NONE means you bypass the check for the header but still upgrade to WebSocket.</p>
+NONE means you bypass the check for the header but still upgrade to WebSocket.
+ANY means that <code>Upgrade</code> will read in the request headers and use
+in the response <code>Upgrade</code></p>
 </summary>
 
 <seealso><module>mod_proxy</module></seealso>
index 8c0e06c19583a598f749669c32cd9914d4d43a6c..5819ad65b987dcb324c939e4daca28c4c8f4226b 100644 (file)
@@ -329,6 +329,10 @@ static int proxy_wstunnel_request(apr_pool_t *p, request_rec *r,
 
     if (ap_cstr_casecmp(upgrade_method, "NONE") == 0) {
         buf = apr_pstrdup(p, "Upgrade: WebSocket" CRLF "Connection: Upgrade" CRLF CRLF);
+    } else if (ap_cstr_casecmp(upgrade_method, "ANY") == 0) {
+        const char *upgrade;
+        upgrade = apr_table_get(r->headers_in, "Upgrade");
+        buf = apr_pstrcat(p, "Upgrade: ", upgrade, CRLF "Connection: Upgrade" CRLF CRLF, NULL);
     } else {
         buf = apr_pstrcat(p, "Upgrade: ", upgrade_method, CRLF "Connection: Upgrade" CRLF CRLF, NULL);
     }
@@ -473,7 +477,8 @@ static int proxy_wstunnel_handler(request_rec *r, proxy_worker *worker,
     if (ap_cstr_casecmp(upgrade_method, "NONE") != 0) {
         const char *upgrade;
         upgrade = apr_table_get(r->headers_in, "Upgrade");
-        if (!upgrade || ap_cstr_casecmp(upgrade, upgrade_method) != 0) {
+        if (!upgrade || (ap_cstr_casecmp(upgrade, upgrade_method) != 0 &&
+            ap_cstr_casecmp(upgrade_method, "ANY") !=0)) {
             ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(02900)
                           "declining URL %s  (not %s, Upgrade: header is %s)", 
                           url, upgrade_method, upgrade ? upgrade : "missing");