- Adopted deferred WGI_VALUE design for Result type of *_parameter and similar functions
- Adopted the ITERATION_CURSOR [WGI_VALUE] design for *_parameters and similar functions - renamed parameter as item - provided helper function to handle "string" value parameters Experimental for now.
This commit is contained in:
@@ -78,7 +78,7 @@ feature -- Server
|
|||||||
do
|
do
|
||||||
create req.make (env, create {EWF_NINO_INPUT_STREAM}.make (a_input))
|
create req.make (env, create {EWF_NINO_INPUT_STREAM}.make (a_input))
|
||||||
create res.make (create {EWF_NINO_OUTPUT_STREAM}.make (a_output))
|
create res.make (create {EWF_NINO_OUTPUT_STREAM}.make (a_output))
|
||||||
req.set_meta_variable ("RAW_HEADER_DATA", a_headers_text)
|
req.set_meta_string_variable ("RAW_HEADER_DATA", a_headers_text)
|
||||||
application.execute (req, res)
|
application.execute (req, res)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,71 @@
|
|||||||
|
note
|
||||||
|
description: "Summary description for {WGI_STRING_VALUE}."
|
||||||
|
author: ""
|
||||||
|
date: "$Date$"
|
||||||
|
revision: "$Revision$"
|
||||||
|
|
||||||
|
class
|
||||||
|
WGI_STRING_VALUE
|
||||||
|
|
||||||
|
inherit
|
||||||
|
WGI_VALUE
|
||||||
|
|
||||||
|
create
|
||||||
|
make
|
||||||
|
|
||||||
|
convert
|
||||||
|
as_string: {READABLE_STRING_32, STRING_32}
|
||||||
|
|
||||||
|
feature {NONE} -- Initialization
|
||||||
|
|
||||||
|
make (a_name: like name; a_value: like value)
|
||||||
|
do
|
||||||
|
name := a_name
|
||||||
|
value := a_value
|
||||||
|
end
|
||||||
|
|
||||||
|
feature -- Access
|
||||||
|
|
||||||
|
name: READABLE_STRING_GENERAL
|
||||||
|
|
||||||
|
value: READABLE_STRING_32
|
||||||
|
|
||||||
|
feature -- Helper
|
||||||
|
|
||||||
|
same_string (a_other: READABLE_STRING_GENERAL): BOOLEAN
|
||||||
|
-- Does `a_other' represent the same string as `Current'?
|
||||||
|
do
|
||||||
|
Result := value.same_string_general (a_other)
|
||||||
|
end
|
||||||
|
|
||||||
|
is_case_insensitive_equal (a_other: READABLE_STRING_8): BOOLEAN
|
||||||
|
-- Does `a_other' represent the same case insensitive string as `Current'?
|
||||||
|
local
|
||||||
|
v: like value
|
||||||
|
do
|
||||||
|
v := value
|
||||||
|
if v = a_other then
|
||||||
|
Result := True
|
||||||
|
elseif v.is_valid_as_string_8 then
|
||||||
|
Result := v.is_case_insensitive_equal (a_other)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
feature -- Conversion
|
||||||
|
|
||||||
|
as_string: STRING_32
|
||||||
|
do
|
||||||
|
create Result.make_from_string (value)
|
||||||
|
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
|
||||||
@@ -89,14 +89,14 @@ feature -- Access: extra values
|
|||||||
|
|
||||||
feature -- Access: CGI meta variables
|
feature -- Access: CGI meta variables
|
||||||
|
|
||||||
meta_variable (a_name: READABLE_STRING_GENERAL): detachable READABLE_STRING_32
|
meta_variable (a_name: READABLE_STRING_GENERAL): detachable WGI_VALUE
|
||||||
-- Environment variable related to `a_name'
|
-- Environment variable related to `a_name'
|
||||||
require
|
require
|
||||||
a_name_valid: a_name /= Void and then not a_name.is_empty
|
a_name_valid: a_name /= Void and then not a_name.is_empty
|
||||||
deferred
|
deferred
|
||||||
end
|
end
|
||||||
|
|
||||||
meta_variables: HASH_TABLE [READABLE_STRING_32, READABLE_STRING_GENERAL]
|
meta_variables: ITERATION_CURSOR [WGI_VALUE]
|
||||||
-- These variables are specific to requests made with HTTP.
|
-- These variables are specific to requests made with HTTP.
|
||||||
-- Interpretation of these variables may depend on the value of
|
-- Interpretation of these variables may depend on the value of
|
||||||
-- SERVER_PROTOCOL.
|
-- SERVER_PROTOCOL.
|
||||||
@@ -575,28 +575,14 @@ feature -- Extra CGI environment variables
|
|||||||
deferred
|
deferred
|
||||||
end
|
end
|
||||||
|
|
||||||
--feature -- Access: execution variables
|
|
||||||
|
|
||||||
-- execution_variables: WGI_VARIABLES [STRING_32]
|
|
||||||
-- -- Execution variables set by the application
|
|
||||||
-- deferred
|
|
||||||
-- end
|
|
||||||
|
|
||||||
-- execution_variable (a_name: STRING): detachable STRING_32
|
|
||||||
-- -- Execution variable related to `a_name'
|
|
||||||
-- require
|
|
||||||
-- a_name_valid: a_name /= Void and then not a_name.is_empty
|
|
||||||
-- deferred
|
|
||||||
-- end
|
|
||||||
|
|
||||||
feature -- Query string Parameters
|
feature -- Query string Parameters
|
||||||
|
|
||||||
query_parameters: HASH_TABLE [READABLE_STRING_32, READABLE_STRING_GENERAL]
|
query_parameters: ITERATION_CURSOR [WGI_VALUE]
|
||||||
-- Variables extracted from QUERY_STRING
|
-- Variables extracted from QUERY_STRING
|
||||||
deferred
|
deferred
|
||||||
end
|
end
|
||||||
|
|
||||||
query_parameter (a_name: READABLE_STRING_GENERAL): detachable READABLE_STRING_32
|
query_parameter (a_name: READABLE_STRING_GENERAL): detachable WGI_VALUE
|
||||||
-- Parameter for name `n'.
|
-- Parameter for name `n'.
|
||||||
require
|
require
|
||||||
a_name_valid: a_name /= Void and then not a_name.is_empty
|
a_name_valid: a_name /= Void and then not a_name.is_empty
|
||||||
@@ -605,12 +591,12 @@ feature -- Query string Parameters
|
|||||||
|
|
||||||
feature -- Form fields and related
|
feature -- Form fields and related
|
||||||
|
|
||||||
form_data_parameters: HASH_TABLE [READABLE_STRING_32, READABLE_STRING_GENERAL]
|
form_data_parameters: ITERATION_CURSOR [WGI_VALUE]
|
||||||
-- Variables sent by POST request
|
-- Variables sent by POST request
|
||||||
deferred
|
deferred
|
||||||
end
|
end
|
||||||
|
|
||||||
form_data_parameter (a_name: READABLE_STRING_GENERAL): detachable READABLE_STRING_32
|
form_data_parameter (a_name: READABLE_STRING_GENERAL): detachable WGI_VALUE
|
||||||
-- Field for name `a_name'.
|
-- Field for name `a_name'.
|
||||||
require
|
require
|
||||||
a_name_valid: a_name /= Void and then not a_name.is_empty
|
a_name_valid: a_name /= Void and then not a_name.is_empty
|
||||||
@@ -630,12 +616,12 @@ feature -- Form fields and related
|
|||||||
|
|
||||||
feature -- Cookies
|
feature -- Cookies
|
||||||
|
|
||||||
cookies: HASH_TABLE [READABLE_STRING_32, READABLE_STRING_GENERAL]
|
cookies: ITERATION_CURSOR [WGI_VALUE]
|
||||||
-- Expanded cookies variable
|
-- Expanded cookies variable
|
||||||
deferred
|
deferred
|
||||||
end
|
end
|
||||||
|
|
||||||
cookie (a_name: READABLE_STRING_GENERAL): detachable READABLE_STRING_32
|
cookie (a_name: READABLE_STRING_GENERAL): detachable WGI_VALUE
|
||||||
-- Field for name `a_name'.
|
-- Field for name `a_name'.
|
||||||
require
|
require
|
||||||
a_name_valid: a_name /= Void and then not a_name.is_empty
|
a_name_valid: a_name /= Void and then not a_name.is_empty
|
||||||
@@ -644,14 +630,26 @@ feature -- Cookies
|
|||||||
|
|
||||||
feature -- Access: global variable
|
feature -- Access: global variable
|
||||||
|
|
||||||
parameters: HASH_TABLE [READABLE_STRING_32, READABLE_STRING_GENERAL]
|
parameters: like items
|
||||||
|
obsolete "use items"
|
||||||
|
do
|
||||||
|
Result := items
|
||||||
|
end
|
||||||
|
|
||||||
|
parameter (a_name: READABLE_STRING_GENERAL): like item
|
||||||
|
obsolete "use item"
|
||||||
|
do
|
||||||
|
Result := item (a_name)
|
||||||
|
end
|
||||||
|
|
||||||
|
items: ITERATION_CURSOR [WGI_VALUE]
|
||||||
-- Table containing all the various variables
|
-- Table containing all the various variables
|
||||||
-- Warning: this is computed each time, if you change the content of other containers
|
-- Warning: this is computed each time, if you change the content of other containers
|
||||||
-- this won't update this Result's content, unless you query it again
|
-- this won't update this Result's content, unless you query it again
|
||||||
deferred
|
deferred
|
||||||
end
|
end
|
||||||
|
|
||||||
parameter (a_name: READABLE_STRING_GENERAL): detachable READABLE_STRING_32
|
item (a_name: READABLE_STRING_GENERAL): detachable WGI_VALUE
|
||||||
-- Variable named `a_name' from any of the variables container
|
-- Variable named `a_name' from any of the variables container
|
||||||
-- and following a specific order
|
-- and following a specific order
|
||||||
-- execution, environment, get, post, cookies
|
-- execution, environment, get, post, cookies
|
||||||
|
|||||||
48
library/server/ewsgi/specification/request/wgi_value.e
Normal file
48
library/server/ewsgi/specification/request/wgi_value.e
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
note
|
||||||
|
description: "Summary description for {WGI_VALUE}."
|
||||||
|
author: ""
|
||||||
|
date: "$Date$"
|
||||||
|
revision: "$Revision$"
|
||||||
|
|
||||||
|
deferred class
|
||||||
|
WGI_VALUE
|
||||||
|
|
||||||
|
convert
|
||||||
|
as_string: {READABLE_STRING_32, STRING_32}
|
||||||
|
|
||||||
|
feature -- Access
|
||||||
|
|
||||||
|
name: READABLE_STRING_GENERAL
|
||||||
|
-- Parameter name
|
||||||
|
deferred
|
||||||
|
end
|
||||||
|
|
||||||
|
feature -- Helper
|
||||||
|
|
||||||
|
same_string (a_other: READABLE_STRING_GENERAL): BOOLEAN
|
||||||
|
-- Does `a_other' represent the same string as `Current'?
|
||||||
|
deferred
|
||||||
|
end
|
||||||
|
|
||||||
|
is_case_insensitive_equal (a_other: READABLE_STRING_8): BOOLEAN
|
||||||
|
-- Does `a_other' represent the same case insensitive string as `Current'?
|
||||||
|
deferred
|
||||||
|
end
|
||||||
|
|
||||||
|
feature -- Query
|
||||||
|
|
||||||
|
as_string: STRING_32
|
||||||
|
deferred
|
||||||
|
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
|
||||||
@@ -34,33 +34,33 @@ feature {NONE} -- Initialization
|
|||||||
analyze
|
analyze
|
||||||
end
|
end
|
||||||
|
|
||||||
set_meta_parameters (a_vars: HASH_TABLE [READABLE_STRING_8, READABLE_STRING_8])
|
set_meta_parameters (a_vars: HASH_TABLE [READABLE_STRING_8, READABLE_STRING_GENERAL])
|
||||||
-- Fill with variable from `a_vars'
|
-- Fill with variable from `a_vars'
|
||||||
local
|
local
|
||||||
s: like meta_variable
|
s: like meta_string_variable
|
||||||
table: HASH_TABLE [READABLE_STRING_32, READABLE_STRING_GENERAL]
|
table: HASH_TABLE [WGI_VALUE, READABLE_STRING_GENERAL]
|
||||||
do
|
do
|
||||||
create {STRING_32} empty_string.make_empty
|
create {STRING_32} empty_string.make_empty
|
||||||
|
|
||||||
create table.make (a_vars.count)
|
create table.make (a_vars.count)
|
||||||
meta_variables := table
|
meta_variables_table := table
|
||||||
from
|
from
|
||||||
a_vars.start
|
a_vars.start
|
||||||
until
|
until
|
||||||
a_vars.after
|
a_vars.after
|
||||||
loop
|
loop
|
||||||
table.force (a_vars.item_for_iteration, a_vars.key_for_iteration)
|
table.force (new_string_value (a_vars.key_for_iteration, a_vars.item_for_iteration), a_vars.key_for_iteration)
|
||||||
a_vars.forth
|
a_vars.forth
|
||||||
end
|
end
|
||||||
|
|
||||||
--| QUERY_STRING
|
--| QUERY_STRING
|
||||||
query_string := meta_parameter_or_default ({WGI_META_NAMES}.query_string, empty_string, False)
|
query_string := meta_string_variable_or_default ({WGI_META_NAMES}.query_string, empty_string, False)
|
||||||
|
|
||||||
--| REQUEST_METHOD
|
--| REQUEST_METHOD
|
||||||
request_method := meta_parameter_or_default ({WGI_META_NAMES}.request_method, empty_string, False)
|
request_method := meta_string_variable_or_default ({WGI_META_NAMES}.request_method, empty_string, False)
|
||||||
|
|
||||||
--| CONTENT_TYPE
|
--| CONTENT_TYPE
|
||||||
s := meta_variable ({WGI_META_NAMES}.content_type)
|
s := meta_string_variable ({WGI_META_NAMES}.content_type)
|
||||||
if s /= Void and then not s.is_empty then
|
if s /= Void and then not s.is_empty then
|
||||||
content_type := s
|
content_type := s
|
||||||
else
|
else
|
||||||
@@ -68,7 +68,7 @@ feature {NONE} -- Initialization
|
|||||||
end
|
end
|
||||||
|
|
||||||
--| CONTENT_LENGTH
|
--| CONTENT_LENGTH
|
||||||
s := meta_variable ({WGI_META_NAMES}.content_length)
|
s := meta_string_variable ({WGI_META_NAMES}.content_length)
|
||||||
content_length := s
|
content_length := s
|
||||||
if s /= Void and then s.is_natural_64 then
|
if s /= Void and then s.is_natural_64 then
|
||||||
content_length_value := s.to_natural_64
|
content_length_value := s.to_natural_64
|
||||||
@@ -77,13 +77,13 @@ feature {NONE} -- Initialization
|
|||||||
end
|
end
|
||||||
|
|
||||||
--| PATH_INFO
|
--| PATH_INFO
|
||||||
path_info := meta_parameter_or_default ({WGI_META_NAMES}.path_info, empty_string, False)
|
path_info := meta_string_variable_or_default ({WGI_META_NAMES}.path_info, empty_string, False)
|
||||||
|
|
||||||
--| SERVER_NAME
|
--| SERVER_NAME
|
||||||
server_name := meta_parameter_or_default ({WGI_META_NAMES}.server_name, empty_string, False)
|
server_name := meta_string_variable_or_default ({WGI_META_NAMES}.server_name, empty_string, False)
|
||||||
|
|
||||||
--| SERVER_PORT
|
--| SERVER_PORT
|
||||||
s := meta_variable ({WGI_META_NAMES}.server_port)
|
s := meta_string_variable ({WGI_META_NAMES}.server_port)
|
||||||
if s /= Void and then s.is_integer then
|
if s /= Void and then s.is_integer then
|
||||||
server_port := s.to_integer
|
server_port := s.to_integer
|
||||||
else
|
else
|
||||||
@@ -91,16 +91,16 @@ feature {NONE} -- Initialization
|
|||||||
end
|
end
|
||||||
|
|
||||||
--| SCRIPT_NAME
|
--| SCRIPT_NAME
|
||||||
script_name := meta_parameter_or_default ({WGI_META_NAMES}.script_name, empty_string, False)
|
script_name := meta_string_variable_or_default ({WGI_META_NAMES}.script_name, empty_string, False)
|
||||||
|
|
||||||
--| REMOTE_ADDR
|
--| REMOTE_ADDR
|
||||||
remote_addr := meta_parameter_or_default ({WGI_META_NAMES}.remote_addr, empty_string, False)
|
remote_addr := meta_string_variable_or_default ({WGI_META_NAMES}.remote_addr, empty_string, False)
|
||||||
|
|
||||||
--| REMOTE_HOST
|
--| REMOTE_HOST
|
||||||
remote_host := meta_parameter_or_default ({WGI_META_NAMES}.remote_host, empty_string, False)
|
remote_host := meta_string_variable_or_default ({WGI_META_NAMES}.remote_host, empty_string, False)
|
||||||
|
|
||||||
--| REQUEST_URI
|
--| REQUEST_URI
|
||||||
request_uri := meta_parameter_or_default ({WGI_META_NAMES}.request_uri, empty_string, False)
|
request_uri := meta_string_variable_or_default ({WGI_META_NAMES}.request_uri, empty_string, False)
|
||||||
end
|
end
|
||||||
|
|
||||||
initialize
|
initialize
|
||||||
@@ -114,13 +114,13 @@ feature {NONE} -- Initialization
|
|||||||
if attached request_uri as rq_uri then
|
if attached request_uri as rq_uri then
|
||||||
p := rq_uri.index_of ('?', 1)
|
p := rq_uri.index_of ('?', 1)
|
||||||
if p > 0 then
|
if p > 0 then
|
||||||
set_meta_variable (rq_uri.substring (1, p-1), {WGI_META_NAMES}.self)
|
set_meta_string_variable (rq_uri.substring (1, p-1), {WGI_META_NAMES}.self)
|
||||||
else
|
else
|
||||||
set_meta_variable (rq_uri, {WGI_META_NAMES}.self)
|
set_meta_string_variable (rq_uri, {WGI_META_NAMES}.self)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if meta_variable ({WGI_META_NAMES}.request_time) = Void then
|
if meta_variable ({WGI_META_NAMES}.request_time) = Void then
|
||||||
set_meta_variable (date_time_utilities.unix_time_stamp (Void).out, {WGI_META_NAMES}.request_time)
|
set_meta_string_variable (date_time_utilities.unix_time_stamp (Void).out, {WGI_META_NAMES}.request_time)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -160,51 +160,65 @@ feature -- Access extra information
|
|||||||
-- Request time (UTC)
|
-- Request time (UTC)
|
||||||
do
|
do
|
||||||
if
|
if
|
||||||
attached meta_variable ({WGI_META_NAMES}.request_time) as t and then
|
attached {WGI_STRING_VALUE} meta_variable ({WGI_META_NAMES}.request_time) as t and then
|
||||||
t.is_integer_64
|
t.value.is_integer_64
|
||||||
then
|
then
|
||||||
Result := date_time_utilities.unix_time_stamp_to_date_time (t.to_integer_64)
|
Result := date_time_utilities.unix_time_stamp_to_date_time (t.value.to_integer_64)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
feature -- Access: CGI meta parameters
|
feature {NONE} -- Access: CGI meta parameters
|
||||||
|
|
||||||
meta_variables: HASH_TABLE [READABLE_STRING_32, READABLE_STRING_GENERAL]
|
meta_variables_table: HASH_TABLE [WGI_VALUE, READABLE_STRING_GENERAL]
|
||||||
-- CGI Environment parameters
|
-- CGI Environment parameters
|
||||||
|
|
||||||
meta_variable (a_name: READABLE_STRING_GENERAL): detachable READABLE_STRING_32
|
feature -- Access: CGI meta parameters
|
||||||
-- CGI meta variable related to `a_name'
|
|
||||||
|
meta_variables: ITERATION_CURSOR [WGI_VALUE]
|
||||||
do
|
do
|
||||||
Result := meta_variables.item (a_name)
|
Result := meta_variables_table.new_cursor
|
||||||
end
|
end
|
||||||
|
|
||||||
meta_parameter_or_default (a_name: READABLE_STRING_GENERAL; a_default: READABLE_STRING_32; use_default_when_empty: BOOLEAN): READABLE_STRING_32
|
meta_variable (a_name: READABLE_STRING_GENERAL): detachable WGI_VALUE
|
||||||
|
-- CGI meta variable related to `a_name'
|
||||||
|
do
|
||||||
|
Result := meta_variables_table.item (a_name)
|
||||||
|
end
|
||||||
|
|
||||||
|
meta_string_variable (a_name: READABLE_STRING_GENERAL): detachable READABLE_STRING_32
|
||||||
|
-- CGI meta variable related to `a_name'
|
||||||
|
do
|
||||||
|
if attached meta_variables_table.item (a_name) as val then
|
||||||
|
Result := val.as_string
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
meta_string_variable_or_default (a_name: READABLE_STRING_GENERAL; a_default: READABLE_STRING_32; use_default_when_empty: BOOLEAN): READABLE_STRING_32
|
||||||
-- Value for meta parameter `a_name'
|
-- Value for meta parameter `a_name'
|
||||||
-- If not found, return `a_default'
|
-- If not found, return `a_default'
|
||||||
require
|
require
|
||||||
a_name_not_empty: a_name /= Void and then not a_name.is_empty
|
a_name_not_empty: a_name /= Void and then not a_name.is_empty
|
||||||
do
|
do
|
||||||
if attached meta_variable (a_name) as s then
|
if attached meta_variable (a_name) as val then
|
||||||
if use_default_when_empty and then s.is_empty then
|
Result := val.as_string
|
||||||
|
if use_default_when_empty and then Result.is_empty then
|
||||||
Result := a_default
|
Result := a_default
|
||||||
else
|
|
||||||
Result := s
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
Result := a_default
|
Result := a_default
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
set_meta_variable (a_name: READABLE_STRING_GENERAL; a_value: READABLE_STRING_32)
|
set_meta_string_variable (a_name: READABLE_STRING_GENERAL; a_value: READABLE_STRING_32)
|
||||||
do
|
do
|
||||||
meta_variables.force (a_value, a_name)
|
meta_variables_table.force (new_string_value (a_name, a_value), a_name)
|
||||||
ensure
|
ensure
|
||||||
param_set: meta_variable (a_name) ~ a_value
|
param_set: attached {WGI_STRING_VALUE} meta_variable (a_name) as val and then val ~ a_value
|
||||||
end
|
end
|
||||||
|
|
||||||
unset_meta_variable (a_name: READABLE_STRING_GENERAL)
|
unset_meta_variable (a_name: READABLE_STRING_GENERAL)
|
||||||
do
|
do
|
||||||
meta_variables.remove (a_name)
|
meta_variables_table.remove (a_name)
|
||||||
ensure
|
ensure
|
||||||
param_unset: meta_variable (a_name) = Void
|
param_unset: meta_variable (a_name) = Void
|
||||||
end
|
end
|
||||||
@@ -221,7 +235,7 @@ feature -- Access: CGI meta parameters - 1.1
|
|||||||
|
|
||||||
gateway_interface: READABLE_STRING_32
|
gateway_interface: READABLE_STRING_32
|
||||||
do
|
do
|
||||||
Result := meta_parameter_or_default ({WGI_META_NAMES}.gateway_interface, "", False)
|
Result := meta_string_variable_or_default ({WGI_META_NAMES}.gateway_interface, "", False)
|
||||||
end
|
end
|
||||||
|
|
||||||
path_info: READABLE_STRING_32
|
path_info: READABLE_STRING_32
|
||||||
@@ -234,7 +248,7 @@ feature -- Access: CGI meta parameters - 1.1
|
|||||||
|
|
||||||
path_translated: detachable READABLE_STRING_32
|
path_translated: detachable READABLE_STRING_32
|
||||||
do
|
do
|
||||||
Result := meta_variable ({WGI_META_NAMES}.path_translated)
|
Result := meta_string_variable ({WGI_META_NAMES}.path_translated)
|
||||||
end
|
end
|
||||||
|
|
||||||
query_string: READABLE_STRING_32
|
query_string: READABLE_STRING_32
|
||||||
@@ -245,12 +259,12 @@ feature -- Access: CGI meta parameters - 1.1
|
|||||||
|
|
||||||
remote_ident: detachable READABLE_STRING_32
|
remote_ident: detachable READABLE_STRING_32
|
||||||
do
|
do
|
||||||
Result := meta_variable ({WGI_META_NAMES}.remote_ident)
|
Result := meta_string_variable ({WGI_META_NAMES}.remote_ident)
|
||||||
end
|
end
|
||||||
|
|
||||||
remote_user: detachable READABLE_STRING_32
|
remote_user: detachable READABLE_STRING_32
|
||||||
do
|
do
|
||||||
Result := meta_variable ({WGI_META_NAMES}.remote_user)
|
Result := meta_string_variable ({WGI_META_NAMES}.remote_user)
|
||||||
end
|
end
|
||||||
|
|
||||||
request_method: READABLE_STRING_32
|
request_method: READABLE_STRING_32
|
||||||
@@ -263,12 +277,12 @@ feature -- Access: CGI meta parameters - 1.1
|
|||||||
|
|
||||||
server_protocol: READABLE_STRING_32
|
server_protocol: READABLE_STRING_32
|
||||||
do
|
do
|
||||||
Result := meta_parameter_or_default ({WGI_META_NAMES}.server_protocol, "HTTP/1.0", True)
|
Result := meta_string_variable_or_default ({WGI_META_NAMES}.server_protocol, "HTTP/1.0", True)
|
||||||
end
|
end
|
||||||
|
|
||||||
server_software: READABLE_STRING_32
|
server_software: READABLE_STRING_32
|
||||||
do
|
do
|
||||||
Result := meta_parameter_or_default ({WGI_META_NAMES}.server_software, "Unknown Server", True)
|
Result := meta_string_variable_or_default ({WGI_META_NAMES}.server_software, "Unknown Server", True)
|
||||||
end
|
end
|
||||||
|
|
||||||
feature -- Access: HTTP_* CGI meta parameters - 1.1
|
feature -- Access: HTTP_* CGI meta parameters - 1.1
|
||||||
@@ -276,41 +290,41 @@ feature -- Access: HTTP_* CGI meta parameters - 1.1
|
|||||||
http_accept: detachable READABLE_STRING_32
|
http_accept: detachable READABLE_STRING_32
|
||||||
-- Contents of the Accept: header from the current request, if there is one.
|
-- Contents of the Accept: header from the current request, if there is one.
|
||||||
do
|
do
|
||||||
Result := meta_variable ({WGI_META_NAMES}.http_accept)
|
Result := meta_string_variable ({WGI_META_NAMES}.http_accept)
|
||||||
end
|
end
|
||||||
|
|
||||||
http_accept_charset: detachable READABLE_STRING_32
|
http_accept_charset: detachable READABLE_STRING_32
|
||||||
-- Contents of the Accept-Charset: header from the current request, if there is one.
|
-- Contents of the Accept-Charset: header from the current request, if there is one.
|
||||||
-- Example: 'iso-8859-1,*,utf-8'.
|
-- Example: 'iso-8859-1,*,utf-8'.
|
||||||
do
|
do
|
||||||
Result := meta_variable ({WGI_META_NAMES}.http_accept_charset)
|
Result := meta_string_variable ({WGI_META_NAMES}.http_accept_charset)
|
||||||
end
|
end
|
||||||
|
|
||||||
http_accept_encoding: detachable READABLE_STRING_32
|
http_accept_encoding: detachable READABLE_STRING_32
|
||||||
-- Contents of the Accept-Encoding: header from the current request, if there is one.
|
-- Contents of the Accept-Encoding: header from the current request, if there is one.
|
||||||
-- Example: 'gzip'.
|
-- Example: 'gzip'.
|
||||||
do
|
do
|
||||||
Result := meta_variable ({WGI_META_NAMES}.http_accept_encoding)
|
Result := meta_string_variable ({WGI_META_NAMES}.http_accept_encoding)
|
||||||
end
|
end
|
||||||
|
|
||||||
http_accept_language: detachable READABLE_STRING_32
|
http_accept_language: detachable READABLE_STRING_32
|
||||||
-- Contents of the Accept-Language: header from the current request, if there is one.
|
-- Contents of the Accept-Language: header from the current request, if there is one.
|
||||||
-- Example: 'en'.
|
-- Example: 'en'.
|
||||||
do
|
do
|
||||||
Result := meta_variable ({WGI_META_NAMES}.http_accept_language)
|
Result := meta_string_variable ({WGI_META_NAMES}.http_accept_language)
|
||||||
end
|
end
|
||||||
|
|
||||||
http_connection: detachable READABLE_STRING_32
|
http_connection: detachable READABLE_STRING_32
|
||||||
-- Contents of the Connection: header from the current request, if there is one.
|
-- Contents of the Connection: header from the current request, if there is one.
|
||||||
-- Example: 'Keep-Alive'.
|
-- Example: 'Keep-Alive'.
|
||||||
do
|
do
|
||||||
Result := meta_variable ({WGI_META_NAMES}.http_connection)
|
Result := meta_string_variable ({WGI_META_NAMES}.http_connection)
|
||||||
end
|
end
|
||||||
|
|
||||||
http_host: detachable READABLE_STRING_32
|
http_host: detachable READABLE_STRING_32
|
||||||
-- Contents of the Host: header from the current request, if there is one.
|
-- Contents of the Host: header from the current request, if there is one.
|
||||||
do
|
do
|
||||||
Result := meta_variable ({WGI_META_NAMES}.http_host)
|
Result := meta_string_variable ({WGI_META_NAMES}.http_host)
|
||||||
end
|
end
|
||||||
|
|
||||||
http_referer: detachable READABLE_STRING_32
|
http_referer: detachable READABLE_STRING_32
|
||||||
@@ -319,7 +333,7 @@ feature -- Access: HTTP_* CGI meta parameters - 1.1
|
|||||||
-- Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature.
|
-- Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature.
|
||||||
-- In short, it cannot really be trusted.
|
-- In short, it cannot really be trusted.
|
||||||
do
|
do
|
||||||
Result := meta_variable ({WGI_META_NAMES}.http_referer)
|
Result := meta_string_variable ({WGI_META_NAMES}.http_referer)
|
||||||
end
|
end
|
||||||
|
|
||||||
http_user_agent: detachable READABLE_STRING_32
|
http_user_agent: detachable READABLE_STRING_32
|
||||||
@@ -329,13 +343,13 @@ feature -- Access: HTTP_* CGI meta parameters - 1.1
|
|||||||
-- Among other things, you can use this value to tailor your page's
|
-- Among other things, you can use this value to tailor your page's
|
||||||
-- output to the capabilities of the user agent.
|
-- output to the capabilities of the user agent.
|
||||||
do
|
do
|
||||||
Result := meta_variable ({WGI_META_NAMES}.http_user_agent)
|
Result := meta_string_variable ({WGI_META_NAMES}.http_user_agent)
|
||||||
end
|
end
|
||||||
|
|
||||||
http_authorization: detachable READABLE_STRING_32
|
http_authorization: detachable READABLE_STRING_32
|
||||||
-- Contents of the Authorization: header from the current request, if there is one.
|
-- Contents of the Authorization: header from the current request, if there is one.
|
||||||
do
|
do
|
||||||
Result := meta_variable ({WGI_META_NAMES}.http_authorization)
|
Result := meta_string_variable ({WGI_META_NAMES}.http_authorization)
|
||||||
end
|
end
|
||||||
|
|
||||||
feature -- Access: Extension to CGI meta parameters - 1.1
|
feature -- Access: Extension to CGI meta parameters - 1.1
|
||||||
@@ -354,7 +368,7 @@ feature {NONE} -- Element change: CGI meta parameter related to PATH_INFO
|
|||||||
s_attached: s /= Void
|
s_attached: s /= Void
|
||||||
do
|
do
|
||||||
orig_path_info := s
|
orig_path_info := s
|
||||||
set_meta_variable ({WGI_META_NAMES}.orig_path_info, s)
|
set_meta_string_variable ({WGI_META_NAMES}.orig_path_info, s)
|
||||||
end
|
end
|
||||||
|
|
||||||
unset_orig_path_info
|
unset_orig_path_info
|
||||||
@@ -389,17 +403,17 @@ feature {NONE} -- Element change: CGI meta parameter related to PATH_INFO
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
feature -- Query parameters
|
feature {NONE} -- Query parameters
|
||||||
|
|
||||||
query_parameters: HASH_TABLE [READABLE_STRING_32, READABLE_STRING_GENERAL]
|
query_parameters_table: HASH_TABLE [WGI_VALUE, READABLE_STRING_GENERAL]
|
||||||
-- Variables extracted from QUERY_STRING
|
-- Variables extracted from QUERY_STRING
|
||||||
local
|
local
|
||||||
vars: like internal_query_parameters
|
vars: like internal_query_parameters_table
|
||||||
p,e: INTEGER
|
p,e: INTEGER
|
||||||
rq_uri: like request_uri
|
rq_uri: like request_uri
|
||||||
s: detachable STRING
|
s: detachable STRING
|
||||||
do
|
do
|
||||||
vars := internal_query_parameters
|
vars := internal_query_parameters_table
|
||||||
if vars = Void then
|
if vars = Void then
|
||||||
s := query_string
|
s := query_string
|
||||||
if s = Void then
|
if s = Void then
|
||||||
@@ -416,20 +430,27 @@ feature -- Query parameters
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
vars := urlencoded_parameters (s, True)
|
vars := urlencoded_parameters (s, True)
|
||||||
internal_query_parameters := vars
|
internal_query_parameters_table := vars
|
||||||
end
|
end
|
||||||
Result := vars
|
Result := vars
|
||||||
end
|
end
|
||||||
|
|
||||||
query_parameter (a_name: READABLE_STRING_GENERAL): detachable READABLE_STRING_32
|
feature -- Query parameters
|
||||||
|
|
||||||
|
query_parameters: ITERATION_CURSOR [WGI_VALUE]
|
||||||
|
do
|
||||||
|
Result := query_parameters_table.new_cursor
|
||||||
|
end
|
||||||
|
|
||||||
|
query_parameter (a_name: READABLE_STRING_GENERAL): detachable WGI_VALUE
|
||||||
-- Parameter for name `n'.
|
-- Parameter for name `n'.
|
||||||
do
|
do
|
||||||
Result := query_parameters.item (a_name)
|
Result := query_parameters_table.item (a_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
feature {NONE} -- Query parameters: implementation
|
feature {NONE} -- Query parameters: implementation
|
||||||
|
|
||||||
urlencoded_parameters (a_content: detachable READABLE_STRING_8; decoding: BOOLEAN): HASH_TABLE [READABLE_STRING_32, STRING]
|
urlencoded_parameters (a_content: detachable READABLE_STRING_8; decoding: BOOLEAN): HASH_TABLE [WGI_VALUE, STRING]
|
||||||
-- Import `a_content'
|
-- Import `a_content'
|
||||||
local
|
local
|
||||||
n, p, i, j: INTEGER
|
n, p, i, j: INTEGER
|
||||||
@@ -466,7 +487,7 @@ feature {NONE} -- Query parameters: implementation
|
|||||||
l_name := url_encoder.decoded_string (l_name)
|
l_name := url_encoder.decoded_string (l_name)
|
||||||
l_value := url_encoder.decoded_string (l_value)
|
l_value := url_encoder.decoded_string (l_value)
|
||||||
end
|
end
|
||||||
Result.force (l_value, l_name)
|
Result.force (new_string_value (l_name, l_value), l_name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -474,17 +495,17 @@ feature {NONE} -- Query parameters: implementation
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
feature -- Form fields and related
|
feature {NONE} -- Form fields and related
|
||||||
|
|
||||||
form_data_parameters: HASH_TABLE [READABLE_STRING_32, READABLE_STRING_GENERAL]
|
form_data_parameters_table: HASH_TABLE [WGI_VALUE, READABLE_STRING_GENERAL]
|
||||||
-- Variables sent by POST request
|
-- Variables sent by POST request
|
||||||
local
|
local
|
||||||
vars: like internal_form_data_parameters
|
vars: like internal_form_data_parameters_table
|
||||||
s: STRING
|
s: STRING
|
||||||
n: NATURAL_64
|
n: NATURAL_64
|
||||||
l_type: like content_type
|
l_type: like content_type
|
||||||
do
|
do
|
||||||
vars := internal_form_data_parameters
|
vars := internal_form_data_parameters_table
|
||||||
if vars = Void then
|
if vars = Void then
|
||||||
n := content_length_value
|
n := content_length_value
|
||||||
if n > 0 then
|
if n > 0 then
|
||||||
@@ -502,20 +523,27 @@ feature -- Form fields and related
|
|||||||
vars := urlencoded_parameters (s, True)
|
vars := urlencoded_parameters (s, True)
|
||||||
end
|
end
|
||||||
if raw_post_data_recorded then
|
if raw_post_data_recorded then
|
||||||
vars.force (s, "RAW_POST_DATA")
|
vars.force (new_string_value ("RAW_POST_DATA", s), "RAW_POST_DATA")
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
create vars.make (0)
|
create vars.make (0)
|
||||||
end
|
end
|
||||||
internal_form_data_parameters := vars
|
internal_form_data_parameters_table := vars
|
||||||
end
|
end
|
||||||
Result := vars
|
Result := vars
|
||||||
end
|
end
|
||||||
|
|
||||||
form_data_parameter (a_name: READABLE_STRING_GENERAL): detachable READABLE_STRING_32
|
feature -- Form fields and related
|
||||||
|
|
||||||
|
form_data_parameters: ITERATION_CURSOR [WGI_VALUE]
|
||||||
|
do
|
||||||
|
Result := form_data_parameters_table.new_cursor
|
||||||
|
end
|
||||||
|
|
||||||
|
form_data_parameter (a_name: READABLE_STRING_GENERAL): detachable WGI_VALUE
|
||||||
-- Field for name `a_name'.
|
-- Field for name `a_name'.
|
||||||
do
|
do
|
||||||
Result := form_data_parameters.item (a_name)
|
Result := form_data_parameters_table.item (a_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
uploaded_files: HASH_TABLE [WGI_UPLOADED_FILE_DATA, STRING]
|
uploaded_files: HASH_TABLE [WGI_UPLOADED_FILE_DATA, STRING]
|
||||||
@@ -527,18 +555,19 @@ feature -- Form fields and related
|
|||||||
--| error: if /= 0 , there was an error : TODO ...
|
--| error: if /= 0 , there was an error : TODO ...
|
||||||
--| size: size of the file given by the http request
|
--| size: size of the file given by the http request
|
||||||
|
|
||||||
feature -- Cookies
|
feature {NONE} -- Cookies
|
||||||
|
|
||||||
cookies: HASH_TABLE [READABLE_STRING_32, READABLE_STRING_GENERAL]
|
cookies_table: HASH_TABLE [WGI_VALUE, READABLE_STRING_GENERAL]
|
||||||
-- Expanded cookies variable
|
-- Expanded cookies variable
|
||||||
local
|
local
|
||||||
i,j,p,n: INTEGER
|
i,j,p,n: INTEGER
|
||||||
l_cookies: like internal_cookies
|
l_cookies: like internal_cookies_table
|
||||||
k,v: STRING
|
k,v,s: STRING
|
||||||
do
|
do
|
||||||
l_cookies := internal_cookies
|
l_cookies := internal_cookies_table
|
||||||
if l_cookies = Void then
|
if l_cookies = Void then
|
||||||
if attached meta_variable ({WGI_META_NAMES}.http_cookie) as s then
|
if attached {WGI_STRING_VALUE} meta_variable ({WGI_META_NAMES}.http_cookie) as val then
|
||||||
|
s := val.value
|
||||||
create l_cookies.make (5)
|
create l_cookies.make (5)
|
||||||
from
|
from
|
||||||
n := s.count
|
n := s.count
|
||||||
@@ -561,94 +590,117 @@ feature -- Cookies
|
|||||||
v := s.substring (i + 1, j - 1)
|
v := s.substring (i + 1, j - 1)
|
||||||
p := j + 1
|
p := j + 1
|
||||||
end
|
end
|
||||||
l_cookies.force (v, k)
|
l_cookies.force (new_string_value (k, v), k)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
create l_cookies.make (0)
|
create l_cookies.make (0)
|
||||||
end
|
end
|
||||||
internal_cookies := l_cookies
|
internal_cookies_table := l_cookies
|
||||||
end
|
end
|
||||||
Result := l_cookies
|
Result := l_cookies
|
||||||
end
|
end
|
||||||
|
|
||||||
cookie (a_name: READABLE_STRING_GENERAL): detachable READABLE_STRING_32
|
feature -- Cookies
|
||||||
-- Field for name `a_name'.
|
|
||||||
|
cookies: ITERATION_CURSOR [WGI_VALUE]
|
||||||
do
|
do
|
||||||
Result := cookies.item (a_name)
|
Result := cookies_table.new_cursor
|
||||||
end
|
end
|
||||||
|
|
||||||
feature -- Access: global variable
|
cookie (a_name: READABLE_STRING_GENERAL): detachable WGI_VALUE
|
||||||
|
-- Field for name `a_name'.
|
||||||
|
do
|
||||||
|
Result := cookies_table.item (a_name)
|
||||||
|
end
|
||||||
|
|
||||||
parameters: HASH_TABLE [READABLE_STRING_32, READABLE_STRING_GENERAL]
|
feature {NONE} -- Access: global variable
|
||||||
|
|
||||||
|
items_table: HASH_TABLE [WGI_VALUE, READABLE_STRING_GENERAL]
|
||||||
-- Table containing all the various variables
|
-- Table containing all the various variables
|
||||||
-- Warning: this is computed each time, if you change the content of other containers
|
-- Warning: this is computed each time, if you change the content of other containers
|
||||||
-- this won't update this Result's content, unless you query it again
|
-- this won't update this Result's content, unless you query it again
|
||||||
local
|
local
|
||||||
vars: HASH_TABLE [READABLE_STRING_GENERAL, READABLE_STRING_GENERAL]
|
vars: ITERATION_CURSOR [WGI_VALUE]
|
||||||
do
|
do
|
||||||
create Result.make (100)
|
create Result.make (100)
|
||||||
|
|
||||||
vars := meta_variables
|
vars := meta_variables
|
||||||
from
|
from
|
||||||
vars.start
|
-- vars.start
|
||||||
until
|
until
|
||||||
vars.after
|
vars.after
|
||||||
loop
|
loop
|
||||||
Result.force (vars.item_for_iteration.as_string_32, vars.key_for_iteration)
|
Result.force (vars.item, vars.item.name)
|
||||||
vars.forth
|
vars.forth
|
||||||
end
|
end
|
||||||
|
|
||||||
vars := query_parameters
|
vars := query_parameters
|
||||||
from
|
from
|
||||||
vars.start
|
-- vars.start
|
||||||
until
|
until
|
||||||
vars.after
|
vars.after
|
||||||
loop
|
loop
|
||||||
Result.force (vars.item_for_iteration.as_string_32, vars.key_for_iteration)
|
Result.force (vars.item, vars.item.name)
|
||||||
vars.forth
|
vars.forth
|
||||||
end
|
end
|
||||||
|
|
||||||
vars := form_data_parameters
|
vars := form_data_parameters
|
||||||
from
|
from
|
||||||
vars.start
|
-- vars.start
|
||||||
until
|
until
|
||||||
vars.after
|
vars.after
|
||||||
loop
|
loop
|
||||||
Result.force (vars.item_for_iteration.as_string_32, vars.key_for_iteration)
|
Result.force (vars.item, vars.item.name)
|
||||||
vars.forth
|
vars.forth
|
||||||
end
|
end
|
||||||
|
|
||||||
vars := cookies
|
vars := cookies
|
||||||
from
|
from
|
||||||
vars.start
|
-- vars.start
|
||||||
until
|
until
|
||||||
vars.after
|
vars.after
|
||||||
loop
|
loop
|
||||||
Result.force (vars.item_for_iteration.as_string_32, vars.key_for_iteration)
|
Result.force (vars.item, vars.item.name)
|
||||||
vars.forth
|
vars.forth
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
parameter (a_name: READABLE_STRING_GENERAL): detachable READABLE_STRING_32
|
feature -- Access: global variable
|
||||||
|
|
||||||
|
items: ITERATION_CURSOR [WGI_VALUE]
|
||||||
|
do
|
||||||
|
Result := items_table.new_cursor
|
||||||
|
end
|
||||||
|
|
||||||
|
item (a_name: READABLE_STRING_GENERAL): detachable WGI_VALUE
|
||||||
-- Variable named `a_name' from any of the variables container
|
-- Variable named `a_name' from any of the variables container
|
||||||
-- and following a specific order
|
-- and following a specific order
|
||||||
-- execution, environment, get, post, cookies
|
-- execution, environment, get, post, cookies
|
||||||
local
|
local
|
||||||
s: detachable READABLE_STRING_GENERAL
|
v: detachable WGI_VALUE
|
||||||
do
|
do
|
||||||
s := meta_variable (a_name)
|
v := meta_variable (a_name)
|
||||||
if s = Void then
|
if v = Void then
|
||||||
s := query_parameter (a_name)
|
v := query_parameter (a_name)
|
||||||
if s = Void then
|
if v = Void then
|
||||||
s := form_data_parameter (a_name)
|
v := form_data_parameter (a_name)
|
||||||
if s = Void then
|
if v = Void then
|
||||||
s := cookie (a_name)
|
v := cookie (a_name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if s /= Void then
|
-- if s /= Void then
|
||||||
Result := s.as_string_32
|
-- Result := s.as_string_32
|
||||||
|
-- end
|
||||||
|
end
|
||||||
|
|
||||||
|
string_item (a_name: READABLE_STRING_GENERAL): detachable READABLE_STRING_32
|
||||||
|
do
|
||||||
|
if attached {WGI_STRING_VALUE} item (a_name) as val then
|
||||||
|
Result := val.value
|
||||||
|
else
|
||||||
|
check is_string_value: False end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -862,7 +914,7 @@ feature {NONE} -- Temporary File handling
|
|||||||
|
|
||||||
feature {NONE} -- Implementation: Form analyzer
|
feature {NONE} -- Implementation: Form analyzer
|
||||||
|
|
||||||
analyze_multipart_form (t: STRING; s: STRING; vars: like form_data_parameters)
|
analyze_multipart_form (t: STRING; s: STRING; vars: like form_data_parameters_table)
|
||||||
-- Analyze multipart form content
|
-- Analyze multipart form content
|
||||||
--| FIXME[2011-06-21]: integrate eMIME parser library
|
--| FIXME[2011-06-21]: integrate eMIME parser library
|
||||||
require
|
require
|
||||||
@@ -928,7 +980,7 @@ feature {NONE} -- Implementation: Form analyzer
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
analyze_multipart_form_input (s: STRING; vars_post: like form_data_parameters)
|
analyze_multipart_form_input (s: STRING; vars_post: like form_data_parameters_table)
|
||||||
-- Analyze multipart entry
|
-- Analyze multipart entry
|
||||||
require
|
require
|
||||||
s_not_empty: s /= Void and then not s.is_empty
|
s_not_empty: s /= Void and then not s.is_empty
|
||||||
@@ -1035,7 +1087,7 @@ feature {NONE} -- Implementation: Form analyzer
|
|||||||
save_uploaded_file (l_content, l_up_file_info)
|
save_uploaded_file (l_content, l_up_file_info)
|
||||||
uploaded_files.force (l_up_file_info, l_name)
|
uploaded_files.force (l_up_file_info, l_name)
|
||||||
else
|
else
|
||||||
vars_post.force (l_content, l_name)
|
vars_post.force (new_string_value (l_name, l_content), l_name)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
error_handler.add_custom_error (0, "unamed multipart entry", Void)
|
error_handler.add_custom_error (0, "unamed multipart entry", Void)
|
||||||
@@ -1075,13 +1127,13 @@ feature {NONE} -- Internal value
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
internal_query_parameters: detachable like query_parameters
|
internal_query_parameters_table: detachable like query_parameters_table
|
||||||
-- cached value for `query_parameters'
|
-- cached value for `query_parameters'
|
||||||
|
|
||||||
internal_form_data_parameters: detachable like form_data_parameters
|
internal_form_data_parameters_table: detachable like form_data_parameters_table
|
||||||
-- cached value for `form_fields'
|
-- cached value for `form_fields'
|
||||||
|
|
||||||
internal_cookies: detachable like cookies
|
internal_cookies_table: detachable like cookies_table
|
||||||
-- cached value for `cookies'
|
-- cached value for `cookies'
|
||||||
|
|
||||||
feature {NONE} -- I/O: implementation
|
feature {NONE} -- I/O: implementation
|
||||||
@@ -1140,6 +1192,11 @@ feature {NONE} -- Implementation
|
|||||||
|
|
||||||
feature {NONE} -- Implementation: utilities
|
feature {NONE} -- Implementation: utilities
|
||||||
|
|
||||||
|
new_string_value (a_name: READABLE_STRING_GENERAL; a_value: READABLE_STRING_32): WGI_STRING_VALUE
|
||||||
|
do
|
||||||
|
create Result.make (a_name, a_value)
|
||||||
|
end
|
||||||
|
|
||||||
empty_string: READABLE_STRING_32
|
empty_string: READABLE_STRING_32
|
||||||
-- Reusable empty string
|
-- Reusable empty string
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,10 @@ feature -- Execution
|
|||||||
rep.headers.put_content_type_text_html
|
rep.headers.put_content_type_text_html
|
||||||
create s.make_empty
|
create s.make_empty
|
||||||
|
|
||||||
if attached ctx.path_parameter ("resource") as l_resource then
|
if
|
||||||
|
attached {WGI_STRING_VALUE} ctx.path_parameter ("resource") as l_resource_value and then
|
||||||
|
attached l_resource_value.value as l_resource
|
||||||
|
then
|
||||||
from
|
from
|
||||||
hdl_cursor := router.new_cursor
|
hdl_cursor := router.new_cursor
|
||||||
until
|
until
|
||||||
|
|||||||
@@ -38,10 +38,15 @@ feature -- Execution
|
|||||||
execute (req: WGI_REQUEST; res: WGI_RESPONSE_BUFFER)
|
execute (req: WGI_REQUEST; res: WGI_RESPONSE_BUFFER)
|
||||||
local
|
local
|
||||||
l_handled: BOOLEAN
|
l_handled: BOOLEAN
|
||||||
|
rescued: BOOLEAN
|
||||||
do
|
do
|
||||||
l_handled := router.dispatch (req, res)
|
if not rescued then
|
||||||
if not l_handled then
|
l_handled := router.dispatch (req, res)
|
||||||
execute_default (req, res)
|
if not l_handled then
|
||||||
|
execute_default (req, res)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
execute_rescue (req, res)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -49,6 +54,14 @@ feature -- Execution
|
|||||||
deferred
|
deferred
|
||||||
end
|
end
|
||||||
|
|
||||||
|
execute_rescue (req: WGI_REQUEST; res: WGI_RESPONSE_BUFFER)
|
||||||
|
do
|
||||||
|
if not res.header_committed then
|
||||||
|
res.write_header ({HTTP_STATUS_CODE}.internal_server_error, Void)
|
||||||
|
end
|
||||||
|
res.flush
|
||||||
|
end
|
||||||
|
|
||||||
note
|
note
|
||||||
copyright: "2011-2011, Eiffel Software and others"
|
copyright: "2011-2011, Eiffel Software and others"
|
||||||
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
|
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ feature -- Query
|
|||||||
request_format (a_format_variable_name: detachable READABLE_STRING_GENERAL; content_type_supported: detachable ARRAY [READABLE_STRING_8]): detachable READABLE_STRING_8
|
request_format (a_format_variable_name: detachable READABLE_STRING_GENERAL; content_type_supported: detachable ARRAY [READABLE_STRING_8]): detachable READABLE_STRING_8
|
||||||
-- Format id for the request based on {HTTP_FORMAT_CONSTANTS}
|
-- Format id for the request based on {HTTP_FORMAT_CONSTANTS}
|
||||||
do
|
do
|
||||||
if a_format_variable_name /= Void and then attached parameter (a_format_variable_name) as ctx_format then
|
if a_format_variable_name /= Void and then attached string_parameter (a_format_variable_name) as ctx_format then
|
||||||
Result := ctx_format.as_string_8
|
Result := ctx_format.as_string_8
|
||||||
else
|
else
|
||||||
Result := content_type_to_request_format (request_content_type (content_type_supported))
|
Result := content_type_to_request_format (request_content_type (content_type_supported))
|
||||||
@@ -107,27 +107,51 @@ feature -- Query
|
|||||||
|
|
||||||
feature -- Query
|
feature -- Query
|
||||||
|
|
||||||
path_parameter (a_name: READABLE_STRING_GENERAL): detachable READABLE_STRING_32
|
path_parameter (a_name: READABLE_STRING_GENERAL): detachable WGI_VALUE
|
||||||
-- Parameter value for path variable `a_name'
|
-- Parameter value for path variable `a_name'
|
||||||
deferred
|
deferred
|
||||||
end
|
end
|
||||||
|
|
||||||
query_parameter (a_name: READABLE_STRING_GENERAL): detachable READABLE_STRING_32
|
query_parameter (a_name: READABLE_STRING_GENERAL): detachable WGI_VALUE
|
||||||
-- Parameter value for query variable `a_name'
|
-- Parameter value for query variable `a_name'
|
||||||
--| i.e after the ? character
|
--| i.e after the ? character
|
||||||
deferred
|
deferred
|
||||||
end
|
end
|
||||||
|
|
||||||
parameter (a_name: READABLE_STRING_GENERAL): detachable READABLE_STRING_32
|
parameter (a_name: READABLE_STRING_GENERAL): detachable WGI_VALUE
|
||||||
-- Any parameter value for variable `a_name'
|
-- Any parameter value for variable `a_name'
|
||||||
-- URI template parameter and query parameters
|
-- URI template parameter and query parameters
|
||||||
do
|
do
|
||||||
Result := query_parameter (a_name)
|
Result := query_parameter (a_name)
|
||||||
if Result = Void then
|
if Result = Void then
|
||||||
Result := path_parameter (a_name)
|
Result := path_parameter (a_name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
feature -- String query
|
||||||
|
|
||||||
|
string_from (a_value: detachable WGI_VALUE): detachable READABLE_STRING_32
|
||||||
|
do
|
||||||
|
if attached {WGI_STRING_VALUE} a_value as val then
|
||||||
|
Result := val.value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
string_path_parameter (a_name: READABLE_STRING_GENERAL): detachable READABLE_STRING_32
|
||||||
|
do
|
||||||
|
Result := string_from (path_parameter (a_name))
|
||||||
|
end
|
||||||
|
|
||||||
|
string_query_parameter (a_name: READABLE_STRING_GENERAL): detachable READABLE_STRING_32
|
||||||
|
do
|
||||||
|
Result := string_from (query_parameter (a_name))
|
||||||
|
end
|
||||||
|
|
||||||
|
string_parameter (a_name: READABLE_STRING_GENERAL): detachable READABLE_STRING_32
|
||||||
|
do
|
||||||
|
Result := string_from (parameter (a_name))
|
||||||
|
end
|
||||||
|
|
||||||
;note
|
;note
|
||||||
copyright: "2011-2011, Eiffel Software and others"
|
copyright: "2011-2011, Eiffel Software and others"
|
||||||
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
|
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
|
||||||
|
|||||||
@@ -23,13 +23,13 @@ feature {NONE} -- Initialization
|
|||||||
|
|
||||||
feature -- Query
|
feature -- Query
|
||||||
|
|
||||||
path_parameter (a_name: READABLE_STRING_GENERAL): detachable STRING_32
|
path_parameter (a_name: READABLE_STRING_GENERAL): detachable WGI_VALUE
|
||||||
do
|
do
|
||||||
end
|
end
|
||||||
|
|
||||||
query_parameter (a_name: READABLE_STRING_GENERAL): detachable READABLE_STRING_32
|
query_parameter (a_name: READABLE_STRING_GENERAL): detachable WGI_VALUE
|
||||||
do
|
do
|
||||||
Result := request.parameter (a_name)
|
Result := request.query_parameter (a_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
note
|
note
|
||||||
|
|||||||
@@ -31,16 +31,19 @@ feature -- Access
|
|||||||
|
|
||||||
feature -- Query
|
feature -- Query
|
||||||
|
|
||||||
path_parameter (a_name: READABLE_STRING_GENERAL): detachable READABLE_STRING_32
|
path_parameter (a_name: READABLE_STRING_GENERAL): detachable WGI_VALUE
|
||||||
do
|
do
|
||||||
Result := uri_template_match.url_decoded_path_variable (a_name)
|
if attached uri_template_match.url_decoded_path_variable (a_name) as s then
|
||||||
|
create {WGI_STRING_VALUE} Result.make (a_name, s)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
query_parameter (a_name: READABLE_STRING_GENERAL): detachable READABLE_STRING_32
|
query_parameter (a_name: READABLE_STRING_GENERAL): detachable WGI_VALUE
|
||||||
do
|
do
|
||||||
Result := uri_template_match.url_decoded_query_variable (a_name)
|
if attached uri_template_match.url_decoded_query_variable (a_name) as s then
|
||||||
if Result = Void then
|
create {WGI_STRING_VALUE} Result.make (a_name, s)
|
||||||
Result := request.parameter (a_name)
|
else
|
||||||
|
Result := request.query_parameter (a_name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
note
|
||||||
|
description: "Summary description for {DEFAULT_REQUEST_URI_ROUTING_HANDLER}."
|
||||||
|
author: ""
|
||||||
|
date: "$Date$"
|
||||||
|
revision: "$Revision$"
|
||||||
|
|
||||||
|
class
|
||||||
|
DEFAULT_REQUEST_URI_ROUTING_HANDLER
|
||||||
|
|
||||||
|
inherit
|
||||||
|
REQUEST_URI_ROUTING_HANDLER [REQUEST_HANDLER [REQUEST_URI_HANDLER_CONTEXT], REQUEST_URI_HANDLER_CONTEXT]
|
||||||
|
redefine
|
||||||
|
router
|
||||||
|
end
|
||||||
|
|
||||||
|
create
|
||||||
|
make
|
||||||
|
|
||||||
|
feature {NONE} -- Routing
|
||||||
|
|
||||||
|
router: DEFAULT_REQUEST_URI_ROUTER
|
||||||
|
|
||||||
|
;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
|
||||||
Reference in New Issue
Block a user