diff --git a/library/server/ewsgi/specification/response/wgi_filter_response.e b/library/server/ewsgi/specification/response/wgi_filter_response.e index ec7235a2..7cd9226c 100644 --- a/library/server/ewsgi/specification/response/wgi_filter_response.e +++ b/library/server/ewsgi/specification/response/wgi_filter_response.e @@ -22,6 +22,20 @@ feature {NONE} -- Initialization wgi_response: WGI_RESPONSE + +feature {WGI_FILTER_RESPONSE} -- Change + + update_wgi_response (res: WGI_RESPONSE) + -- Set `wgi_response' with `res'. + do + if wgi_response /= res then + res.set_post_commit_action (wgi_response.post_commit_action) + wgi_response.set_post_commit_action (Void) + else + -- Same response object + end + end + feature {WGI_CONNECTOR, WGI_SERVICE} -- Commit commit diff --git a/library/server/wsf/src/implementation/wsf_wgi_delayed_header_response.e b/library/server/wsf/src/implementation/wsf_wgi_delayed_header_response.e index 9b685893..9cf7177c 100644 --- a/library/server/wsf/src/implementation/wsf_wgi_delayed_header_response.e +++ b/library/server/wsf/src/implementation/wsf_wgi_delayed_header_response.e @@ -31,11 +31,23 @@ feature {NONE} -- Initialization make_with_response (r) end +feature {WSF_RESPONSE} -- Change + + update_wsf_response (res: WSF_RESPONSE) + -- Set `wsf_response' with `res'. + do + wsf_response := res + ensure + wsf_response_set: wsf_response = res + end + feature {NONE} -- Implementation wsf_response: WSF_RESPONSE + -- Origin WSF response commit + -- do if not header_committed then process_header @@ -44,6 +56,7 @@ feature {NONE} -- Implementation end process_header + -- require header_not_committed: not header_committed do diff --git a/library/server/wsf/src/wsf_head_response_wrapper.e b/library/server/wsf/src/wsf_head_response_wrapper.e index fa894143..d8c8ce88 100644 --- a/library/server/wsf/src/wsf_head_response_wrapper.e +++ b/library/server/wsf/src/wsf_head_response_wrapper.e @@ -11,7 +11,10 @@ class inherit WSF_RESPONSE + rename + make_from_wsf as make_from_response redefine + make_from_response, put_character, put_string, put_substring, @@ -27,12 +30,9 @@ create feature {NONE} -- Initialization make_from_response (res: WSF_RESPONSE) - -- Initialize from `res' (assumed to be a GET response). - require - res_attached: res /= Void do wsf_response := res - make_from_wgi (res.wgi_response) + Precursor (res) end feature {WSF_RESPONSE} -- Access diff --git a/library/server/wsf/src/wsf_response.e b/library/server/wsf/src/wsf_response.e index cc2b6b5f..72be7265 100644 --- a/library/server/wsf/src/wsf_response.e +++ b/library/server/wsf/src/wsf_response.e @@ -22,6 +22,9 @@ class create {WSF_TO_WGI_SERVICE} make_from_wgi +create {WSF_RESPONSE} + make_from_wsf + convert make_from_wgi ({WGI_RESPONSE}) @@ -34,12 +37,25 @@ feature {NONE} -- Initialization transfered_content_length := 0 create header.make wgi_response := r - create wres.make (r, Current) + if attached {WSF_WGI_DELAYED_HEADER_RESPONSE} r as r_delayed then + wres := r_delayed + wres.update_wsf_response (Current) + else + create wres.make (r, Current) + end wgi_response := wres set_status_code ({HTTP_STATUS_CODE}.ok) -- Default value end -feature {WSF_RESPONSE_EXPORTER} -- Properties + make_from_wsf (res: WSF_RESPONSE) + do + transfered_content_length := 0 + wgi_response := res.wgi_response + header := res.header + set_status_code ({HTTP_STATUS_CODE}.ok) -- Default value + end + +feature {WSF_RESPONSE, WSF_RESPONSE_EXPORTER} -- Properties wgi_response: WGI_RESPONSE -- Associated WGI_RESPONSE.