From c56bada509a448348ba724841a27abed201b4861 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Wed, 24 Sep 2014 15:03:10 +0300 Subject: Remove the error tuple return value for middlewares It wasn't interesting compared to simply returning a halt tuple with an explicit reply. --- ROADMAP.md | 5 ----- doc/src/guide/middlewares.ezdoc | 1 - doc/src/manual/cowboy_middleware.ezdoc | 7 ------- src/cowboy_handler.erl | 1 - src/cowboy_middleware.erl | 1 - src/cowboy_protocol.erl | 8 ++------ src/cowboy_router.erl | 8 ++++---- src/cowboy_spdy.erl | 8 ++------ 8 files changed, 8 insertions(+), 31 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index ad684ec..1f3c51a 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -38,11 +38,6 @@ callbacks will be removed in favor of a unified `terminate/3`. The `terminate/3` callback will become optional. -### Middlewares - -The error tuple return value brings little value compared to -the halt tuple. The error tuple will therefore be removed. - ### Hooks The interface of the `onresponse` hook will change. There has diff --git a/doc/src/guide/middlewares.ezdoc b/doc/src/guide/middlewares.ezdoc index e33abfb..0c142f9 100644 --- a/doc/src/guide/middlewares.ezdoc +++ b/doc/src/guide/middlewares.ezdoc @@ -24,7 +24,6 @@ Middlewares can return one of four different values: * `{ok, Req, Env}` to continue the request processing * `{suspend, Module, Function, Args}` to hibernate * `{halt, Req}` to stop processing and move on to the next request -* `{error, StatusCode, Req}` to reply an error and close the socket Of note is that when hibernating, processing will resume on the given MFA, discarding all previous stacktrace. Make sure you keep the `Req` diff --git a/doc/src/manual/cowboy_middleware.ezdoc b/doc/src/manual/cowboy_middleware.ezdoc index 065139c..2275d35 100644 --- a/doc/src/manual/cowboy_middleware.ezdoc +++ b/doc/src/manual/cowboy_middleware.ezdoc @@ -22,7 +22,6 @@ optionally with its contents modified. -> {ok, Req, Env} | {suspend, Module, Function, Args} | {halt, Req} - | {error, StatusCode, Req} Types: @@ -31,7 +30,6 @@ Types: * Module = module() * Function = atom() * Args = [any()] -* StatusCode = cowboy:http_status() Execute the middleware. @@ -47,8 +45,3 @@ The `halt` return value stops Cowboy from doing any further processing of the request, even if there are middlewares that haven't been executed yet. The connection may be left open to receive more requests from the client. - -The `error` return value sends an error response identified -by the `StatusCode` and then proceeds to terminate the -connection. Middlewares that haven't been executed yet -will not be called. diff --git a/src/cowboy_handler.erl b/src/cowboy_handler.erl index 5eb16b4..1e8261f 100644 --- a/src/cowboy_handler.erl +++ b/src/cowboy_handler.erl @@ -99,7 +99,6 @@ handler_init(Req, State, Handler, HandlerOpts) -> -> {ok, Req, Env} | {suspend, module(), atom(), any()} | {halt, Req} - | {error, cowboy:http_status(), Req} when Req::cowboy_req:req(), Env::cowboy_middleware:env(). upgrade_protocol(Req, #state{env=Env}, Handler, HandlerOpts, Module) -> diff --git a/src/cowboy_middleware.erl b/src/cowboy_middleware.erl index fa0f5bc..7ff947e 100644 --- a/src/cowboy_middleware.erl +++ b/src/cowboy_middleware.erl @@ -21,5 +21,4 @@ -> {ok, Req, Env} | {suspend, module(), atom(), [any()]} | {halt, Req} - | {error, cowboy:http_status(), Req} when Req::cowboy_req:req(), Env::env(). diff --git a/src/cowboy_protocol.erl b/src/cowboy_protocol.erl index a5873ea..82f1f38 100644 --- a/src/cowboy_protocol.erl +++ b/src/cowboy_protocol.erl @@ -428,9 +428,7 @@ execute(Req, State, Env, [Middleware|Tail]) -> erlang:hibernate(?MODULE, resume, [State, Env, Tail, Module, Function, Args]); {halt, Req2} -> - next_request(Req2, State, ok); - {error, Code, Req2} -> - error_terminate(Code, Req2, State) + next_request(Req2, State, ok) end. -spec resume(#state{}, cowboy_middleware:env(), [module()], @@ -443,9 +441,7 @@ resume(State, Env, Tail, Module, Function, Args) -> erlang:hibernate(?MODULE, resume, [State, Env, Tail, Module2, Function2, Args2]); {halt, Req2} -> - next_request(Req2, State, ok); - {error, Code, Req2} -> - error_terminate(Code, Req2, State) + next_request(Req2, State, ok) end. -spec next_request(cowboy_req:req(), #state{}, any()) -> ok. diff --git a/src/cowboy_router.erl b/src/cowboy_router.erl index 3b71205..2e54151 100644 --- a/src/cowboy_router.erl +++ b/src/cowboy_router.erl @@ -157,7 +157,7 @@ compile_brackets_split(<< C, Rest/binary >>, Acc, N) -> compile_brackets_split(Rest, << Acc/binary, C >>, N). -spec execute(Req, Env) - -> {ok, Req, Env} | {error, 400 | 404, Req} + -> {ok, Req, Env} | {halt, Req} when Req::cowboy_req:req(), Env::cowboy_middleware:env(). execute(Req, Env) -> {_, Dispatch} = lists:keyfind(dispatch, 1, Env), @@ -168,11 +168,11 @@ execute(Req, Env) -> Req2 = cowboy_req:set_bindings(HostInfo, PathInfo, Bindings, Req), {ok, Req2, [{handler, Handler}, {handler_opts, HandlerOpts}|Env]}; {error, notfound, host} -> - {error, 400, Req}; + {halt, cowboy_req:reply(400, Req)}; {error, badrequest, path} -> - {error, 400, Req}; + {halt, cowboy_req:reply(400, Req)}; {error, notfound, path} -> - {error, 404, Req} + {halt, cowboy_req:reply(404, Req)} end. %% Internal. diff --git a/src/cowboy_spdy.erl b/src/cowboy_spdy.erl index 5b89c48..3057cca 100644 --- a/src/cowboy_spdy.erl +++ b/src/cowboy_spdy.erl @@ -407,9 +407,7 @@ execute(Req, Env, [Middleware|Tail]) -> erlang:hibernate(?MODULE, resume, [Env, Tail, Module, Function, Args]); {halt, Req2} -> - cowboy_req:ensure_response(Req2, 204); - {error, Status, Req2} -> - cowboy_req:reply(Status, Req2) + cowboy_req:ensure_response(Req2, 204) end. -spec resume(cowboy_middleware:env(), [module()], @@ -422,9 +420,7 @@ resume(Env, Tail, Module, Function, Args) -> erlang:hibernate(?MODULE, resume, [Env, Tail, Module2, Function2, Args2]); {halt, Req2} -> - cowboy_req:ensure_response(Req2, 204); - {error, Status, Req2} -> - cowboy_req:reply(Status, Req2) + cowboy_req:ensure_response(Req2, 204) end. %% Reply functions used by cowboy_req. -- cgit v1.2.3