You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by da...@apache.org on 2014/02/12 07:22:19 UTC
[47/50] [abbrv] mochiweb commit: updated refs/heads/import-master to
3a54dbf
COUCHDB-1696 import mochiweb from tag v2.4.2
Project: http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/commit/11e1522f
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/tree/11e1522f
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/diff/11e1522f
Branch: refs/heads/import-master
Commit: 11e1522f467cb76a18fd747d58cc998d61593f61
Parents: 0e0053c
Author: Dave Cottlehuber <dc...@apache.org>
Authored: Tue Mar 12 20:11:08 2013 +0100
Committer: Dave Cottlehuber <dc...@apache.org>
Committed: Thu Apr 25 00:13:20 2013 +0200
----------------------------------------------------------------------
mochifmt.erl | 2 +-
mochifmt_records.erl | 14 +-
mochifmt_std.erl | 19 +-
mochiglobal.erl | 4 +-
mochihex.erl | 5 +-
mochijson.erl | 4 +-
mochijson2.erl | 64 +-
mochilists.erl | 2 +-
mochilogfile2.erl | 2 +-
mochinum.erl | 2 +-
mochitemp.erl | 3 +-
mochiutf8.erl | 7 +-
mochiweb.app.src | 6 +-
mochiweb.erl | 46 +-
mochiweb_acceptor.erl | 11 +-
mochiweb_charref.erl | 2387 ++++++++++++++++++++++++++++++++++-----
mochiweb_cookies.erl | 42 +-
mochiweb_cover.erl | 2 +-
mochiweb_echo.erl | 15 +-
mochiweb_headers.erl | 129 ++-
mochiweb_html.erl | 132 ++-
mochiweb_http.erl | 108 +-
mochiweb_io.erl | 5 +-
mochiweb_mime.erl | 399 ++++++-
mochiweb_multipart.erl | 98 +-
mochiweb_request.erl | 477 ++++----
mochiweb_request_tests.erl | 121 +-
mochiweb_response.erl | 44 +-
mochiweb_socket.erl | 15 +-
mochiweb_socket_server.erl | 80 +-
mochiweb_util.erl | 16 +-
reloader.erl | 4 +-
32 files changed, 3460 insertions(+), 805 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/11e1522f/mochifmt.erl
----------------------------------------------------------------------
diff --git a/mochifmt.erl b/mochifmt.erl
index 5bc6b9c..fc95e4f 100644
--- a/mochifmt.erl
+++ b/mochifmt.erl
@@ -369,8 +369,8 @@ parse_std_conversion([Type], Acc) ->
%%
%% Tests
%%
--include_lib("eunit/include/eunit.hrl").
-ifdef(TEST).
+-include_lib("eunit/include/eunit.hrl").
tokenize_test() ->
{?MODULE, [{raw, "ABC"}]} = tokenize("ABC"),
http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/11e1522f/mochifmt_records.erl
----------------------------------------------------------------------
diff --git a/mochifmt_records.erl b/mochifmt_records.erl
index 2326d1d..7d166ff 100644
--- a/mochifmt_records.erl
+++ b/mochifmt_records.erl
@@ -9,11 +9,15 @@
%% M:format("{0.bar}", [#rec{bar=foo}]).
%% foo
--module(mochifmt_records, [Recs]).
+-module(mochifmt_records).
-author('bob@mochimedia.com').
--export([get_value/2]).
+-export([new/1, get_value/3]).
-get_value(Key, Rec) when is_tuple(Rec) and is_atom(element(1, Rec)) ->
+new([{_Rec, RecFields}]=Recs) when is_list(RecFields) ->
+ {?MODULE, Recs}.
+
+get_value(Key, Rec, {?MODULE, Recs})
+ when is_tuple(Rec) and is_atom(element(1, Rec)) ->
try begin
Atom = list_to_existing_atom(Key),
{_, Fields} = proplists:lookup(element(1, Rec), Recs),
@@ -21,7 +25,7 @@ get_value(Key, Rec) when is_tuple(Rec) and is_atom(element(1, Rec)) ->
end
catch error:_ -> mochifmt:get_value(Key, Rec)
end;
-get_value(Key, Args) ->
+get_value(Key, Args, {?MODULE, _Recs}) ->
mochifmt:get_value(Key, Args).
get_rec_index(Atom, [Atom | _], Index) ->
@@ -33,6 +37,6 @@ get_rec_index(Atom, [_ | Rest], Index) ->
%%
%% Tests
%%
--include_lib("eunit/include/eunit.hrl").
-ifdef(TEST).
+-include_lib("eunit/include/eunit.hrl").
-endif.
http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/11e1522f/mochifmt_std.erl
----------------------------------------------------------------------
diff --git a/mochifmt_std.erl b/mochifmt_std.erl
index d4d74f6..ea68c4a 100644
--- a/mochifmt_std.erl
+++ b/mochifmt_std.erl
@@ -3,28 +3,31 @@
%% @doc Template module for a mochifmt formatter.
--module(mochifmt_std, []).
+-module(mochifmt_std).
-author('bob@mochimedia.com').
--export([format/2, get_value/2, format_field/2, get_field/2, convert_field/2]).
+-export([new/0, format/3, get_value/3, format_field/3, get_field/3, convert_field/3]).
-format(Format, Args) ->
+new() ->
+ {?MODULE}.
+
+format(Format, Args, {?MODULE}=THIS) ->
mochifmt:format(Format, Args, THIS).
-get_field(Key, Args) ->
+get_field(Key, Args, {?MODULE}=THIS) ->
mochifmt:get_field(Key, Args, THIS).
-convert_field(Key, Args) ->
+convert_field(Key, Args, {?MODULE}) ->
mochifmt:convert_field(Key, Args).
-get_value(Key, Args) ->
+get_value(Key, Args, {?MODULE}) ->
mochifmt:get_value(Key, Args).
-format_field(Arg, Format) ->
+format_field(Arg, Format, {?MODULE}=THIS) ->
mochifmt:format_field(Arg, Format, THIS).
%%
%% Tests
%%
--include_lib("eunit/include/eunit.hrl").
-ifdef(TEST).
+-include_lib("eunit/include/eunit.hrl").
-endif.
http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/11e1522f/mochiglobal.erl
----------------------------------------------------------------------
diff --git a/mochiglobal.erl b/mochiglobal.erl
index c740b87..ea645b0 100644
--- a/mochiglobal.erl
+++ b/mochiglobal.erl
@@ -30,7 +30,7 @@ put(K, V) ->
put(_K, V, Mod) ->
Bin = compile(Mod, V),
code:purge(Mod),
- code:load_binary(Mod, atom_to_list(Mod) ++ ".erl", Bin),
+ {module, Mod} = code:load_binary(Mod, atom_to_list(Mod) ++ ".erl", Bin),
ok.
-spec delete(atom()) -> boolean().
@@ -77,8 +77,8 @@ term_to_abstract(Module, Getter, T) ->
%%
%% Tests
%%
--include_lib("eunit/include/eunit.hrl").
-ifdef(TEST).
+-include_lib("eunit/include/eunit.hrl").
get_put_delete_test() ->
K = '$$test$$mochiglobal',
delete(K),
http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/11e1522f/mochihex.erl
----------------------------------------------------------------------
diff --git a/mochihex.erl b/mochihex.erl
index 44a2aa7..796f3ad 100644
--- a/mochihex.erl
+++ b/mochihex.erl
@@ -8,9 +8,6 @@
-export([to_hex/1, to_bin/1, to_int/1, dehex/1, hexdigit/1]).
-%% @type iolist() = [char() | binary() | iolist()]
-%% @type iodata() = iolist() | binary()
-
%% @spec to_hex(integer | iolist()) -> string()
%% @doc Convert an iolist to a hexadecimal string.
to_hex(0) ->
@@ -68,8 +65,8 @@ to_bin([C1, C2 | Rest], Acc) ->
%%
%% Tests
%%
--include_lib("eunit/include/eunit.hrl").
-ifdef(TEST).
+-include_lib("eunit/include/eunit.hrl").
to_hex_test() ->
"ff000ff1" = to_hex([255, 0, 15, 241]),
http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/11e1522f/mochijson.erl
----------------------------------------------------------------------
diff --git a/mochijson.erl b/mochijson.erl
index 2e3d145..d283189 100644
--- a/mochijson.erl
+++ b/mochijson.erl
@@ -15,8 +15,6 @@
-define(INC_COL(S), S#decoder{column=1+S#decoder.column}).
-define(INC_LINE(S), S#decoder{column=1, line=1+S#decoder.line}).
-%% @type iolist() = [char() | binary() | iolist()]
-%% @type iodata() = iolist() | binary()
%% @type json_string() = atom | string() | binary()
%% @type json_number() = integer() | float()
%% @type json_array() = {array, [json_term()]}
@@ -406,8 +404,8 @@ tokenize(L=[C | _], S) when C >= $0, C =< $9; C == $- ->
%%
%% Tests
%%
--include_lib("eunit/include/eunit.hrl").
-ifdef(TEST).
+-include_lib("eunit/include/eunit.hrl").
%% testing constructs borrowed from the Yaws JSON implementation.
http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/11e1522f/mochijson2.erl
----------------------------------------------------------------------
diff --git a/mochijson2.erl b/mochijson2.erl
index bdf6d77..2b8d16e 100644
--- a/mochijson2.erl
+++ b/mochijson2.erl
@@ -40,9 +40,9 @@
-module(mochijson2).
-author('bob@mochimedia.com').
-export([encoder/1, encode/1]).
--export([decoder/1, decode/1]).
+-export([decoder/1, decode/1, decode/2]).
-% This is a macro to placate syntax highlighters..
+%% This is a macro to placate syntax highlighters..
-define(Q, $\").
-define(ADV_COL(S, N), S#decoder{offset=N+S#decoder.offset,
column=N+S#decoder.column}).
@@ -64,15 +64,14 @@
-define(IS_WHITESPACE(C),
(C =:= $\s orelse C =:= $\t orelse C =:= $\r orelse C =:= $\n)).
-%% @type iolist() = [char() | binary() | iolist()]
-%% @type iodata() = iolist() | binary()
%% @type json_string() = atom | binary()
%% @type json_number() = integer() | float()
%% @type json_array() = [json_term()]
%% @type json_object() = {struct, [{json_string(), json_term()}]}
+%% @type json_eep18_object() = {[{json_string(), json_term()}]}
%% @type json_iolist() = {json, iolist()}
%% @type json_term() = json_string() | json_number() | json_array() |
-%% json_object() | json_iolist()
+%% json_object() | json_eep18_object() | json_iolist()
-record(encoder, {handler=null,
utf8=false}).
@@ -102,6 +101,14 @@ decoder(Options) ->
State = parse_decoder_options(Options, #decoder{}),
fun (O) -> json_decode(O, State) end.
+%% @spec decode(iolist(), [{format, proplist | eep18 | struct}]) -> json_term()
+%% @doc Decode the given iolist to Erlang terms using the given object format
+%% for decoding, where proplist returns JSON objects as [{binary(), json_term()}]
+%% proplists, eep18 returns JSON objects as {[binary(), json_term()]}, and struct
+%% returns them as-is.
+decode(S, Options) ->
+ json_decode(S, parse_decoder_options(Options, #decoder{})).
+
%% @spec decode(iolist()) -> json_term()
%% @doc Decode the given iolist to Erlang terms.
decode(S) ->
@@ -119,7 +126,10 @@ parse_encoder_options([{utf8, Switch} | Rest], State) ->
parse_decoder_options([], State) ->
State;
parse_decoder_options([{object_hook, Hook} | Rest], State) ->
- parse_decoder_options(Rest, State#decoder{object_hook=Hook}).
+ parse_decoder_options(Rest, State#decoder{object_hook=Hook});
+parse_decoder_options([{format, Format} | Rest], State)
+ when Format =:= struct orelse Format =:= eep18 orelse Format =:= proplist ->
+ parse_decoder_options(Rest, State#decoder{object_hook=Format}).
json_encode(true, _State) ->
<<"true">>;
@@ -139,6 +149,10 @@ json_encode([{K, _}|_] = Props, State) when (K =/= struct andalso
json_encode_proplist(Props, State);
json_encode({struct, Props}, State) when is_list(Props) ->
json_encode_proplist(Props, State);
+json_encode({Props}, State) when is_list(Props) ->
+ json_encode_proplist(Props, State);
+json_encode({}, State) ->
+ json_encode_proplist([], State);
json_encode(Array, State) when is_list(Array) ->
json_encode_array(Array, State);
json_encode({array, Array}, State) when is_list(Array) ->
@@ -318,8 +332,12 @@ decode1(B, S=#decoder{state=null}) ->
decode_object(B, S1)
end.
-make_object(V, #decoder{object_hook=null}) ->
+make_object(V, #decoder{object_hook=N}) when N =:= null orelse N =:= struct ->
V;
+make_object({struct, P}, #decoder{object_hook=eep18}) ->
+ {P};
+make_object({struct, P}, #decoder{object_hook=proplist}) ->
+ P;
make_object(V, #decoder{object_hook=Hook}) ->
Hook(V).
@@ -559,8 +577,8 @@ tokenize(B, S=#decoder{offset=O}) ->
%%
%% Tests
%%
--include_lib("eunit/include/eunit.hrl").
-ifdef(TEST).
+-include_lib("eunit/include/eunit.hrl").
%% testing constructs borrowed from the Yaws JSON implementation.
@@ -838,12 +856,34 @@ float_test() ->
handler_test() ->
?assertEqual(
- {'EXIT',{json_encode,{bad_term,{}}}},
- catch encode({})),
- F = fun ({}) -> [] end,
+ {'EXIT',{json_encode,{bad_term,{x,y}}}},
+ catch encode({x,y})),
+ F = fun ({x,y}) -> [] end,
?assertEqual(
<<"[]">>,
- iolist_to_binary((encoder([{handler, F}]))({}))),
+ iolist_to_binary((encoder([{handler, F}]))({x, y}))),
ok.
+encode_empty_test_() ->
+ [{A, ?_assertEqual(<<"{}">>, iolist_to_binary(encode(B)))}
+ || {A, B} <- [{"eep18 {}", {}},
+ {"eep18 {[]}", {[]}},
+ {"{struct, []}", {struct, []}}]].
+
+encode_test_() ->
+ P = [{<<"k">>, <<"v">>}],
+ JSON = iolist_to_binary(encode({struct, P})),
+ [{atom_to_list(F),
+ ?_assertEqual(JSON, iolist_to_binary(encode(decode(JSON, [{format, F}]))))}
+ || F <- [struct, eep18, proplist]].
+
+format_test_() ->
+ P = [{<<"k">>, <<"v">>}],
+ JSON = iolist_to_binary(encode({struct, P})),
+ [{atom_to_list(F),
+ ?_assertEqual(A, decode(JSON, [{format, F}]))}
+ || {F, A} <- [{struct, {struct, P}},
+ {eep18, {P}},
+ {proplist, P}]].
+
-endif.
http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/11e1522f/mochilists.erl
----------------------------------------------------------------------
diff --git a/mochilists.erl b/mochilists.erl
index 8981e7b..d93b241 100644
--- a/mochilists.erl
+++ b/mochilists.erl
@@ -55,8 +55,8 @@ get_value(Key, Proplist, Default) ->
%%
%% Tests
%%
--include_lib("eunit/include/eunit.hrl").
-ifdef(TEST).
+-include_lib("eunit/include/eunit.hrl").
set_defaults_test() ->
?assertEqual(
http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/11e1522f/mochilogfile2.erl
----------------------------------------------------------------------
diff --git a/mochilogfile2.erl b/mochilogfile2.erl
index c34ee73..b4a7e3c 100644
--- a/mochilogfile2.erl
+++ b/mochilogfile2.erl
@@ -57,8 +57,8 @@ find_last_newline(FD, Location) ->
%%
%% Tests
%%
--include_lib("eunit/include/eunit.hrl").
-ifdef(TEST).
+-include_lib("eunit/include/eunit.hrl").
name_test() ->
D = mochitemp:mkdtemp(),
FileName = filename:join(D, "open_close_test.log"),
http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/11e1522f/mochinum.erl
----------------------------------------------------------------------
diff --git a/mochinum.erl b/mochinum.erl
index 3c96b13..c52b15c 100644
--- a/mochinum.erl
+++ b/mochinum.erl
@@ -243,8 +243,8 @@ frexp_int(F) ->
%%
%% Tests
%%
--include_lib("eunit/include/eunit.hrl").
-ifdef(TEST).
+-include_lib("eunit/include/eunit.hrl").
int_ceil_test() ->
?assertEqual(1, int_ceil(0.0001)),
http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/11e1522f/mochitemp.erl
----------------------------------------------------------------------
diff --git a/mochitemp.erl b/mochitemp.erl
index bb23d2a..dda7863 100644
--- a/mochitemp.erl
+++ b/mochitemp.erl
@@ -135,8 +135,9 @@ normalize_dir(L) ->
%%
%% Tests
%%
--include_lib("eunit/include/eunit.hrl").
-ifdef(TEST).
+-include_lib("eunit/include/eunit.hrl").
+
pushenv(L) ->
[{K, os:getenv(K)} || K <- L].
popenv(L) ->
http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/11e1522f/mochiutf8.erl
----------------------------------------------------------------------
diff --git a/mochiutf8.erl b/mochiutf8.erl
index 206e118..28f28c1 100644
--- a/mochiutf8.erl
+++ b/mochiutf8.erl
@@ -5,8 +5,9 @@
%% invalid bytes.
-module(mochiutf8).
--export([valid_utf8_bytes/1, codepoint_to_bytes/1, bytes_to_codepoints/1]).
--export([bytes_foldl/3, codepoint_foldl/3, read_codepoint/1, len/1]).
+-export([valid_utf8_bytes/1, codepoint_to_bytes/1, codepoints_to_bytes/1]).
+-export([bytes_to_codepoints/1, bytes_foldl/3, codepoint_foldl/3]).
+-export([read_codepoint/1, len/1]).
%% External API
@@ -192,8 +193,8 @@ invalid_utf8_indexes(<<>>, _N, Acc) ->
%%
%% Tests
%%
--include_lib("eunit/include/eunit.hrl").
-ifdef(TEST).
+-include_lib("eunit/include/eunit.hrl").
binary_skip_bytes_test() ->
?assertEqual(<<"foo">>,
http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/11e1522f/mochiweb.app.src
----------------------------------------------------------------------
diff --git a/mochiweb.app.src b/mochiweb.app.src
index 37a21fb..baced90 100644
--- a/mochiweb.app.src
+++ b/mochiweb.app.src
@@ -1,9 +1,9 @@
%% This is generated from src/mochiweb.app.src
{application, mochiweb,
[{description, "MochiMedia Web Server"},
- {vsn, "1.4.1"},
+ {vsn, "2.4.2"},
{modules, []},
{registered, []},
- {mod, {mochiweb_app, []}},
{env, []},
- {applications, [kernel, stdlib, crypto, inets]}]}.
+ {applications, [kernel, stdlib, crypto, inets, ssl, xmerl,
+ compiler, syntax_tools]}]}.
http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/11e1522f/mochiweb.erl
----------------------------------------------------------------------
diff --git a/mochiweb.erl b/mochiweb.erl
index 3118028..250beb5 100644
--- a/mochiweb.erl
+++ b/mochiweb.erl
@@ -6,22 +6,9 @@
-module(mochiweb).
-author('bob@mochimedia.com').
--export([start/0, stop/0]).
-export([new_request/1, new_response/1]).
-export([all_loaded/0, all_loaded/1, reload/0]).
-
-%% @spec start() -> ok
-%% @doc Start the MochiWeb server.
-start() ->
- ensure_started(crypto),
- application:start(mochiweb).
-
-%% @spec stop() -> ok
-%% @doc Stop the MochiWeb server.
-stop() ->
- Res = application:stop(mochiweb),
- application:stop(crypto),
- Res.
+-export([ensure_started/1]).
reload() ->
[c:l(Module) || Module <- all_loaded()].
@@ -78,8 +65,8 @@ new_response({Request, Code, Headers}) ->
Code,
mochiweb_headers:make(Headers)).
-%% Internal API
-
+%% @spec ensure_started(App::atom()) -> ok
+%% @doc Start the given App if it has not been started already.
ensure_started(App) ->
case application:start(App) of
ok ->
@@ -88,12 +75,11 @@ ensure_started(App) ->
ok
end.
-
%%
%% Tests
%%
--include_lib("eunit/include/eunit.hrl").
-ifdef(TEST).
+-include_lib("eunit/include/eunit.hrl").
-record(treq, {path, body= <<>>, xreply= <<>>}).
@@ -112,7 +98,7 @@ with_server(Transport, ServerFun, ClientFun) ->
ssl ->
ServerOpts0 ++ [{ssl, true}, {ssl_opts, ssl_cert_opts()}]
end,
- {ok, Server} = mochiweb_http:start(ServerOpts),
+ {ok, Server} = mochiweb_http:start_link(ServerOpts),
Port = mochiweb_socket_server:get(Server, port),
Res = (catch ClientFun(Transport, Port)),
mochiweb_http:stop(Server),
@@ -123,6 +109,8 @@ request_test() ->
"/foo/bar/baz wibble quux" = R:get(path),
ok.
+-define(LARGE_TIMEOUT, 60).
+
single_http_GET_test() ->
do_GET(plain, 1).
@@ -135,11 +123,13 @@ multiple_http_GET_test() ->
multiple_https_GET_test() ->
do_GET(ssl, 3).
-hundred_http_GET_test() ->
- do_GET(plain, 100).
+hundred_http_GET_test_() -> % note the underscore
+ {timeout, ?LARGE_TIMEOUT,
+ fun() -> ?assertEqual(ok, do_GET(plain,100)) end}.
-hundred_https_GET_test() ->
- do_GET(ssl, 100).
+hundred_https_GET_test_() -> % note the underscore
+ {timeout, ?LARGE_TIMEOUT,
+ fun() -> ?assertEqual(ok, do_GET(ssl,100)) end}.
single_128_http_POST_test() ->
do_POST(plain, 128, 1).
@@ -165,11 +155,13 @@ multiple_100k_http_POST_test() ->
multiple_100K_https_POST_test() ->
do_POST(ssl, 102400, 3).
-hundred_128_http_POST_test() ->
- do_POST(plain, 128, 100).
+hundred_128_http_POST_test_() -> % note the underscore
+ {timeout, ?LARGE_TIMEOUT,
+ fun() -> ?assertEqual(ok, do_POST(plain, 128, 100)) end}.
-hundred_128_https_POST_test() ->
- do_POST(ssl, 128, 100).
+hundred_128_https_POST_test_() -> % note the underscore
+ {timeout, ?LARGE_TIMEOUT,
+ fun() -> ?assertEqual(ok, do_POST(ssl, 128, 100)) end}.
do_GET(Transport, Times) ->
PathPrefix = "/whatever/",
http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/11e1522f/mochiweb_acceptor.erl
----------------------------------------------------------------------
diff --git a/mochiweb_acceptor.erl b/mochiweb_acceptor.erl
index 893f99b..efedfbd 100644
--- a/mochiweb_acceptor.erl
+++ b/mochiweb_acceptor.erl
@@ -18,14 +18,13 @@ init(Server, Listen, Loop) ->
case catch mochiweb_socket:accept(Listen) of
{ok, Socket} ->
gen_server:cast(Server, {accepted, self(), timer:now_diff(now(), T1)}),
- case mochiweb_socket:after_accept(Socket) of
- ok -> call_loop(Loop, Socket);
- {error, _} -> exit(normal)
- end;
+ call_loop(Loop, Socket);
{error, closed} ->
exit(normal);
{error, timeout} ->
init(Server, Listen, Loop);
+ {error, esslaccept} ->
+ exit(normal);
Other ->
error_logger:error_report(
[{application, mochiweb},
@@ -36,6 +35,8 @@ init(Server, Listen, Loop) ->
call_loop({M, F}, Socket) ->
M:F(Socket);
+call_loop({M, F, [A1]}, Socket) ->
+ M:F(Socket, A1);
call_loop({M, F, A}, Socket) ->
erlang:apply(M, F, [Socket | A]);
call_loop(Loop, Socket) ->
@@ -44,6 +45,6 @@ call_loop(Loop, Socket) ->
%%
%% Tests
%%
--include_lib("eunit/include/eunit.hrl").
-ifdef(TEST).
+-include_lib("eunit/include/eunit.hrl").
-endif.