Skip to content

Commit

Permalink
Merge pull request #489 from rschmukler/rs/websocket-upgrade-fix
Browse files Browse the repository at this point in the history
Fix websocket multi-value connection upgrades
  • Loading branch information
weavejester authored Dec 7, 2023
2 parents 3a736c0 + a24d724 commit 5b44065
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 3 deletions.
8 changes: 5 additions & 3 deletions ring-core/src/ring/websocket.clj
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,11 @@
(defn upgrade-request?
"Returns true if the request map is a websocket upgrade request."
[request]
(let [headers (:headers request)]
(and (.equalsIgnoreCase "upgrade" (get headers "connection"))
(.equalsIgnoreCase "websocket" (get headers "upgrade")))))
(let [{{:strs [connection upgrade]} :headers} request]
(and upgrade
connection
(re-find #"\b(?i)upgrade\b" connection)
(.equalsIgnoreCase "websocket" upgrade))))

(defn websocket-response?
"Returns true if the response contains a websocket listener."
Expand Down
8 changes: 8 additions & 0 deletions ring-core/test/ring/test/websocket.clj
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,14 @@
[ring.websocket :as ws]
[ring.websocket.protocols :as wsp]))


(deftest test-upgrade-request?
(is (not (ws/upgrade-request? {})))
(is (ws/upgrade-request? {:headers {"connection" "Upgrade"
"upgrade" "websocket"}}))
(is (ws/upgrade-request? {:headers {"connection" "keep-alive, Upgrade"
"upgrade" "websocket"}})))

(deftest test-request-protocols
(is (empty? (ws/request-protocols {:headers {}})))
(is (= ["mqtt"]
Expand Down

0 comments on commit 5b44065

Please sign in to comment.