Repository: couchdb-mochiweb Updated Branches: refs/heads/upstream-2.17.0 [created] 5860c6373
Use upstream version of src/mochiweb_http.erl Project: http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/repo Commit: http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/commit/5860c637 Tree: http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/tree/5860c637 Diff: http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/diff/5860c637 Branch: refs/heads/upstream-2.17.0 Commit: 5860c6373bee0c75a7ebbd813fe370ccddcc0d01 Parents: cb521b3 23dc119 Author: Joan Touzet <[email protected]> Authored: Sat Feb 17 17:58:57 2018 -0500 Committer: Joan Touzet <[email protected]> Committed: Sat Feb 17 17:58:57 2018 -0500 ---------------------------------------------------------------------- .editorconfig | 17 +++ .travis.yml | 7 +- CHANGES.md | 74 +++++++++- Makefile | 1 + rebar.config | 7 +- src/mochifmt.erl | 18 +++ src/mochifmt_records.erl | 18 +++ src/mochifmt_std.erl | 18 +++ src/mochiglobal.erl | 20 +++ src/mochihex.erl | 18 +++ src/mochijson.erl | 18 +++ src/mochijson2.erl | 144 +++++++++++++++---- src/mochilists.erl | 18 +++ src/mochilogfile2.erl | 18 +++ src/mochinum.erl | 18 +++ src/mochitemp.erl | 20 ++- src/mochiutf8.erl | 18 +++ src/mochiweb.app.src | 10 +- src/mochiweb.erl | 18 +++ src/mochiweb_acceptor.erl | 18 +++ src/mochiweb_base64url.erl | 22 +++ src/mochiweb_charref.erl | 18 +++ src/mochiweb_clock.erl | 101 +++++++++++++ src/mochiweb_cookies.erl | 18 +++ src/mochiweb_cover.erl | 18 +++ src/mochiweb_echo.erl | 18 +++ src/mochiweb_headers.erl | 18 +++ src/mochiweb_html.erl | 83 ++++++++--- src/mochiweb_http.erl | 61 ++++++-- src/mochiweb_io.erl | 18 +++ src/mochiweb_mime.erl | 18 +++ src/mochiweb_multipart.erl | 22 ++- src/mochiweb_request.erl | 75 +++++++--- src/mochiweb_response.erl | 18 +++ src/mochiweb_session.erl | 23 ++- src/mochiweb_socket.erl | 6 +- src/mochiweb_socket_server.erl | 121 ++++++++-------- src/mochiweb_util.erl | 55 +++++++ src/mochiweb_websocket.erl | 6 +- src/reloader.erl | 20 ++- support/templates/mochiwebapp.template | 2 + support/templates/mochiwebapp_skel/bench.sh | 19 +++ .../mochiwebapp_skel/src/mochiapp_web.erl | 3 + test/mochiweb_base64url_tests.erl | 7 +- test/mochiweb_html_tests.erl | 69 ++++++++- test/mochiweb_test_util.erl | 22 ++- test/mochiweb_test_util.hrl | 2 +- test/mochiweb_tests.erl | 21 ++- 48 files changed, 1212 insertions(+), 170 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/5860c637/src/mochiweb_http.erl ---------------------------------------------------------------------- diff --cc src/mochiweb_http.erl index 9e32d7d,3b02065..9ceea9f --- a/src/mochiweb_http.erl +++ b/src/mochiweb_http.erl @@@ -57,22 -85,26 +85,26 @@@ loop(Socket, Opts, Body) - request(Socket, Opts, Body). request(Socket, Opts, Body) -> - case mochiweb_socket:recv(Socket, 0, ?REQUEST_RECV_TIMEOUT) of - {ok, {http_request, Method, Path, Version}} -> - ok = mochiweb_socket:setopts(Socket, [{packet, httph}]), + ok = mochiweb_socket:exit_if_closed(mochiweb_socket:setopts(Socket, [{active, once}])), + receive + {Protocol, _, {http_request, Method, Path, Version}} when Protocol == http orelse Protocol == ssl -> + ok = mochiweb_socket:exit_if_closed(mochiweb_socket:setopts(Socket, [{packet, httph}])), headers(Socket, Opts, {Method, Path, Version}, [], Body, 0); - {Protocol, _, {http_error, "\r\n"}} when Protocol == http orelse Protocol == ssl -> + {error, {http_error, "\r\n"}} -> request(Socket, Opts, Body); - {Protocol, _, {http_error, "\n"}} when Protocol == http orelse Protocol == ssl -> + {error, {http_error, "\n"}} -> request(Socket, Opts, Body); - {tcp_closed, _} -> + {error, closed} -> mochiweb_socket:close(Socket), exit(normal); - {error, timeout} -> + {tcp_error, _, emsgsize} = Other -> + handle_invalid_msg_request(Other, Socket, Opts); + {ssl_closed, _} -> mochiweb_socket:close(Socket), - exit(normal); - Other -> - handle_invalid_msg_request(Other, Socket, Opts) + exit(normal) + after ?REQUEST_RECV_TIMEOUT -> + mochiweb_socket:close(Socket), + exit(normal) end. reentry(Body) -> @@@ -90,17 -123,17 +123,17 @@@ headers(Socket, Opts, Request, Headers Req = new_request(Socket, Opts, Request, Headers), call_body(Body, Req), ?MODULE:after_response(Body, Req); - {Protocol, _, {http_header, _, Name, _, Value}} when Protocol == http orelse Protocol == ssl -> + {ok, {http_header, _, Name, _, Value}} -> headers(Socket, Opts, Request, [{Name, Value} | Headers], Body, 1 + HeaderCount); - {tcp_closed, _} -> + {error, closed} -> + mochiweb_socket:close(Socket), + exit(normal); + {error, timeout} -> mochiweb_socket:close(Socket), exit(normal); - Other -> + {tcp_error, _, emsgsize} = Other -> handle_invalid_msg_request(Other, Socket, Opts, Request, Headers) - after ?HEADERS_RECV_TIMEOUT -> - mochiweb_socket:close(Socket), - exit(normal) end. call_body({M, F, A}, Req) ->
