diff --git a/library/server/ewsgi/connectors/nino/nino-safe.ecf b/library/server/ewsgi/connectors/nino/nino-safe.ecf
index 633e055f..635aea99 100644
--- a/library/server/ewsgi/connectors/nino/nino-safe.ecf
+++ b/library/server/ewsgi/connectors/nino/nino-safe.ecf
@@ -11,7 +11,6 @@
-
diff --git a/library/server/ewsgi/connectors/nino/nino.ecf b/library/server/ewsgi/connectors/nino/nino.ecf
index 2b6d9204..c12d3562 100644
--- a/library/server/ewsgi/connectors/nino/nino.ecf
+++ b/library/server/ewsgi/connectors/nino/nino.ecf
@@ -11,7 +11,6 @@
-
diff --git a/library/server/ewsgi/default/cgi/default_ewsgi_application.e b/library/server/ewsgi/default/cgi/default_ewsgi_application.e
new file mode 100644
index 00000000..1e582479
--- /dev/null
+++ b/library/server/ewsgi/default/cgi/default_ewsgi_application.e
@@ -0,0 +1,32 @@
+note
+ description: "Summary description for {DEFAULT_EWSGI_APPLICATION}."
+ date: "$Date$"
+ revision: "$Revision$"
+
+deferred class
+ DEFAULT_EWSGI_APPLICATION
+
+inherit
+ GW_APPLICATION_IMP
+
+feature {NONE} -- Initialization
+
+ make_and_launch
+ local
+ cgi: GW_CGI_CONNECTOR
+ do
+ create cgi.make (Current)
+ cgi.launch
+ end
+
+note
+ copyright: "2011-2011, Eiffel Software and others"
+ license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
+ source: "[
+ Eiffel Software
+ 5949 Hollister Ave., Goleta, CA 93117 USA
+ Telephone 805-685-1006, Fax 805-685-6869
+ Website http://www.eiffel.com
+ Customer support http://support.eiffel.com
+ ]"
+end
diff --git a/library/server/ewsgi/default/ewsgi_cgi-safe.ecf b/library/server/ewsgi/default/ewsgi_cgi-safe.ecf
new file mode 100644
index 00000000..3a97046d
--- /dev/null
+++ b/library/server/ewsgi/default/ewsgi_cgi-safe.ecf
@@ -0,0 +1,22 @@
+
+
+
+
+
+ /EIFGENs$
+ /\.git$
+ /\.svn$
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/server/ewsgi/default/ewsgi_nino-safe.ecf b/library/server/ewsgi/default/ewsgi_nino-safe.ecf
new file mode 100644
index 00000000..ad20e21c
--- /dev/null
+++ b/library/server/ewsgi/default/ewsgi_nino-safe.ecf
@@ -0,0 +1,26 @@
+
+
+
+
+
+ /EIFGENs$
+ /\.git$
+ /\.svn$
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/server/ewsgi/default/nino/default_ewsgi_application.e b/library/server/ewsgi/default/nino/default_ewsgi_application.e
new file mode 100644
index 00000000..7f8debfc
--- /dev/null
+++ b/library/server/ewsgi/default/nino/default_ewsgi_application.e
@@ -0,0 +1,32 @@
+note
+ description: "Summary description for {DEFAULT_EWSGI_APPLICATION}."
+ date: "$Date$"
+ revision: "$Revision$"
+
+deferred class
+ DEFAULT_EWSGI_APPLICATION
+
+inherit
+ GW_APPLICATION_IMP
+
+feature {NONE} -- Initialization
+
+ make_and_launch
+ do
+ print ("Example: start a Nino web server on port " + port_number.out + ", %Nand reply Hello World for any request such as http://localhost:8123/%N")
+ (create {NINO_APPLICATION}.make_custom (agent execute, "")).listen (port_number)
+ end
+
+ port_number: INTEGER = 80
+
+note
+ copyright: "2011-2011, Eiffel Software and others"
+ license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
+ source: "[
+ Eiffel Software
+ 5949 Hollister Ave., Goleta, CA 93117 USA
+ Telephone 805-685-1006, Fax 805-685-6869
+ Website http://www.eiffel.com
+ Customer support http://support.eiffel.com
+ ]"
+end
diff --git a/library/server/ewsgi/connectors/nino/src/gw_nino_application.e b/library/server/ewsgi/default/nino/nino_application.e
similarity index 93%
rename from library/server/ewsgi/connectors/nino/src/gw_nino_application.e
rename to library/server/ewsgi/default/nino/nino_application.e
index 1247261c..dd33bdd5 100644
--- a/library/server/ewsgi/connectors/nino/src/gw_nino_application.e
+++ b/library/server/ewsgi/default/nino/nino_application.e
@@ -1,10 +1,10 @@
note
- description: "Summary description for {GW_NINO_APPLICATION}."
+ description: "Summary description for {NINO_APPLICATION}."
date: "$Date$"
revision: "$Revision$"
class
- GW_NINO_APPLICATION
+ NINO_APPLICATION
create
make,
diff --git a/library/server/ewsgi/examples/hello_world/src/hello_world.e b/library/server/ewsgi/examples/hello_world/src/hello_world.e
index d920c7de..d8bd04f3 100644
--- a/library/server/ewsgi/examples/hello_world/src/hello_world.e
+++ b/library/server/ewsgi/examples/hello_world/src/hello_world.e
@@ -18,7 +18,7 @@ feature {NONE} -- Initialization
(create {GW_NINO_APPLICATION}.make_custom (agent execute, "")).listen (port_number)
end
- execute (req: EWSGI_REQUEST; res: EWSGI_RESPONSE)
+ execute (req: EWSGI_REQUEST; res: EWSGI_RESPONSE_STREAM)
do
res.write_header (200, <<["Content-Type", "text/plain"]>>)
res.write_string ("Hello World!%N")
diff --git a/library/server/ewsgi/examples/hello_world_with_response/hello-safe.ecf b/library/server/ewsgi/examples/hello_world_with_response/hello-safe.ecf
new file mode 100644
index 00000000..ca270a86
--- /dev/null
+++ b/library/server/ewsgi/examples/hello_world_with_response/hello-safe.ecf
@@ -0,0 +1,29 @@
+
+
+
+
+ /EIFGENs$
+ /\.git$
+ /\.svn$
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/server/ewsgi/examples/hello_world_with_response/license.lic b/library/server/ewsgi/examples/hello_world_with_response/license.lic
new file mode 100644
index 00000000..cf2d1ed9
--- /dev/null
+++ b/library/server/ewsgi/examples/hello_world_with_response/license.lic
@@ -0,0 +1,10 @@
+${NOTE_KEYWORD}
+ copyright: "2011-${YEAR}, Eiffel Software and others"
+ license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
+ source: "[
+ Eiffel Software
+ 5949 Hollister Ave., Goleta, CA 93117 USA
+ Telephone 805-685-1006, Fax 805-685-6869
+ Website http://www.eiffel.com
+ Customer support http://support.eiffel.com
+ ]"
diff --git a/library/server/ewsgi/examples/hello_world_with_response/src/framework/ewsgi_response.e b/library/server/ewsgi/examples/hello_world_with_response/src/framework/ewsgi_response.e
new file mode 100644
index 00000000..a586880d
--- /dev/null
+++ b/library/server/ewsgi/examples/hello_world_with_response/src/framework/ewsgi_response.e
@@ -0,0 +1,225 @@
+note
+ description: "[
+ An EWSGI response. This may be used as is or specialized (subclassed)
+ if a developer wishes to reimplement their own version of the feature
+ 'read_message_body_block' for supporting a block-based message body
+ response.
+ ]"
+ author: "Paul Cohen "
+ status: "Draft"
+
+class EWSGI_RESPONSE
+
+create
+ make
+
+feature {NONE} -- Initialization
+
+ make
+ -- Create new response object
+ do
+ is_buffered := False
+ ready_to_transmit := False
+ end_of_blocks := False
+ max_block_size := default_max_block_size
+ current_block := ""
+ create headers_table.make (10)
+ end
+
+feature {EWSGI_RESPONSE_APPLICATION} -- Response status
+
+ transmit_to (res: EWSGI_RESPONSE_STREAM)
+ do
+ res.set_status_code (status)
+ res.write_string (headers)
+ from
+ read_block
+ res.write_string (last_block)
+-- res.flush
+ until
+ end_of_blocks
+ loop
+ read_block
+ res.write_string (last_block)
+-- res.flush
+ end
+ end
+
+ ready_to_transmit: BOOLEAN
+ -- Is this response ready to be transmitted?
+
+ set_ready_to_transmit
+ -- Set response to ready to transmit.
+ do
+ if is_buffered then
+ set_header ("Content-Length", current_block.count.out)
+-- elseif tmp_file /= Void then
+-- if tmp_file.is_open_write then
+-- tmp_file.close
+-- set_header ("Content-Length", tmp_file.count.out)
+-- end
+ end
+ ready_to_transmit := True
+ ensure
+ ready_to_transmit
+ end
+
+feature {EWSGI_RESPONSE_APPLICATION} -- Message start line and status
+
+ status: INTEGER
+ -- HTTP status code
+
+ set_status (s: INTEGER)
+ -- Set 'status_code'.
+ do
+ status := s
+ set_header ("Status", s.out)
+ ensure
+ status = s
+ end
+
+ start_line: STRING
+ -- HTTP message start-line
+ do
+ if attached status as st then
+ Result := "HTTP/1.1 " + st.out + " " + status_text (st) + crlf
+ else
+ Result := "HTTP/1.1 200 " + status_text (200) + crlf
+ end
+ end
+
+feature {EWSGI_RESPONSE_APPLICATION} -- Message headers
+
+ headers: STRING
+ -- HTTP message headers including trailing empty line.
+ local
+ t: HASH_TABLE [STRING, STRING]
+ do
+ Result := ""
+ t := headers_table
+ from
+ t.start
+ until
+ t.after
+ loop
+ Result.append (t.key_for_iteration + ": " + t.item_for_iteration + crlf)
+ t.forth
+ end
+ Result.append (crlf)
+ end
+
+ headers_table: HASH_TABLE [STRING, STRING]
+ -- Hash table of HTTP headers
+
+ set_header (key, value: STRING)
+ -- Set the HTTP header with the given 'key' to the given 'value'.
+ do
+ headers_table.put (value, key)
+ ensure
+ headers_table.has (key) and headers_table @ key = value
+ end
+
+feature {EWSGI_RESPONSE_APPLICATION} -- Message body
+
+ read_block
+ -- Read a message body block.
+ do
+ if is_buffered then
+ end_of_blocks := True
+-- else
+-- -- File based block-based output
+-- -- TBD!
+ end
+ ensure
+ not is_buffered implies last_block.count <= max_block_size
+ end
+
+ last_block: STRING
+ -- Last message body block that has been read.
+ do
+ Result := current_block
+ end
+
+ is_buffered: BOOLEAN
+ -- Is the entire entity body buffered in memory (STRING)?
+
+ end_of_blocks: BOOLEAN
+ -- Has the last of the entity body blocks been read?
+
+ set_message_body (s: STRING)
+ -- Set the message body to 's'. Use this for when you want a memory
+ -- buffered response.
+ do
+ current_block := s
+ is_buffered := True
+ set_ready_to_transmit
+ ensure
+ is_buffered
+ ready_to_transmit
+ last_block.is_equal (s)
+ end
+
+ max_block_size: INTEGER
+ -- Maximum block size returned by message body if not buffered
+
+ set_max_block_size (block_size: INTEGER)
+ -- Set 'max_block_size'.
+ do
+ max_block_size := block_size
+ ensure
+ max_block_size = block_size
+ end
+
+-- write_message_block (s: STRING)
+-- -- Write message body block 's' to a temporary file. Us this when
+-- -- you want a non-buffered response.
+-- require
+-- not is_buffered
+-- do
+-- -- TBD!
+-- ensure
+-- not is_buffered
+-- not ready_to_transmit
+-- end
+
+feature {NONE} -- Implementation
+
+-- tmp_file_name: STRING
+
+-- tmp_file: detachable FILE
+-- -- Created with mktmp
+
+-- position: INTEGER
+-- -- Current read position in tmp_file
+
+ current_block: STRING
+ -- Current message body block
+
+ default_max_block_size: INTEGER = 65536
+ -- Default value of 'max_block_size'
+
+ crlf: STRING = "%/13/%/10/"
+
+ status_text (code: INTEGER): STRING
+ do
+ inspect code
+ when 500 then
+ Result := "Internal Server Error"
+ when 200 then
+ Result := "OK"
+ else
+ Result := "Code " + code.out
+ end
+ end
+
+note
+ copyright: "2011-2011, Eiffel Software and others"
+ license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
+ source: "[
+ Eiffel Software
+ 5949 Hollister Ave., Goleta, CA 93117 USA
+ Telephone 805-685-1006, Fax 805-685-6869
+ Website http://www.eiffel.com
+ Customer support http://support.eiffel.com
+ ]"
+end
diff --git a/library/server/ewsgi/examples/hello_world_with_response/src/framework/ewsgi_response_application.e b/library/server/ewsgi/examples/hello_world_with_response/src/framework/ewsgi_response_application.e
new file mode 100644
index 00000000..58757f43
--- /dev/null
+++ b/library/server/ewsgi/examples/hello_world_with_response/src/framework/ewsgi_response_application.e
@@ -0,0 +1,57 @@
+note
+ description: "Summary description for {EWSGI_RESPONSE_APPLICATION} "
+ legal: "See notice at end of class."
+ status: "See notice at end of class."
+ date: "$Date$"
+ revision: "$Revision$"
+
+deferred class
+ EWSGI_RESPONSE_APPLICATION
+
+feature -- Execution
+
+ execute (req: EWSGI_REQUEST; res: EWSGI_RESPONSE_STREAM)
+ -- Execute the request
+ -- See `req.input' for input stream
+ -- `req.environment' for the Gateway environment
+ -- and `res.output' for output stream
+ local
+ rs: EWSGI_RESPONSE
+ s: STRING
+ do
+ rs := response (req)
+ if rs.ready_to_transmit then
+ rs.transmit_to (res)
+ else
+ -- Report internal server error.
+ -- Response not ready to transmit!
+ -- Implementor of EWSGI_APPLICATION has not done his job!
+ create rs.make
+ rs.set_status (500)
+ rs.set_header ("Content-Type", "text/plain")
+ rs.set_message_body ("Incomplete server implementation: Response not ready to transmit.%NTell the programmer to finish his/her job!")
+ rs.transmit_to (res)
+ end
+ end
+
+feature -- Response
+
+ response (request: EWSGI_REQUEST): EWSGI_RESPONSE
+ -- HTTP response for given 'request'.
+ deferred
+ ensure
+ ready_to_transmit: Result.ready_to_transmit
+ end
+
+;note
+ copyright: "2011-2011, Eiffel Software and others"
+ license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
+ source: "[
+ Eiffel Software
+ 5949 Hollister Ave., Goleta, CA 93117 USA
+ Telephone 805-685-1006, Fax 805-685-6869
+ Website http://www.eiffel.com
+ Customer support http://support.eiffel.com
+ ]"
+
+end
diff --git a/library/server/ewsgi/examples/hello_world_with_response/src/hello_world.e b/library/server/ewsgi/examples/hello_world_with_response/src/hello_world.e
new file mode 100644
index 00000000..5d574f5c
--- /dev/null
+++ b/library/server/ewsgi/examples/hello_world_with_response/src/hello_world.e
@@ -0,0 +1,36 @@
+note
+ description : "Objects that ..."
+ author : "$Author$"
+ date : "$Date$"
+ revision : "$Revision$"
+
+class
+ HELLO_WORLD
+
+inherit
+ EWSGI_RESPONSE_APPLICATION
+
+ DEFAULT_EWSGI_APPLICATION
+
+create
+ make_and_launch
+
+feature -- Response
+
+ response (request: EWSGI_REQUEST): EWSGI_RESPONSE
+ do
+ create {HELLO_WORLD_RESPONSE} Result.make
+ Result.set_status (200)
+ Result.set_header ("Content-Type", "text/html; charset=utf-8")
+ end
+note
+ copyright: "2011-2011, Eiffel Software and others"
+ license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
+ source: "[
+ Eiffel Software
+ 5949 Hollister Ave., Goleta, CA 93117 USA
+ Telephone 805-685-1006, Fax 805-685-6869
+ Website http://www.eiffel.com
+ Customer support http://support.eiffel.com
+ ]"
+end
diff --git a/library/server/ewsgi/examples/hello_world_with_response/src/hello_world_response.e b/library/server/ewsgi/examples/hello_world_with_response/src/hello_world_response.e
new file mode 100644
index 00000000..56d64da8
--- /dev/null
+++ b/library/server/ewsgi/examples/hello_world_with_response/src/hello_world_response.e
@@ -0,0 +1,67 @@
+note
+ description: "A streaming (non-buffered) Hello World example."
+ author: "Paul Cohen "
+ status: "Draft"
+
+class HELLO_WORLD_RESPONSE
+
+inherit
+ EWSGI_RESPONSE
+ redefine
+ make,
+ read_block
+ end
+
+create
+ make
+
+feature {NONE} -- Initialization
+
+ make
+ do
+ precursor
+ set_ready_to_transmit
+ current_hello := 0
+ end
+
+feature {NONE} -- Entity body
+
+ read_block
+ -- Reads a block of 100000 lines of "Hello World".
+ local
+ i: INTEGER
+ do
+ if current_hello >= 100000 then
+ end_of_blocks := True
+ else
+ if current_hello = 0 then
+ current_block := "%N"
+ end
+ from
+ i := 0
+ until
+ i = 10000
+ loop
+ current_block.append ("Hello World ("+ current_hello.out +","+ i.out +")
%N")
+ i := i + 1
+ end
+ current_hello := current_hello + i
+ if current_hello = 100000 then
+ current_block.append ("Bye bye..
")
+ end
+ end
+ end
+
+ current_hello: INTEGER
+
+;note
+ copyright: "2011-2011, Eiffel Software and others"
+ license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
+ source: "[
+ Eiffel Software
+ 5949 Hollister Ave., Goleta, CA 93117 USA
+ Telephone 805-685-1006, Fax 805-685-6869
+ Website http://www.eiffel.com
+ Customer support http://support.eiffel.com
+ ]"
+end
diff --git a/library/server/ewsgi/specification/ewsgi_agent_application.e b/library/server/ewsgi/specification/ewsgi_agent_application.e
index 58f45846..f2e2c521 100644
--- a/library/server/ewsgi/specification/ewsgi_agent_application.e
+++ b/library/server/ewsgi/specification/ewsgi_agent_application.e
@@ -27,7 +27,7 @@ feature {NONE} -- Implementation
request_creator: FUNCTION [ANY, TUPLE [env: EWSGI_ENVIRONMENT; input: EWSGI_INPUT_STREAM], EWSGI_REQUEST]
- response_creator: FUNCTION [ANY, TUPLE [req: EWSGI_REQUEST; output: EWSGI_OUTPUT_STREAM], EWSGI_RESPONSE]
+ response_creator: FUNCTION [ANY, TUPLE [req: EWSGI_REQUEST; output: EWSGI_OUTPUT_STREAM], EWSGI_RESPONSE_STREAM]
callback: PROCEDURE [ANY, TUPLE [req: like new_request; res: like new_response]]
-- Procedure called on `execute'
@@ -45,7 +45,7 @@ feature -- Factory
Result := request_creator.item ([env, a_input])
end
- new_response (req: EWSGI_REQUEST; a_output: EWSGI_OUTPUT_STREAM): EWSGI_RESPONSE
+ new_response (req: EWSGI_REQUEST; a_output: EWSGI_OUTPUT_STREAM): EWSGI_RESPONSE_STREAM
do
Result := response_creator.item ([req, a_output])
end
diff --git a/library/server/ewsgi/specification/ewsgi_application.e b/library/server/ewsgi/specification/ewsgi_application.e
index ab993eea..958888e1 100644
--- a/library/server/ewsgi/specification/ewsgi_application.e
+++ b/library/server/ewsgi/specification/ewsgi_application.e
@@ -33,7 +33,7 @@ feature -- Process request
feature {NONE} -- Execution
- execute (req: EWSGI_REQUEST; res: EWSGI_RESPONSE)
+ execute (req: EWSGI_REQUEST; res: EWSGI_RESPONSE_STREAM)
-- Execute the request
-- See `req.input' for input stream
-- `req.environment' for the Gateway environment
@@ -48,12 +48,12 @@ feature {NONE} -- Execution
do
end
- post_execute (req: detachable EWSGI_REQUEST; res: detachable EWSGI_RESPONSE)
+ post_execute (req: detachable EWSGI_REQUEST; res: detachable EWSGI_RESPONSE_STREAM)
-- Operation processed after `execute', or after `rescue_execute'
do
end
- rescue_execute (req: detachable EWSGI_REQUEST; res: detachable EWSGI_RESPONSE; a_exception: detachable EXCEPTION)
+ rescue_execute (req: detachable EWSGI_REQUEST; res: detachable EWSGI_RESPONSE_STREAM; a_exception: detachable EXCEPTION)
-- Operation processed on rescue of `execute'
do
post_execute (req, res)
@@ -64,16 +64,16 @@ feature -- Factory
new_request (env: EWSGI_ENVIRONMENT; a_input: EWSGI_INPUT_STREAM): EWSGI_REQUEST
-- New Request context based on `env' and `a_input'
--| note: you can redefine this function to create your own
- --| descendant of GW_REQUEST_CONTEXT , or even to reuse/recycle existing
- --| instance of GW_REQUEST_CONTEXT
+ --| descendant of EWSGI_REQUEST , or even to reuse/recycle existing
+ --| instance of EWSGI_REQUEST
deferred
end
- new_response (req: EWSGI_REQUEST; a_output: EWSGI_OUTPUT_STREAM): EWSGI_RESPONSE
+ new_response (req: EWSGI_REQUEST; a_output: EWSGI_OUTPUT_STREAM): EWSGI_RESPONSE_STREAM
-- New Response based on `req' and `a_output'
--| note: you can redefine this function to create your own
- --| descendant of GW_RESPONSE , or even to reuse/recycle existing
- --| instance of GW_RESPONSE
+ --| descendant of EWSGI_RESPONSE_STREAM , or even to reuse/recycle existing
+ --| instance of EWSGI_RESPONSE_STREAM
deferred
end
diff --git a/library/server/ewsgi/specification/response/ewsgi_response.e b/library/server/ewsgi/specification/response/ewsgi_response_stream.e
similarity index 95%
rename from library/server/ewsgi/specification/response/ewsgi_response.e
rename to library/server/ewsgi/specification/response/ewsgi_response_stream.e
index d813ad66..00c52560 100644
--- a/library/server/ewsgi/specification/response/ewsgi_response.e
+++ b/library/server/ewsgi/specification/response/ewsgi_response_stream.e
@@ -1,11 +1,11 @@
note
- description: "Summary description for {EWSGI_RESPONSE}."
+ description: "Summary description for {EWSGI_RESPONSE_STREAM}."
author: ""
date: "$Date$"
revision: "$Revision$"
deferred class
- EWSGI_RESPONSE
+ EWSGI_RESPONSE_STREAM
feature {EWSGI_APPLICATION} -- Commit
diff --git a/library/server/ewsgi/src/application/gw_application_imp.e b/library/server/ewsgi/src/application/gw_application_imp.e
index 2821f2b1..5bec3260 100644
--- a/library/server/ewsgi/src/application/gw_application_imp.e
+++ b/library/server/ewsgi/src/application/gw_application_imp.e
@@ -29,7 +29,7 @@ feature -- Execution
Precursor (env, a_input, a_output)
end
- rescue_execute (req: detachable EWSGI_REQUEST; res: detachable EWSGI_RESPONSE; a_exception: detachable EXCEPTION)
+ rescue_execute (req: detachable EWSGI_REQUEST; res: detachable EWSGI_RESPONSE_STREAM; a_exception: detachable EXCEPTION)
-- Operation processed on rescue of `execute'
do
if
@@ -50,9 +50,9 @@ feature -- Factory
Result.execution_variables.set_variable (request_count.out, "REQUEST_COUNT")
end
- new_response (req: EWSGI_REQUEST; a_output: EWSGI_OUTPUT_STREAM): EWSGI_RESPONSE
+ new_response (req: EWSGI_REQUEST; a_output: EWSGI_OUTPUT_STREAM): EWSGI_RESPONSE_STREAM
do
- create {GW_RESPONSE_IMP} Result.make (a_output)
+ create {GW_RESPONSE_STREAM_IMP} Result.make (a_output)
end
;note
diff --git a/library/server/ewsgi/src/response/gw_buffered_response.e b/library/server/ewsgi/src/response/gw_buffered_response.e
index b2983275..047b35cd 100644
--- a/library/server/ewsgi/src/response/gw_buffered_response.e
+++ b/library/server/ewsgi/src/response/gw_buffered_response.e
@@ -8,7 +8,7 @@ class
GW_BUFFERED_RESPONSE
inherit
- EWSGI_RESPONSE
+ EWSGI_RESPONSE_STREAM
create {EWSGI_APPLICATION}
make
diff --git a/library/server/ewsgi/src/response/gw_in_memory_response.e b/library/server/ewsgi/src/response/gw_in_memory_response.e
index cb08a1af..b46b9ee7 100644
--- a/library/server/ewsgi/src/response/gw_in_memory_response.e
+++ b/library/server/ewsgi/src/response/gw_in_memory_response.e
@@ -8,7 +8,7 @@ class
GW_IN_MEMORY_RESPONSE
inherit
- EWSGI_RESPONSE
+ EWSGI_RESPONSE_STREAM
redefine
commit
end
diff --git a/library/server/ewsgi/src/response/gw_response_imp.e b/library/server/ewsgi/src/response/gw_response_stream_imp.e
similarity index 94%
rename from library/server/ewsgi/src/response/gw_response_imp.e
rename to library/server/ewsgi/src/response/gw_response_stream_imp.e
index b52ae973..31402320 100644
--- a/library/server/ewsgi/src/response/gw_response_imp.e
+++ b/library/server/ewsgi/src/response/gw_response_stream_imp.e
@@ -1,14 +1,14 @@
note
- description: "Summary description for {GW_RESPONSE_IMP}."
+ description: "Summary description for {GW_RESPONSE_STREAM_IMP}."
author: ""
date: "$Date$"
revision: "$Revision$"
class
- GW_RESPONSE_IMP
+ GW_RESPONSE_STREAM_IMP
inherit
- EWSGI_RESPONSE
+ EWSGI_RESPONSE_STREAM
create {EWSGI_APPLICATION}
make
diff --git a/library/server/ewsgi/src/support/gw_header.e b/library/server/ewsgi/src/support/gw_header.e
index 936f1ed7..13d4dd1a 100644
--- a/library/server/ewsgi/src/support/gw_header.e
+++ b/library/server/ewsgi/src/support/gw_header.e
@@ -12,6 +12,14 @@ note
class
GW_HEADER
+inherit
+ ANY
+
+ HTTP_STATUS_CODE_MESSAGES
+ export
+ {NONE} all
+ end
+
create
make
@@ -84,6 +92,18 @@ feature -- Header change: general
feature -- Content related header
+ put_status (c: INTEGER)
+ local
+ s: STRING
+ do
+ create s.make_from_string (c.out)
+ if attached http_status_code_message (c) as msg then
+ s.append_character (' ')
+ s.append (msg)
+ end
+ put_header_key_value ("Status", s)
+ end
+
put_content_type (t: STRING)
do
put_header_key_value (name_content_type, t)