|
@@ -97,7 +97,7 @@ wait_header(Req, State=#state{socket=Socket,
|
|
|
Value::string()} | http_eoh, Req::#http_req{}, State::#state{}) -> ok.
|
|
|
header({http_header, _I, 'Host', _R, RawHost}, Req=#http_req{path=Path,
|
|
|
host=undefined}, State=#state{dispatch=Dispatch}) ->
|
|
|
- RawHost2 = string:to_lower(RawHost),
|
|
|
+ RawHost2 = string_to_lower(RawHost),
|
|
|
Host = cowboy_dispatcher:split_host(RawHost2),
|
|
|
%% @todo We probably want to filter the Host and Path here to allow
|
|
|
%% things like url rewriting.
|
|
@@ -220,7 +220,43 @@ connection_to_atom("keep-alive") ->
|
|
|
connection_to_atom("close") ->
|
|
|
close;
|
|
|
connection_to_atom(Connection) ->
|
|
|
- case string:to_lower(Connection) of
|
|
|
+ case string_to_lower(Connection) of
|
|
|
"close" -> close;
|
|
|
_Any -> keepalive
|
|
|
end.
|
|
|
+
|
|
|
+%% More efficient implementation of string:to_lower.
|
|
|
+%% We are excluding a few characters on purpose.
|
|
|
+-spec string_to_lower(string()) -> string().
|
|
|
+string_to_lower(L) ->
|
|
|
+ [char_to_lower(C) || C <- L].
|
|
|
+
|
|
|
+%% We gain noticeable speed by matching each value directly.
|
|
|
+-spec char_to_lower(char()) -> char().
|
|
|
+char_to_lower($A) -> $a;
|
|
|
+char_to_lower($B) -> $b;
|
|
|
+char_to_lower($C) -> $c;
|
|
|
+char_to_lower($D) -> $d;
|
|
|
+char_to_lower($E) -> $e;
|
|
|
+char_to_lower($F) -> $f;
|
|
|
+char_to_lower($G) -> $g;
|
|
|
+char_to_lower($H) -> $h;
|
|
|
+char_to_lower($I) -> $i;
|
|
|
+char_to_lower($J) -> $j;
|
|
|
+char_to_lower($K) -> $k;
|
|
|
+char_to_lower($L) -> $l;
|
|
|
+char_to_lower($M) -> $m;
|
|
|
+char_to_lower($N) -> $n;
|
|
|
+char_to_lower($O) -> $o;
|
|
|
+char_to_lower($P) -> $p;
|
|
|
+char_to_lower($Q) -> $q;
|
|
|
+char_to_lower($R) -> $r;
|
|
|
+char_to_lower($S) -> $s;
|
|
|
+char_to_lower($T) -> $t;
|
|
|
+char_to_lower($U) -> $u;
|
|
|
+char_to_lower($V) -> $v;
|
|
|
+char_to_lower($W) -> $w;
|
|
|
+char_to_lower($X) -> $x;
|
|
|
+char_to_lower($Y) -> $y;
|
|
|
+char_to_lower($Z) -> $z;
|
|
|
+char_to_lower(Ch) -> Ch.
|