summaryrefslogtreecommitdiff
path: root/src/mochiweb/mochiweb_http.erl
diff options
context:
space:
mode:
authorAdam Kocoloski <kocolosk@apache.org>2009-11-21 17:01:50 +0000
committerAdam Kocoloski <kocolosk@apache.org>2009-11-21 17:01:50 +0000
commit3a4fad07cb5097598eefd0cd7f588c5881a61c8f (patch)
tree6945d805eb72a37a5b27ae14a7ec2d1e8690fdac /src/mochiweb/mochiweb_http.erl
parenta2ebd6155b8171befd8f55b42c48bc563bb330b0 (diff)
upgrade mochiweb to r113, use hooks instead of forking mochijson2. COUCHDB-474
git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@882941 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/mochiweb/mochiweb_http.erl')
-rw-r--r--src/mochiweb/mochiweb_http.erl26
1 files changed, 18 insertions, 8 deletions
diff --git a/src/mochiweb/mochiweb_http.erl b/src/mochiweb/mochiweb_http.erl
index 14a36578..f1821f40 100644
--- a/src/mochiweb/mochiweb_http.erl
+++ b/src/mochiweb/mochiweb_http.erl
@@ -7,6 +7,7 @@
-author('bob@mochimedia.com').
-export([start/0, start/1, stop/0, stop/1]).
-export([loop/2, default_body/1]).
+-export([after_response/2, reentry/1]).
-define(IDLE_TIMEOUT, 30000).
@@ -110,6 +111,11 @@ request(Socket, Body) ->
exit(normal)
end.
+reentry(Body) ->
+ fun (Req) ->
+ ?MODULE:after_response(Body, Req)
+ end.
+
headers(Socket, Request, Headers, _Body, ?MAX_HEADERS) ->
%% Too many headers sent, bad request.
inet:setopts(Socket, [{packet, raw}]),
@@ -125,14 +131,7 @@ headers(Socket, Request, Headers, Body, HeaderCount) ->
Req = mochiweb:new_request({Socket, Request,
lists:reverse(Headers)}),
Body(Req),
- case Req:should_close() of
- true ->
- gen_tcp:close(Socket),
- exit(normal);
- false ->
- Req:cleanup(),
- ?MODULE:loop(Socket, Body)
- end;
+ ?MODULE:after_response(Body, Req);
{ok, {http_header, _, Name, _, Value}} ->
headers(Socket, Request, [{Name, Value} | Headers], Body,
1 + HeaderCount);
@@ -140,3 +139,14 @@ headers(Socket, Request, Headers, Body, HeaderCount) ->
gen_tcp:close(Socket),
exit(normal)
end.
+
+after_response(Body, Req) ->
+ Socket = Req:get(socket),
+ case Req:should_close() of
+ true ->
+ gen_tcp:close(Socket),
+ exit(normal);
+ false ->
+ Req:cleanup(),
+ ?MODULE:loop(Socket, Body)
+ end.