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.