diff --git a/ROADMAP.md b/ROADMAP.md index ad684ecb..1f3c51a8 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 e33abfb0..0c142f9d 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 065139ca..2275d35e 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 5eb16b49..1e8261f9 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 fa0f5bc7..7ff947e9 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 a5873ea8..82f1f387 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 3b712057..2e54151f 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 5b89c48d..3057cca2 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.