Created
January 21, 2013 23:47
-
-
Save kellymclaughlin/4590669 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/rebar.config b/rebar.config | |
index dc5bd68..b475012 100644 | |
--- a/rebar.config | |
+++ b/rebar.config | |
@@ -4,6 +4,6 @@ | |
{edoc_opts, [{preprocess, true}]}. | |
{deps, [ | |
- {mochiweb, "1.5.1", {git, "git://github.com/basho/mochiweb", | |
- {tag, "1.5.1-riak-1.0.x-fixes"}}} | |
+ {mochiweb, "1.5.1p3", {git, "git://github.com/basho/mochiweb", | |
+ {tag, "1.5.1p3"}}} | |
]}. | |
diff --git a/src/webmachine_decision_core.erl b/src/webmachine_decision_core.erl | |
index 0989110..80df469 100644 | |
--- a/src/webmachine_decision_core.erl | |
+++ b/src/webmachine_decision_core.erl | |
@@ -633,6 +633,8 @@ encode_body(Body) -> | |
case Body of | |
{stream, StreamBody} -> | |
{stream, make_encoder_stream(Encoder, Charsetter, StreamBody)}; | |
+ {known_length_stream, Size, StreamBody} -> | |
+ {known_length_stream, Size, make_encoder_stream(Encoder, Charsetter, StreamBody)}; | |
{stream, Size, Fun} -> | |
{stream, Size, make_size_encoder_stream(Encoder, Charsetter, Fun)}; | |
{writer, BodyFun} -> | |
diff --git a/src/webmachine_request.erl b/src/webmachine_request.erl | |
index 6365fb9..53aeb89 100644 | |
--- a/src/webmachine_request.erl | |
+++ b/src/webmachine_request.erl | |
@@ -279,6 +279,12 @@ send_stream_body(Socket, {Data, Next}, SoFar) -> | |
Size = send_chunk(Socket, Data), | |
send_stream_body(Socket, Next(), Size + SoFar). | |
+send_stream_body_no_chunk(Socket, {Data, done}) -> | |
+ send(Socket, Data); | |
+send_stream_body_no_chunk(Socket, {Data, Next}) -> | |
+ send(Socket, Data), | |
+ send_stream_body_no_chunk(Socket, Next()). | |
+ | |
send_writer_body(Socket, {Encoder, Charsetter, BodyFun}) -> | |
put(bytes_written, 0), | |
Writer = fun(Data) -> | |
@@ -326,6 +332,7 @@ send_response(Code, PassedState=#wm_reqstate{reqdata=RD}) -> | |
Body0 = wrq:resp_body(RD), | |
{Body,Length} = case Body0 of | |
{stream, StreamBody} -> {{stream, StreamBody}, chunked}; | |
+ {known_length_stream, Size, StreamBody} -> {{known_length_stream, StreamBody}, Size}; | |
{stream, Size, Fun} -> {{stream, Fun(0, Size-1)}, chunked}; | |
{writer, WriteBody} -> {{writer, WriteBody}, chunked}; | |
_ -> {Body0, iolist_size([Body0])} | |
@@ -340,6 +347,9 @@ send_response(Code, PassedState=#wm_reqstate{reqdata=RD}) -> | |
case Body of | |
{stream, Body2} -> | |
send_stream_body(PassedState#wm_reqstate.socket, Body2); | |
+ {known_length_stream, Body2} -> | |
+ send_stream_body_no_chunk(PassedState#wm_reqstate.socket, Body2), | |
+ Length; | |
{writer, Body2} -> | |
send_writer_body(PassedState#wm_reqstate.socket, Body2); | |
_ -> | |
diff --git a/src/webmachine_util.erl b/src/webmachine_util.erl | |
index 39de15c..26749db 100644 | |
--- a/src/webmachine_util.erl | |
+++ b/src/webmachine_util.erl | |
@@ -36,7 +36,7 @@ | |
-endif. | |
convert_request_date(Date) -> | |
- try | |
+ try | |
case httpd_util:convert_request_date(Date) of | |
ReqDate -> ReqDate | |
end | |
@@ -174,7 +174,7 @@ media_params_match(Req,Prov) -> | |
prioritize_media(TyParam) -> | |
{Type, Params} = TyParam, | |
- prioritize_media(Type,Params,[]). | |
+ prioritize_media(Type,Params,[]). | |
prioritize_media(Type,Params,Acc) -> | |
case Params of | |
[] -> | |
@@ -188,7 +188,7 @@ prioritize_media(Type,Params,Acc) -> | |
1; | |
[$.|_] -> | |
%% handle strange FeedBurner Accept | |
- list_to_float([$0|Val]); | |
+ list_to_float([$0|Val]); | |
_ -> list_to_float(Val) | |
end, | |
{QVal, Type, Rest ++ Acc}; | |
@@ -290,7 +290,7 @@ do_choose(Default, DefaultOkay, AnyOkay, Choices, [AccPair|AccRest]) -> | |
% doing this a little more work than needed in | |
% order to be easily insensitive but preserving | |
case lists:member(LAcc, LChoices) of | |
- true -> | |
+ true -> | |
hd([X || X <- Choices, | |
string:to_lower(X) =:= LAcc]); | |
false -> do_choose(Default, DefaultOkay, AnyOkay, | |
diff --git a/src/wrq.erl b/src/wrq.erl | |
index f0d5c9e..aec71ce 100644 | |
--- a/src/wrq.erl | |
+++ b/src/wrq.erl | |
@@ -141,6 +141,7 @@ resp_headers(_RD = #wm_reqdata{resp_headers=RespH}) -> RespH. % mochiheaders | |
resp_body(_RD = #wm_reqdata{resp_body=undefined}) -> undefined; | |
resp_body(_RD = #wm_reqdata{resp_body={stream,X}}) -> {stream,X}; | |
+resp_body(_RD = #wm_reqdata{resp_body={known_length_stream,X,Y}}) -> {known_length_stream,X,Y}; | |
resp_body(_RD = #wm_reqdata{resp_body={stream,X,Y}}) -> {stream,X,Y}; | |
resp_body(_RD = #wm_reqdata{resp_body={writer,X}}) -> {writer,X}; | |
resp_body(_RD = #wm_reqdata{resp_body=RespB}) when is_binary(RespB) -> RespB; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment