a few renaming

better GW_ENVIRONMENT interface
This commit is contained in:
Jocelyn Fiat
2011-07-07 17:24:21 +02:00
parent 545db51fc9
commit f1d8d18811
19 changed files with 632 additions and 416 deletions

6
.gitmodules vendored
View File

@@ -1,3 +1,9 @@
[submodule "doc/wiki"] [submodule "doc/wiki"]
path = doc/wiki path = doc/wiki
url = https://github.com/Eiffel-World/Eiffel-Web-Framework.wiki.git url = https://github.com/Eiffel-World/Eiffel-Web-Framework.wiki.git
[submodule "ext\\server\\nino"]
path = ext\\server\\nino
url = http://github.com/Eiffel-World/EiffelWebNino.git
[submodule "ext/text/json"]
path = ext/text/json
url = http://github.com/Eiffel-World/ejson-svn.git

20
LICENSE Normal file
View File

@@ -0,0 +1,20 @@
Eiffel Forum License, version 2
1. Permission is hereby granted to use, copy, modify and/or distribute
this package, provided that:
* copyright notices are retained unchanged,
* any distribution of this package, whether modified or not,
includes this license text.
2. Permission is hereby also granted to distribute binary programs which
depend on this package. If the binary program depends on a modified
version of this package, you are encouraged to publicly release the
modified version of this package.
THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT WARRANTY. ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE TO ANY PARTY FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THIS PACKAGE.

1
ext/server/nino Submodule

Submodule ext/server/nino added at c772fc5194

1
ext/text/json Submodule

Submodule ext/text/json added at 72f89abe64

View File

@@ -11,7 +11,7 @@
</option> </option>
<library name="base" location="$ISE_LIBRARY\library\base\base-safe.ecf"/> <library name="base" location="$ISE_LIBRARY\library\base\base-safe.ecf"/>
<library name="time" location="$ISE_LIBRARY\library\time\time-safe.ecf"/> <library name="time" location="$ISE_LIBRARY\library\time\time-safe.ecf"/>
<cluster name="interface" location="library\" recursive="true"> <cluster name="interface" location="src\" recursive="true">
<file_rule> <file_rule>
<exclude>GW_REQUEST_CONTEXT_IMP</exclude> <exclude>GW_REQUEST_CONTEXT_IMP</exclude>
</file_rule> </file_rule>

View File

@@ -1,414 +0,0 @@
note
description: "[
Interface for a request environment
It includes CGI interface and a few extra values that are usually valuable
-- A `Script URI' can be defined; this describes the resource identified
-- by the environment variables. Often, this URI will be the same as the
-- URI requested by the client (the `Client URI'); however, it need not
-- be. Instead, it could be a URI invented by the server, and so it can
-- only be used in the context of the server and its CGI interface.
--
-- The script URI has the syntax of generic-RL as defined in section 2.1
-- of RFC 1808 [7], with the exception that object parameters and
-- fragment identifiers are not permitted:
--
-- <scheme>://<host>:<port>/<path>?<query>
--
-- The various components of the script URI are defined by some of the
-- environment variables (see below);
--
-- script-uri = protocol "://" SERVER_NAME ":" SERVER_PORT enc-script
-- enc-path-info "?" QUERY_STRING
--
-- where `protocol' is found from SERVER_PROTOCOL, `enc-script' is a
-- URL-encoded version of SCRIPT_NAME and `enc-path-info' is a
-- URL-encoded version of PATH_INFO.
]"
legal: "See notice at end of class."
status: "See notice at end of class."
date: "$Date$"
revision: "$Revision$"
deferred
class
GW_ENVIRONMENT
inherit
GW_VARIABLES [STRING_8]
-- undefine
-- copy, is_equal
-- end
ITERABLE [STRING_8]
-- HASH_TABLE [STRING, STRING]
-- undefine
-- empty_duplicate --| Hwo come I need that??? CHECK BUG
-- end
feature -- Access
table: HASH_TABLE [STRING, STRING]
-- These variables are specific to requests made with HTTP.
-- Interpretation of these variables may depend on the value of
-- SERVER_PROTOCOL.
--
-- Environment variables with names beginning with "HTTP_" contain
-- header data read from the client, if the protocol used was HTTP.
-- The HTTP header name is converted to upper case, has all
-- occurrences of "-" replaced with "_" and has "HTTP_" prepended to
-- give the environment variable name. The header data may be
-- presented as sent by the client, or may be rewritten in ways which
-- do not change its semantics. If multiple headers with the same
-- field-name are received then they must be rewritten as a single
-- header having the same semantics. Similarly, a header that is
-- received on more than one line must be merged onto a single line.
-- The server must, if necessary, change the representation of the
-- data (for example, the character set) to be appropriate for a CGI
-- environment variable.
--
-- The server is not required to create environment variables for all
-- the headers that it receives. In particular, it may remove any
-- headers carrying authentication information, such as
-- "Authorization"; it may remove headers whose value is available to
-- the script via other variables, such as "Content-Length" and
-- "Content-Type".
deferred
end
feature -- Access: table
new_cursor: HASH_TABLE_ITERATION_CURSOR [STRING_8, STRING_8]
-- Fresh cursor associated with current structure
do
create Result.make (table)
end
feature -- Common Gateway Interface - 1.1 8 January 1996
auth_type: detachable STRING
-- The variable is specific to requests made with HTTP.
-- If the script URI would require access authentication for external
-- access, then this variable is found from the `auth-scheme' token
-- in the request, otherwise NULL.
-- auth-scheme = "Basic" | token
-- HTTP access authentication schemes are described in section 11 of s
-- the HTTP/1.0 specification [3]. The auth-scheme is not
-- case-sensitive.
deferred
end
content_length: INTEGER
-- The size of the entity attached to the request, if any, in decimal
-- number of octets. If no data is attached, then NULL. The syntax is
-- the same as the HTTP Content-Length header (section 10, HTTP/1.0
-- specification [3]).
--
-- CONTENT_LENGTH = "" | [ 1*digit ]
deferred
end
content_type: STRING
-- The Internet Media Type [9] of the attached entity. The syntax is
-- the same as the HTTP Content-Type header.
--
-- CONTENT_TYPE = "" | media-type
-- media-type = type "/" subtype *( ";" parameter)
-- type = token
-- subtype = token
-- parameter = attribute "=" value
-- attribute = token
-- value = token | quoted-string
--
-- The type, subtype and parameter attribute names are not
-- case-sensitive. Parameter values may be case sensitive. Media
-- types and their use in HTTP are described section 3.6 of the
-- HTTP/1.0 specification [3]. Example:
--
-- application/x-www-form-urlencoded
--
-- There is no default value for this variable. If and only if it is
-- unset, then the script may attempt to determine the media type
-- from the data received. If the type remains unknown, then
-- application/octet-stream should be assumed.
deferred
end
gateway_interface: STRING
-- The version of the CGI specification to which this server
-- complies. Syntax:
--
-- GATEWAY_INTERFACE = "CGI" "/" 1*digit "." 1*digit
--
-- Note that the major and minor numbers are treated as separate
-- integers and that each may be incremented higher than a single
-- digit. Thus CGI/2.4 is a lower version than CGI/2.13 which in
-- turn is lower than CGI/12.3. Leading zeros must be ignored by
-- scripts and should never be generated by servers.
deferred
end
path_info: STRING
-- A path to be interpreted by the CGI script. It identifies the
-- resource or sub-resource to be returned by the CGI script. The
-- syntax and semantics are similar to a decoded HTTP URL `hpath'
-- token (defined in RFC 1738 [4]), with the exception that a
-- PATH_INFO of "/" represents a single void path segment. Otherwise,
-- the leading "/" character is not part of the path.
-- PATH_INFO = "" | "/" path
-- path = segment *( "/" segment )
-- segment = *pchar
-- pchar = <any CHAR except "/">
-- The PATH_INFO string is the trailing part of the <path> component
-- of the script URI that follows the SCRIPT_NAME part of the path.
--
--| For instance, if the current script was accessed via the URL
--| http://www.example.com/eiffel/path_info.exe/some/stuff?foo=bar, then $_SERVER['PATH_INFO'] would contain /some/stuff.
--|
--| Note that is the PATH_INFO variable does not exists, the `path_info' value will be empty
deferred
end
path_translated: STRING
-- The OS path to the file that the server would attempt to access
-- were the client to request the absolute URL containing the path
-- PATH_INFO. i.e for a request of
-- protocol "://" SERVER_NAME ":" SERVER_PORT enc-path-info
-- where `enc-path-info' is a URL-encoded version of PATH_INFO. If
-- PATH_INFO is NULL then PATH_TRANSLATED is set to NULL.
-- PATH_TRANSLATED = *CHAR
-- PATH_TRANSLATED need not be supported by the server. The server
-- may choose to set PATH_TRANSLATED to NULL for reasons of security,
-- or because the path would not be interpretable by a CGI script;
-- such as the object it represented was internal to the server and
-- not visible in the file-system; or for any other reason.
-- The algorithm the server uses to derive PATH_TRANSLATED is
-- obviously implementation defined; CGI scripts which use this
-- variable may suffer limited portability.
deferred
end
query_string: STRING
-- A URL-encoded search string; the <query> part of the script URI.
-- QUERY_STRING = query-string
-- query-string = *qchar
-- qchar = unreserved | escape | reserved
-- unreserved = alpha | digit | safe | extra
-- reserved = ";" | "/" | "?" | ":" | "@" | "&" | "="
-- safe = "$" | "-" | "_" | "." | "+"
-- extra = "!" | "*" | "'" | "(" | ")" | ","
-- escape = "%" hex hex
-- hex = digit | "A" | "B" | "C" | "D" | "E" | "F" | "a"
-- | "b" | "c" | "d" | "e" | "f"
-- The URL syntax for a search string is described in RFC 1738 [4].
deferred
end
remote_addr: STRING
-- The IP address of the agent sending the request to the server. Not
-- necessarily that of the client.
-- REMOTE_ADDR = hostnumber
-- hostnumber = digits "." digits "." digits "." digits
-- digits = 1*digit
deferred
end
remote_host: STRING
-- The fully qualified domain name of the agent sending the request
-- to the server, if available, otherwise NULL. Not necessarily that
-- of the client. Fully qualified domain names take the form as
-- described in section 3.5 of RFC 1034 [8] and section 2.1 of RFC
-- 1123 [5]; a sequence of domain labels separated by ".", each
-- domain label starting and ending with an alphanumerical character
-- and possibly also containing "-" characters. The rightmost domain
-- label will never start with a digit. Domain names are not case
-- sensitive.
-- REMOTE_HOST = "" | hostname
-- hostname = *( domainlabel ".") toplabel
-- domainlabel = alphadigit [ *alphahypdigit alphadigit ]
-- toplabel = alpha [ *alphahypdigit alphadigit ]
-- alphahypdigit = alphadigit | "-"
-- alphadigit = alpha | digit
deferred
end
remote_ident: detachable STRING
-- The identity information reported about the connection by a RFC
-- 931 [10] request to the remote agent, if available. The server may
-- choose not to support this feature, or not to request the data for
-- efficiency reasons.
-- REMOTE_IDENT = *CHAR
-- The data returned is not appropriate for use as authentication
-- information.
deferred
end
remote_user: detachable STRING
-- This variable is specific to requests made with HTTP.
-- If AUTH_TYPE is "Basic", then the user-ID sent by the client. If
-- AUTH_TYPE is NULL, then NULL, otherwise undefined.
-- userid = token
deferred
end
request_method: STRING
-- This variable is specific to requests made with HTTP.
-- The method with which the request was made, as described in
-- section 5.1.1 of the HTTP/1.0 specification [3].
-- http-method = "GET" | "HEAD" | "POST" | extension-method
-- extension-method = token
-- The method is case sensitive.
deferred
end
script_name: STRING
-- A URL path that could identify the CGI script (rather then the
-- particular CGI output). The syntax and semantics are identical to
-- a decoded HTTP URL `hpath' token [4].
-- SCRIPT_NAME = "" | "/" [ path ]
-- The leading "/" is not part of the path. It is optional if the
-- path is NULL.
-- The SCRIPT_NAME string is some leading part of the <path>
-- component of the script URI derived in some implementation defined
-- manner.
deferred
end
server_name: STRING
-- The name for this server, as used in the <host> part of the script
-- URI. Thus either a fully qualified domain name, or an IP address.
-- SERVER_NAME = hostname | hostnumber
deferred
end
server_port: INTEGER
-- The port on which this request was received, as used in the <port>
-- part of the script URI.
-- SERVER_PORT = 1*digit
deferred
end
server_protocol: STRING
-- The name and revision of the information protocol this request
-- came in with.
-- SERVER_PROTOCOL = HTTP-Version | extension-version
-- HTTP-Version = "HTTP" "/" 1*digit "." 1*digit
-- extension-version = protocol "/" 1*digit "." 1*digit
-- protocol = 1*( alpha | digit | "+" | "-" | "." )
-- `protocol' is a version of the <scheme> part of the script URI,
-- and is not case sensitive. By convention, `protocol' is in upper
-- case.
deferred
end
server_software: STRING
-- The name and version of the information server software answering
-- the request (and running the gateway).
-- SERVER_SOFTWARE = *CHAR
deferred
end
feature -- HTTP_*
http_accept_charset: detachable STRING
-- Contents of the Accept-Charset: header from the current request, if there is one.
-- Example: 'iso-8859-1,*,utf-8'.
deferred
end
http_accept_encoding: detachable STRING
-- Contents of the Accept-Encoding: header from the current request, if there is one.
-- Example: 'gzip'.
deferred
end
http_accept_language: detachable STRING
-- Contents of the Accept-Language: header from the current request, if there is one.
-- Example: 'en'.
deferred
end
http_connection: detachable STRING
-- Contents of the Connection: header from the current request, if there is one.
-- Example: 'Keep-Alive'.
deferred
end
http_host: detachable STRING
-- Contents of the Host: header from the current request, if there is one.
deferred
end
http_referer: detachable STRING
-- The address of the page (if any) which referred the user agent to the current page.
-- This is set by the user agent.
-- 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.
deferred
end
http_user_agent: detachable STRING
-- Contents of the User-Agent: header from the current request, if there is one.
-- This is a string denoting the user agent being which is accessing the page.
-- A typical example is: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586).
-- Among other things, you can use this value to tailor your page's
-- output to the capabilities of the user agent.
deferred
end
http_authorization: detachable STRING
-- Contents of the Authorization: header from the current request, if there is one.
deferred
end
feature -- Extra
request_uri: STRING
-- The URI which was given in order to access this page; for instance, '/index.html'.
deferred
end
orig_path_info: detachable STRING
-- Original version of `path_info' before processed by Current environment
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

View File

@@ -0,0 +1,602 @@
note
description: "[
Interface for a request environment
It includes CGI interface and a few extra values that are usually valuable
See http://ken.coar.org/cgi/draft-coar-cgi-v11-03.txt
2.2. Basic Rules
The following rules are used throughout this specification to
describe basic parsing constructs.
alpha = lowalpha | hialpha
alphanum = alpha | digit
lowalpha = a | b | c | d | e | f | g | h
| i | j | k | l | m | n | o | p
| q | r | s | t | u | v | w | x
| y | z
hialpha = A | B | C | D | E | F | G | H
| I | J | K | L | M | N | O | P
| Q | R | S | T | U | V | W | X
| Y | Z
digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
| 8 | 9
hex = digit | A | B | C | D | E | F | a
| b | c | d | e | f
escaped = % hex hex
OCTET = <any 8-bit sequence of data>
CHAR = <any US-ASCII character (octets 0 - 127)>
CTL = <any US-ASCII control character
(octets 0 - 31) and DEL (127)>
CR = <US-ASCII CR, carriage return (13)>
LF = <US-ASCII LF, linefeed (10)>
SP = <US-ASCII SP, space (32)>
HT = <US-ASCII HT, horizontal tab (9)>
NL = CR | LF
LWSP = SP | HT | NL
tspecial = ( | ) | "@" | , | ; | : | \ | "
| / | [ | ] | ? | < | > | { | }
| SP | HT | NL
token = 1*<any CHAR except CTLs or tspecials>
quoted-string = ( " *qdtext " ) | ( "<" *qatext ">")
qdtext = <any CHAR except %" and CTLs but including LWSP>
qatext = <any CHAR except "<", ">" and CTLs but including LWSP>
mark = - | _ | . | ! | ~ | * | ' | ( | )
unreserved = alphanum | mark
reserved = ; | / | ? | : | @ | & | = | $ | ,
uric = reserved | unreserved | escaped
Note that newline (NL) need not be a single character, but can
be a character sequence.
3.2. The Script-URI
The 'Script-URI' is defined as the URI of the resource
identified by the metavariables. Often, this URI will be the
same as the URI requested by the client (the 'Client-URI');
however, it need not be. Instead, it could be a URI invented
by the server, and so it can only be used in the context of
the server and its CGI interface.
The Script-URI has the syntax of generic-RL as defined in
section 2.1 of RFC 1808 [7], with the exception that object
parameters and fragment identifiers are not permitted:
<scheme>://<host><port>/<path>?<query>
The various components of the Script-URI are defined by some
of the metavariables (see section 4 below);
script-uri = protocol "://" SERVER_NAME ":" SERVER_PORT enc-script
enc-path-info "?" QUERY_STRING
where 'protocol' is obtained from SERVER_PROTOCOL,
'enc-script' is a URL-encoded version of SCRIPT_NAME and
'enc-path-info' is a URL-encoded version of PATH_INFO. See
section 4.6 for more information about the PATH_INFO
metavariable.
Note that the scheme and the protocol are not identical; for
instance, a resource accessed via an SSL mechanism may have a
Client-URI with a scheme of "https" rather than "http".
CGI/1.1 provides no means for the script to reconstruct this,
and therefore the Script-URI includes the base protocol used.
]"
legal: "See notice at end of class."
status: "See notice at end of class."
date: "$Date$"
revision: "$Revision$"
deferred
class
GW_ENVIRONMENT
inherit
GW_VARIABLES [STRING_8]
ITERABLE [STRING_8]
feature -- Access
table: HASH_TABLE [STRING, STRING]
-- These variables are specific to requests made with HTTP.
-- Interpretation of these variables may depend on the value of
-- SERVER_PROTOCOL.
--
-- Environment variables with names beginning with "HTTP_" contain
-- header data read from the client, if the protocol used was HTTP.
-- The HTTP header name is converted to upper case, has all
-- occurrences of "-" replaced with "_" and has "HTTP_" prepended to
-- give the environment variable name. The header data may be
-- presented as sent by the client, or may be rewritten in ways which
-- do not change its semantics. If multiple headers with the same
-- field-name are received then they must be rewritten as a single
-- header having the same semantics. Similarly, a header that is
-- received on more than one line must be merged onto a single line.
-- The server must, if necessary, change the representation of the
-- data (for example, the character set) to be appropriate for a CGI
-- environment variable.
--
-- The server is not required to create environment variables for all
-- the headers that it receives. In particular, it may remove any
-- headers carrying authentication information, such as
-- "Authorization"; it may remove headers whose value is available to
-- the script via other variables, such as "Content-Length" and
-- "Content-Type".
--
-- For convenience it might also include the following CGI entries
deferred
end
feature -- Access: table
new_cursor: HASH_TABLE_ITERATION_CURSOR [STRING_8, STRING_8]
-- Fresh cursor associated with current structure
do
create Result.make (table)
end
feature -- Common Gateway Interface - 1.1 8 January 1996
auth_type: detachable STRING
-- This variable is specific to requests made via the "http"
-- scheme.
--
-- If the Script-URI required access authentication for external
-- access, then the server MUST set the value of this variable
-- from the 'auth-scheme' token in the request's "Authorization"
-- header field. Otherwise it is set to NULL.
--
-- AUTH_TYPE = "" | auth-scheme
-- auth-scheme = "Basic" | "Digest" | token
--
-- HTTP access authentication schemes are described in section 11
-- of the HTTP/1.1 specification [8]. The auth-scheme is not
-- case-sensitive.
--
-- Servers MUST provide this metavariable to scripts if the
-- request header included an "Authorization" field that was
-- authenticated.
deferred
end
content_length: detachable STRING
-- This metavariable is set to the size of the message-body
-- entity attached to the request, if any, in decimal number of
-- octets. If no data are attached, then this metavariable is
-- either NULL or not defined. The syntax is the same as for the
-- HTTP "Content-Length" header field (section 14.14, HTTP/1.1
-- specification [8]).
--
-- CONTENT_LENGTH = "" | 1*digit
--
-- Servers MUST provide this metavariable to scripts if the
-- request was accompanied by a message-body entity.
deferred
end
content_length_value: INTEGER
-- Integer value related to `content_length"
deferred
end
content_type: detachable STRING
-- If the request includes a message-body, CONTENT_TYPE is set to
-- the Internet Media Type [9] of the attached entity if the type
-- was provided via a "Content-type" field in the request header,
-- or if the server can determine it in the absence of a supplied
-- "Content-type" field. The syntax is the same as for the HTTP
-- "Content-Type" header field.
--
-- CONTENT_TYPE = "" | media-type
-- media-type = type "/" subtype *( ";" parameter)
-- type = token
-- subtype = token
-- parameter = attribute "=" value
-- attribute = token
-- value = token | quoted-string
--
-- The type, subtype, and parameter attribute names are not
-- case-sensitive. Parameter values MAY be case sensitive. Media
-- types and their use in HTTP are described in section 3.7 of
-- the HTTP/1.1 specification [8].
--
-- Example:
--
-- application/x-www-form-urlencoded
--
-- There is no default value for this variable. If and only if it
-- is unset, then the script MAY attempt to determine the media
-- type from the data received. If the type remains unknown, then
-- the script MAY choose to either assume a content-type of
-- application/octet-stream or reject the request with a 415
-- ("Unsupported Media Type") error. See section 7.2.1.3 for more
-- information about returning error status values.
--
-- Servers MUST provide this metavariable to scripts if a
-- "Content-Type" field was present in the original request
-- header. If the server receives a request with an attached
-- entity but no "Content-Type" header field, it MAY attempt to
-- determine the correct datatype, or it MAY omit this
-- metavariable when communicating the request information to the
-- script.
deferred
end
gateway_interface: STRING
-- This metavariable is set to the dialect of CGI being used by
-- the server to communicate with the script. Syntax:
--
-- GATEWAY_INTERFACE = "CGI" "/" major "." minor
-- major = 1*digit
-- minor = 1*digit
--
-- Note that the major and minor numbers are treated as separate
-- integers and hence each may be more than a single digit. Thus
-- CGI/2.4 is a lower version than CGI/2.13 which in turn is
-- lower than CGI/12.3. Leading zeros in either the major or the
-- minor number MUST be ignored by scripts and SHOULD NOT be
-- generated by servers.
--
-- This document defines the 1.1 version of the CGI interface
-- ("CGI/1.1").
--
-- Servers MUST provide this metavariable to scripts.
--
-- The version of the CGI specification to which this server
-- complies. Syntax:
--
-- GATEWAY_INTERFACE = "CGI" "/" 1*digit "." 1*digit
--
-- Note that the major and minor numbers are treated as separate
-- integers and that each may be incremented higher than a single
-- digit. Thus CGI/2.4 is a lower version than CGI/2.13 which in
-- turn is lower than CGI/12.3. Leading zeros must be ignored by
-- scripts and should never be generated by servers.
deferred
end
path_info: STRING
-- The PATH_INFO metavariable specifies a path to be interpreted
-- by the CGI script. It identifies the resource or sub-resource
-- to be returned by the CGI script, and it is derived from the
-- portion of the URI path following the script name but
-- preceding any query data. The syntax and semantics are similar
-- to a decoded HTTP URL 'path' token (defined in RFC 2396 [4]),
-- with the exception that a PATH_INFO of "/" represents a single
-- void path segment.
--
-- PATH_INFO = "" | ( "/" path )
-- path = segment *( "/" segment )
-- segment = *pchar
-- pchar = <any CHAR except "/">
--
-- The PATH_INFO string is the trailing part of the <path>
-- component of the Script-URI (see section 3.2) that follows the
-- SCRIPT_NAME portion of the path.
--
-- Servers MAY impose their own restrictions and limitations on
-- what values they will accept for PATH_INFO, and MAY reject or
-- edit any values they consider objectionable before passing
-- them to the script.
--
-- Servers MUST make this URI component available to CGI scripts.
-- The PATH_INFO value is case-sensitive, and the server MUST
-- preserve the case of the PATH_INFO element of the URI when
-- making it available to scripts.
deferred
end
path_translated: detachable STRING
-- PATH_TRANSLATED is derived by taking any path-info component
-- of the request URI (see section 6.1.6), decoding it (see
-- section 3.1), parsing it as a URI in its own right, and
-- performing any virtual-to-physical translation appropriate to
-- map it onto the server's document repository structure. If the
-- request URI includes no path-info component, the
-- PATH_TRANSLATED metavariable SHOULD NOT be defined.
--
--
-- PATH_TRANSLATED = *CHAR
--
-- For a request such as the following:
--
-- http://somehost.com/cgi-bin/somescript/this%2eis%2epath%2einfo
--
-- the PATH_INFO component would be decoded, and the result
-- parsed as though it were a request for the following:
--
-- http://somehost.com/this.is.the.path.info
--
-- This would then be translated to a location in the server's
-- document repository, perhaps a filesystem path something like
-- this:
--
-- /usr/local/www/htdocs/this.is.the.path.info
--
-- The result of the translation is the value of PATH_TRANSLATED.
--
-- The value of PATH_TRANSLATED may or may not map to a valid
-- repository location. Servers MUST preserve the case of the
-- path-info segment if and only if the underlying repository
-- supports case-sensitive names. If the repository is only
-- case-aware, case-preserving, or case-blind with regard to
-- document names, servers are not required to preserve the case
-- of the original segment through the translation.
--
-- The translation algorithm the server uses to derive
-- PATH_TRANSLATED is implementation defined; CGI scripts which
-- use this variable may suffer limited portability.
--
-- Servers SHOULD provide this metavariable to scripts if and
-- only if the request URI includes a path-info component.
deferred
end
query_string: STRING
-- A URL-encoded string; the <query> part of the Script-URI. (See
-- section 3.2.)
--
-- QUERY_STRING = query-string
-- query-string = *uric
-- The URL syntax for a query string is described in section 3 of
-- RFC 2396 [4].
--
-- Servers MUST supply this value to scripts. The QUERY_STRING
-- value is case-sensitive. If the Script-URI does not include a
-- query component, the QUERY_STRING metavariable MUST be defined
-- as an empty string ("").
deferred
end
remote_addr: STRING
-- The IP address of the client sending the request to the
-- server. This is not necessarily that of the user agent (such
-- as if the request came through a proxy).
--
-- REMOTE_ADDR = hostnumber
-- hostnumber = ipv4-address | ipv6-address
-- The definitions of ipv4-address and ipv6-address are provided
-- in Appendix B of RFC 2373 [13].
--
-- Servers MUST supply this value to scripts.
deferred
end
remote_host: detachable STRING
-- The fully qualified domain name of the client sending the
-- request to the server, if available, otherwise NULL. (See
-- section 6.1.9.) Fully qualified domain names take the form as
-- described in section 3.5 of RFC 1034 [10] and section 2.1 of
-- RFC 1123 [5]. Domain names are not case sensitive.
--
-- Servers SHOULD provide this information to scripts.
deferred
end
remote_ident: detachable STRING
-- The identity information reported about the connection by a
-- RFC 1413 [11] request to the remote agent, if available.
-- Servers MAY choose not to support this feature, or not to
-- request the data for efficiency reasons.
--
-- REMOTE_IDENT = *CHAR
--
-- The data returned may be used for authentication purposes, but
-- the level of trust reposed in them should be minimal.
--
-- Servers MAY supply this information to scripts if the RFC1413
-- [11] lookup is performed.
deferred
end
remote_user: detachable STRING
-- If the request required authentication using the "Basic"
-- mechanism (i.e., the AUTH_TYPE metavariable is set to
-- "Basic"), then the value of the REMOTE_USER metavariable is
-- set to the user-ID supplied. In all other cases the value of
-- this metavariable is undefined.
--
-- REMOTE_USER = *OCTET
--
-- This variable is specific to requests made via the HTTP
-- protocol.
--
-- Servers SHOULD provide this metavariable to scripts.
deferred
end
request_method: STRING
-- The REQUEST_METHOD metavariable is set to the method with
-- which the request was made, as described in section 5.1.1 of
-- the HTTP/1.0 specification [3] and section 5.1.1 of the
-- HTTP/1.1 specification [8].
--
-- REQUEST_METHOD = http-method
-- http-method = "GET" | "HEAD" | "POST" | "PUT" | "DELETE"
-- | "OPTIONS" | "TRACE" | extension-method
-- extension-method = token
--
-- The method is case sensitive. CGI/1.1 servers MAY choose to
-- process some methods directly rather than passing them to
-- scripts.
--
-- This variable is specific to requests made with HTTP.
--
-- Servers MUST provide this metavariable to scripts.
deferred
end
script_name: STRING
-- The SCRIPT_NAME metavariable is set to a URL path that could
-- identify the CGI script (rather than the script's output). The
-- syntax and semantics are identical to a decoded HTTP URL
-- 'path' token (see RFC 2396 [4]).
--
-- SCRIPT_NAME = "" | ( "/" [ path ] )
--
-- The SCRIPT_NAME string is some leading part of the <path>
-- component of the Script-URI derived in some implementation
-- defined manner. No PATH_INFO or QUERY_STRING segments (see
-- sections 6.1.6 and 6.1.8) are included in the SCRIPT_NAME
-- value.
--
-- Servers MUST provide this metavariable to scripts.
deferred
end
server_name: STRING
-- The SERVER_NAME metavariable is set to the name of the server,
-- as derived from the <host> part of the Script-URI (see section
-- 3.2).
--
-- SERVER_NAME = hostname | hostnumber
--
-- Servers MUST provide this metavariable to scripts.
deferred
end
server_port: INTEGER
-- The SERVER_PORT metavariable is set to the port on which the
-- request was received, as used in the <port> part of the
-- Script-URI.
--
-- SERVER_PORT = 1*digit
--
-- If the <port> portion of the script-URI is blank, the actual
-- port number upon which the request was received MUST be
-- supplied.
--
-- Servers MUST provide this metavariable to scripts.
deferred
end
server_protocol: STRING
-- The SERVER_PROTOCOL metavariable is set to the name and
-- revision of the information protocol with which the request
-- arrived. This is not necessarily the same as the protocol
-- version used by the server in its response to the client.
--
-- SERVER_PROTOCOL = HTTP-Version | extension-version
-- | extension-token
-- HTTP-Version = "HTTP" "/" 1*digit "." 1*digit
-- extension-version = protocol "/" 1*digit "." 1*digit
-- protocol = 1*( alpha | digit | "+" | "-" | "." )
-- extension-token = token
--
-- 'protocol' is a version of the <scheme> part of the
-- Script-URI, but is not identical to it. For example, the
-- scheme of a request may be "https" while the protocol remains
-- "http". The protocol is not case sensitive, but by convention,
-- 'protocol' is in upper case.
--
-- A well-known extension token value is "INCLUDED", which
-- signals that the current document is being included as part of
-- a composite document, rather than being the direct target of
-- the client request.
--
-- Servers MUST provide this metavariable to scripts.
deferred
end
server_software: STRING
-- The SERVER_SOFTWARE metavariable is set to the name and
-- version of the information server software answering the
-- request (and running the gateway).
--
-- SERVER_SOFTWARE = 1*product
-- product = token [ "/" product-version ]
-- product-version = token
-- Servers MUST provide this metavariable to scripts.
deferred
end
feature -- HTTP_*
http_accept_charset: detachable STRING
-- Contents of the Accept-Charset: header from the current request, if there is one.
-- Example: 'iso-8859-1,*,utf-8'.
deferred
end
http_accept_encoding: detachable STRING
-- Contents of the Accept-Encoding: header from the current request, if there is one.
-- Example: 'gzip'.
deferred
end
http_accept_language: detachable STRING
-- Contents of the Accept-Language: header from the current request, if there is one.
-- Example: 'en'.
deferred
end
http_connection: detachable STRING
-- Contents of the Connection: header from the current request, if there is one.
-- Example: 'Keep-Alive'.
deferred
end
http_host: detachable STRING
-- Contents of the Host: header from the current request, if there is one.
deferred
end
http_referer: detachable STRING
-- The address of the page (if any) which referred the user agent to the current page.
-- This is set by the user agent.
-- 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.
deferred
end
http_user_agent: detachable STRING
-- Contents of the User-Agent: header from the current request, if there is one.
-- This is a string denoting the user agent being which is accessing the page.
-- A typical example is: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586).
-- Among other things, you can use this value to tailor your page's
-- output to the capabilities of the user agent.
deferred
end
http_authorization: detachable STRING
-- Contents of the Authorization: header from the current request, if there is one.
deferred
end
feature -- Extra
request_uri: STRING
-- The URI which was given in order to access this page; for instance, '/index.html'.
deferred
end
orig_path_info: detachable STRING
-- Original version of `path_info' before processed by Current environment
deferred
end
invariant
server_name_not_empty: not server_name.is_empty
server_port_set: server_port /= 0
request_method_attached: request_method /= Void
path_info_attached: path_info /= Void
query_string_attached: query_string /= Void
remote_addr_attached: remote_addr /= Void
;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