From 65c7018046eb556085ca47a28c980ec901980643 Mon Sep 17 00:00:00 2001 From: Jason N Date: Sat, 24 Jan 2015 16:08:09 +1100 Subject: [PATCH] fix(headers): make Protocol search websocket unicase RFC6455 requires the Upgrade Protocol to search case-insensitively for "websocket" Other protocol values may be case-sensitive, however, so ProtocolExt is still case-sensitive --- src/header/common/upgrade.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/header/common/upgrade.rs b/src/header/common/upgrade.rs index b3f03f83..6e304a70 100644 --- a/src/header/common/upgrade.rs +++ b/src/header/common/upgrade.rs @@ -2,6 +2,7 @@ use header::{Header, HeaderFormat}; use std::fmt; use std::str::FromStr; use header::parsing::{from_comma_delimited, fmt_comma_delimited}; +use unicase::UniCase; use self::Protocol::{WebSocket, ProtocolExt}; @@ -22,9 +23,11 @@ pub enum Protocol { impl FromStr for Protocol { fn from_str(s: &str) -> Option { - match s { - "websocket" => Some(WebSocket), - s => Some(ProtocolExt(s.to_string())) + if UniCase(s) == UniCase("websocket") { + Some(WebSocket) + } + else { + Some(ProtocolExt(s.to_string())) } } }