Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:18
erlang
0484-inets-httpd-Use-actual-statuscode-instead-...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0484-inets-httpd-Use-actual-statuscode-instead-of-hardcod.patch of Package erlang
From dfaa4505294af1d301c9795037a3e03dedd3d4eb Mon Sep 17 00:00:00 2001 From: Ingela Anderton Andin <ingela@erlang.org> Date: Fri, 30 Aug 2019 11:56:23 +0200 Subject: [PATCH] inets, httpd: Use actual statuscode instead of hardcoding 200 --- lib/inets/src/http_server/mod_esi.erl | 22 +++++++++++----------- lib/inets/test/httpd_SUITE.erl | 28 +++++++++++++++++++++++++--- 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/lib/inets/src/http_server/mod_esi.erl b/lib/inets/src/http_server/mod_esi.erl index 8cbd9798e6..bcf392d55c 100644 --- a/lib/inets/src/http_server/mod_esi.erl +++ b/lib/inets/src/http_server/mod_esi.erl @@ -353,12 +353,12 @@ erl_scheme_webpage_whole(Mod, Func, Env, Input, ModData) -> integer_to_list(Length)}| NewHeaders]), case ModData#mod.method of "HEAD" -> - {proceed, [{response, {already_sent, 200, 0}} | + {proceed, [{response, {already_sent, StatusCode, 0}} | ModData#mod.data]}; _ -> httpd_response:send_body(ModData, StatusCode, Body), - {proceed, [{response, {already_sent, 200, + {proceed, [{response, {already_sent, StatusCode, Length}} | ModData#mod.data]} end @@ -420,14 +420,14 @@ deliver_webpage_chunk(#mod{config_db = Db} = ModData, Pid, Timeout) -> [{"transfer-encoding", "chunked"} | NewHeaders]) end, - handle_body(Pid, ModData, Body, Timeout, length(Body), + handle_body(Pid, ModData, Body, Timeout, length(Body), StatusCode, IsDisableChunkedSend) end; timeout -> ?hdrv("deliver_webpage_chunk - timeout", []), send_headers(ModData, 504, [{"connection", "close"}]), httpd_socket:close(ModData#mod.socket_type, ModData#mod.socket), - {proceed,[{response, {already_sent, 200, 0}} | ModData#mod.data]} + {proceed,[{response, {already_sent, 504, 0}} | ModData#mod.data]} end. receive_headers(Timeout) -> @@ -453,25 +453,25 @@ send_headers(ModData, StatusCode, HTTPHeaders) -> httpd_response:send_header(ModData, StatusCode, ExtraHeaders ++ HTTPHeaders). -handle_body(_, #mod{method = "HEAD"} = ModData, _, _, Size, _) -> - {proceed, [{response, {already_sent, 200, Size}} | ModData#mod.data]}; +handle_body(_, #mod{method = "HEAD"} = ModData, _, _, Size, StatusCode, _) -> + {proceed, [{response, {already_sent, StatusCode, Size}} | ModData#mod.data]}; -handle_body(Pid, ModData, Body, Timeout, Size, IsDisableChunkedSend) -> +handle_body(Pid, ModData, Body, Timeout, Size, StatusCode, IsDisableChunkedSend) -> ?hdrt("handle_body - send chunk", [{timeout, Timeout}, {size, Size}]), httpd_response:send_chunk(ModData, Body, IsDisableChunkedSend), receive {esi_data, Data} when is_binary(Data) -> - handle_body(Pid, ModData, Data, Timeout, Size + byte_size(Data), + handle_body(Pid, ModData, Data, Timeout, Size + byte_size(Data), StatusCode, IsDisableChunkedSend); {esi_data, Data} -> - handle_body(Pid, ModData, Data, Timeout, Size + length(Data), + handle_body(Pid, ModData, Data, Timeout, Size + length(Data), StatusCode, IsDisableChunkedSend); {ok, Data} -> - handle_body(Pid, ModData, Data, Timeout, Size + length(Data), + handle_body(Pid, ModData, Data, Timeout, Size + length(Data), StatusCode, IsDisableChunkedSend); {'EXIT', Pid, normal} when is_pid(Pid) -> httpd_response:send_final_chunk(ModData, IsDisableChunkedSend), - {proceed, [{response, {already_sent, 200, Size}} | + {proceed, [{response, {already_sent, StatusCode, Size}} | ModData#mod.data]}; {'EXIT', Pid, Reason} when is_pid(Pid) -> Error = lists:flatten(io_lib:format("mod_esi process failed with reason ~p", [Reason])), diff --git a/lib/inets/test/httpd_SUITE.erl b/lib/inets/test/httpd_SUITE.erl index fc5ca14dcd..bf926ec9c1 100644 --- a/lib/inets/test/httpd_SUITE.erl +++ b/lib/inets/test/httpd_SUITE.erl @@ -28,6 +28,7 @@ -include_lib("kernel/include/file.hrl"). -include_lib("common_test/include/ct.hrl"). -include_lib("public_key/include/public_key.hrl"). +-include_lib("inets/include/httpd.hrl"). -include("inets_test_lib.hrl"). %% Note: This directive should only be used in test suites. @@ -56,6 +57,7 @@ all() -> {group, https_limit}, {group, http_custom}, {group, https_custom}, + {group, https_custom}, {group, http_basic_auth}, {group, https_basic_auth}, {group, http_auth_api}, @@ -119,7 +121,7 @@ groups() -> {htaccess, [], [htaccess_1_1, htaccess_1_0, htaccess_0_9]}, {security, [], [security_1_1, security_1_0]}, %% Skip 0.9 as causes timing issus in test code {http_1_1, [], [host, chunked, expect, cgi, cgi_chunked_encoding_test, - trace, range, if_modified_since, mod_esi_chunk_timeout] ++ http_head() ++ http_get() ++ load()}, + trace, range, if_modified_since, mod_esi_chunk_timeout, esi_proagate] ++ http_head() ++ http_get() ++ load()}, {http_1_0, [], [host, cgi, trace] ++ http_head() ++ http_get() ++ load()}, {http_0_9, [], http_head() ++ http_get() ++ load()} ]. @@ -768,6 +770,17 @@ mod_esi_chunk_timeout(Config) when is_list(Config) -> ?config(port, Config), ?config(host, Config), ?config(node, Config)). +%%------------------------------------------------------------------------- +esi_proagate(Config) when is_list(Config) -> + register(propagate_test, self()), + ok = http_status("GET /cgi-bin/erl/httpd_example:new_status_and_location ", + Config, [{statuscode, 201}]), + receive + {status, 201} -> + ok; + Err -> + ct:fail(Err) + end. %%------------------------------------------------------------------------- cgi() -> @@ -1693,8 +1706,17 @@ head_status(_) -> basic_conf() -> [{modules, [mod_alias, mod_range, mod_responsecontrol, - mod_trace, mod_esi, mod_cgi, mod_dir, mod_get, mod_head]}]. - + mod_trace, mod_esi, ?MODULE, mod_cgi, mod_dir, mod_get, mod_head]}]. +do(ModData) -> + case whereis(propagate_test) of + undefined -> + ok; + _ -> + {already_sent, Status, _Size} = proplists:get_value(response, ModData#mod.data), + propagate_test ! {status, Status} + end, + {proceed, ModData#mod.data}. + auth_access_conf() -> [{modules, [mod_alias, mod_htaccess, mod_dir, mod_get, mod_head]}, {access_files, [".htaccess"]}]. -- 2.16.4
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor