indexing
	description: "Access to information provided by a user through an HTML form. This class may be used as ancestor by classes needing its facilities."
	status: "See notice at end of class"
	date: "$Date$"
	revision: "$Revision$"

deferred class interface
	CGI_INTERFACE

feature -- Initialization

	make
			-- Initiate input data parsing and process information.
	
feature -- Access

	button_value (field_name: STRING; overriding_value: STRING): BOOLEAN
			-- Is Button relative to 'field_name' selected ?
			-- (from CGI_FORMS)
		require -- from CGI_FORMS
			field_not_void: field_name /= void
			field_exists: field_defined (field_name)

	menu_values (field_name: STRING): LINKED_LIST [STRING]
			-- Selected values for a list, whose name
			-- is 'field_name'.
			-- (from CGI_FORMS)
		require -- from CGI_FORMS
			field_not_void: field_name /= void
			field_exists: field_defined (field_name)
		ensure -- from CGI_FORMS
			value_exists: Result /= void

	output: STDOUT
			-- Shared standard output.
			-- (from CGI_IN_AND_OUT)

	response_header: CGI_RESPONSE_HEADER
			-- (from CGI_IN_AND_OUT)

	stdin: STDIN
			-- Shared standard input
			-- (from CGI_IN_AND_OUT)

	text_field_value (field_name: STRING): STRING
			-- First (unique?) value for a text field.
			-- Applies for a password and a text area too.
			-- (from CGI_FORMS)
		require -- from CGI_FORMS
			field_not_void: field_name /= void
			field_exists: field_defined (field_name)
		ensure -- from CGI_FORMS
			value_exists: Result /= void
	
feature -- Advanced Access

	fields: ARRAY [STRING]
			-- Names of fields in the form.
			-- (from CGI_FORMS)

	value_count (field_name: STRING): INTEGER
			-- Number of values for a field.
			-- (from CGI_FORMS)
		require -- from CGI_FORMS
			field_not_void: field_name /= void
			field_exists: field_defined (field_name)
		ensure -- from CGI_FORMS
			valid_count: Result >= 0

	value_list (field_name: STRING): LINKED_LIST [STRING]
			-- List of values for a field.
			-- (from CGI_FORMS)
		require -- from CGI_FORMS
			field_not_void: field_name /= void
			field_exists: field_defined (field_name)
		ensure -- from CGI_FORMS
			valid_count: Result.count = value_count (field_name)
	
feature -- Basic Operations

	handle_exception
			-- General exception hanlding.
			-- (from CGI_ERROR_HANDLING)

	raise_error (msg: STRING)
			-- Raise an error
			-- (from CGI_ERROR_HANDLING)
		require -- from CGI_ERROR_HANDLING
			message_exists: msg /= void
		ensure -- from CGI_ERROR_HANDLING
			exists: raised_error /= void
	
feature -- Cookies

	cookies: HASH_TABLE [STRING, STRING]
			-- Cookie Information relative to data
			-- (from CGI_ENVIRONMENT)
	
feature -- Environment variable setting

	set_environment_variable (variable, val: STRING)
			-- Set environment variable variable to val.
			-- (from CGI_ENVIRONMENT)
		require -- from CGI_ENVIRONMENT
			valid_variable: variable /= void and then variable.count > 0
			valid_value: val /= void
	
feature -- Headerline based environment variables

	http_accept: STRING
			-- MIME types which the client will accept.
			-- (from CGI_ENVIRONMENT)

	http_user_agent: STRING
			-- Browser the client is using to send the request.
			-- (from CGI_ENVIRONMENT)
	
feature -- Miscellanous

	execute
			-- Process user provided information.

	set_environment
			-- Set environment variable to user value.
	
feature -- Not request-specific environment variables

	gateway_interface: STRING
			-- Revision of the CGI specification to which this server complies.
			-- (from CGI_ENVIRONMENT)

	server_name: STRING
			-- Server's hostname, DNS alias, or IP address.
			-- (from CGI_ENVIRONMENT)

	server_software: STRING
			-- Name and version of information server answering the request.
			-- (from CGI_ENVIRONMENT)
	
feature -- Report

	field_defined (field_name: STRING): BOOLEAN
			-- Is field field_name defined?
			-- (from CGI_FORMS)
		require -- from CGI_FORMS
			filed_name_not_void: field_name /= void
	
feature -- Request specific environment variables

	auth_type: STRING
			-- Protocol-specific authentication method used to validate user.
			-- (from CGI_ENVIRONMENT)

	content_length: STRING
			-- Length of the said content as given by the client.
			-- (from CGI_ENVIRONMENT)

	content_type: STRING
			-- Content type of data.
			-- (from CGI_ENVIRONMENT)

	path_info: STRING
			-- Extra path information, as given by the client.
			-- (from CGI_ENVIRONMENT)

	path_translated: STRING
			-- Translated version of PATH_INFO provided by server.
			-- (from CGI_ENVIRONMENT)

	query_string: STRING
			-- Information which follows ? in URL referencing CGI program.
			-- (from CGI_ENVIRONMENT)

	remote_addr: STRING
			-- IP address of the remote host making the request.
			-- (from CGI_ENVIRONMENT)

	remote_host: STRING
			-- Hostname making the request.
			-- (from CGI_ENVIRONMENT)

	remote_ident: STRING
			-- User name retrieved from server if RFC 931 supported.
			-- (from CGI_ENVIRONMENT)

	remote_user: STRING
			-- Username, if applicable.
			-- (from CGI_ENVIRONMENT)

	request_method: STRING
			-- Method with which the request was made.
			-- (from CGI_ENVIRONMENT)

	script_name: STRING
			-- Virtual path to the script being executed.
			-- (from CGI_ENVIRONMENT)

	server_port: STRING
			-- Port number to which request was sent.
			-- (from CGI_ENVIRONMENT)

	server_protocol: STRING
			-- Name and revision of information protocol of this request.
			-- (from CGI_ENVIRONMENT)
	
invariant

		-- from ANY
	reflexive_equality: standard_is_equal (Current)
	reflexive_conformance: conforms_to (Current)

end -- class CGI_INTERFACE