aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2014-09-24 15:03:10 +0300
committerLoïc Hoguin <[email protected]>2014-09-24 15:03:10 +0300
commitc56bada509a448348ba724841a27abed201b4861 (patch)
tree10162f5c47ad8394f74f12e4105e20488e9c3fd1
parentaa4d86b81f6095316813c599659014c15bf9b935 (diff)
downloadcowboy-c56bada509a448348ba724841a27abed201b4861.tar.gz
cowboy-c56bada509a448348ba724841a27abed201b4861.tar.bz2
cowboy-c56bada509a448348ba724841a27abed201b4861.zip
Remove the error tuple return value for middlewares
It wasn't interesting compared to simply returning a halt tuple with an explicit reply.
-rw-r--r--ROADMAP.md5
-rw-r--r--doc/src/guide/middlewares.ezdoc1
-rw-r--r--doc/src/manual/cowboy_middleware.ezdoc7
-rw-r--r--src/cowboy_handler.erl1
-rw-r--r--src/cowboy_middleware.erl1
-rw-r--r--src/cowboy_protocol.erl8
-rw-r--r--src/cowboy_router.erl8
-rw-r--r--src/cowboy_spdy.erl8
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.