177 lines
4.3 KiB
Plaintext
177 lines
4.3 KiB
Plaintext
note
|
|
description: "Interface to send response back to the client"
|
|
date: "$Date$"
|
|
revision: "$Revision$"
|
|
|
|
deferred class
|
|
WGI_RESPONSE
|
|
|
|
feature {WGI_CONNECTOR, WGI_SERVICE, WGI_EXPORTER} -- Commit
|
|
|
|
push
|
|
-- Commit and push response
|
|
do
|
|
if attached post_commit_action as act then
|
|
act.call (Void)
|
|
end
|
|
commit
|
|
end
|
|
|
|
commit
|
|
-- Commit the current response
|
|
deferred
|
|
ensure
|
|
status_is_set: status_is_set
|
|
status_committed: status_committed
|
|
header_committed: header_committed
|
|
message_committed: message_committed
|
|
end
|
|
|
|
feature -- Access: commit
|
|
|
|
post_commit_action: detachable PROCEDURE
|
|
-- Action associated with the final `commit' execution
|
|
-- Note: useful to trigger action just after the
|
|
-- response is transfered to the client.
|
|
|
|
feature -- Change: commit
|
|
|
|
set_post_commit_action (act: like post_commit_action)
|
|
-- Assign `act' to `post_commit_action'
|
|
do
|
|
post_commit_action := act
|
|
end
|
|
|
|
feature -- Status report
|
|
|
|
status_committed: BOOLEAN
|
|
-- Is status code set and committed?
|
|
-- i.e: sent to the client and could not be changed anymore
|
|
deferred
|
|
ensure
|
|
committed_implies_set: Result implies status_is_set
|
|
end
|
|
|
|
header_committed: BOOLEAN
|
|
-- Header committed?
|
|
deferred
|
|
end
|
|
|
|
message_committed: BOOLEAN
|
|
-- Message committed?
|
|
deferred
|
|
end
|
|
|
|
message_writable: BOOLEAN
|
|
-- Can message be written?
|
|
deferred
|
|
end
|
|
|
|
feature -- Status setting
|
|
|
|
status_is_set: BOOLEAN
|
|
-- Is status set?
|
|
deferred
|
|
end
|
|
|
|
set_status_code (a_code: INTEGER; a_reason_phrase: detachable READABLE_STRING_8)
|
|
-- Set response status code with custom `a_reason_phrase' if precised
|
|
-- Should be done before sending any data back to the client
|
|
require
|
|
a_code_positive: a_code > 0
|
|
status_not_set: not status_committed
|
|
header_not_committed: not header_committed
|
|
deferred
|
|
ensure
|
|
status_code_set: status_code = a_code
|
|
status_reason_phrase_set: status_reason_phrase = a_reason_phrase
|
|
status_set: status_is_set
|
|
end
|
|
|
|
status_code: INTEGER
|
|
-- Response status
|
|
deferred
|
|
end
|
|
|
|
status_reason_phrase: detachable READABLE_STRING_8
|
|
-- Custom status reason phrase for the Response (optional)
|
|
deferred
|
|
ensure
|
|
Result /= Void implies status_is_set
|
|
end
|
|
|
|
feature -- Header output operation
|
|
|
|
put_header_text (a_text: READABLE_STRING_8)
|
|
-- Write http header string `a_text'
|
|
-- It should not contain the ending CR LF CR LF
|
|
-- since it is the duty of `put_header_text' to write it.
|
|
require
|
|
a_text_has_single_ending_crlf: a_text.count > 2 implies not a_text.substring (a_text.count - 2, a_text.count).same_string ("%R%N")
|
|
a_text_does_not_has_ending_crlf_crlf: a_text.count > 4 implies not a_text.substring (a_text.count - 4, a_text.count).same_string ("%R%N%R%N")
|
|
status_set: status_is_set
|
|
header_not_committed: not header_committed
|
|
deferred
|
|
ensure
|
|
status_set: status_is_set
|
|
status_committed: status_committed
|
|
header_committed: header_committed
|
|
message_writable: message_writable
|
|
end
|
|
|
|
feature -- Output operation
|
|
|
|
put_character (c: CHARACTER_8)
|
|
-- Send the character `c'
|
|
require
|
|
message_writable: message_writable
|
|
deferred
|
|
end
|
|
|
|
put_string (s: READABLE_STRING_8)
|
|
-- Send the string `s'
|
|
require
|
|
message_writable: message_writable
|
|
deferred
|
|
end
|
|
|
|
put_substring (s: READABLE_STRING_8; a_begin_index, a_end_index: INTEGER)
|
|
-- Send the substring `s[a_begin_index:a_end_index]'
|
|
require
|
|
message_writable: message_writable
|
|
deferred
|
|
end
|
|
|
|
put_file_content (f: FILE; a_offset: INTEGER; a_count: INTEGER)
|
|
-- Send `a_count' bytes from the content of file `f' starting at offset `a_offset'.
|
|
require
|
|
message_writable: message_writable
|
|
not_too_big: a_offset + a_count <= f.count
|
|
deferred
|
|
end
|
|
|
|
flush
|
|
-- Flush if it makes sense
|
|
deferred
|
|
end
|
|
|
|
feature -- Error reporting
|
|
|
|
put_error (a_message: READABLE_STRING_8)
|
|
-- Report error described by `a_message'
|
|
-- This might be used by the underlying connector
|
|
deferred
|
|
end
|
|
|
|
note
|
|
copyright: "2011-2015, Jocelyn Fiat, Javier Velilla, 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
|