indexing
	description: "Objects that handle the retrieving of data"
	author: "david"
	date: "$Date$"
	revision: "$Revision$"

deferred class interface
	RETRIEVING_PROTOCOL

feature -- Access

	default_port: INTEGER
			-- Default port
			-- (from EMAIL_PROTOCOL)

	header (h: STRING): HEADER
			-- Retrieve the content of the header 'h'
			-- (from EMAIL_RESOURCE)

	headers: HASH_TABLE [HEADER, STRING]
			-- All information concerning each headers
			-- (from EMAIL_RESOURCE)

	hostname: STRING
			-- hostname .. ex: smtp
			-- (from EMAIL_PROTOCOL)
	
feature -- Status report

	can_receive: BOOLEAN
			-- Can resource receive?
			-- (from EMAIL_RESOURCE)

	can_send: BOOLEAN
			-- Can resource send?
			-- (from EMAIL_RESOURCE)

	error: BOOLEAN
			-- Is there an error?
			-- (from EMAIL_RESOURCE)

	is_connected: BOOLEAN
			-- Is the connection done?
			-- (from EMAIL_PROTOCOL)

	is_header_valid: BOOLEAN
			-- Is the email resource's header valid?
			-- (from EMAIL_RESOURCE)

	is_initiated: BOOLEAN
			-- Has the connection has been initiated?
			-- (from EMAIL_RESOURCE)

	transfer_error: TRANSFER_ERROR
			-- Transfer error handling
			-- (from EMAIL_RESOURCE)
	
feature -- Status setting

	disable_initiated
			-- Unset is_initiated.
			-- (from EMAIL_RESOURCE)

	disable_transfer_error
			-- Disable transfer error.
			-- (from EMAIL_RESOURCE)

	enable_initiated
			-- Set is_initiated.
			-- (from EMAIL_RESOURCE)

	enable_transfer_error
			-- Enable transfer error.
			-- (from EMAIL_RESOURCE)

	set_transfer_error_message (s: STRING)
			-- Set transfer error message to 's'.
			-- (from EMAIL_RESOURCE)
	
feature -- Basic operations

	close_protocol
			-- Close the protocol.
			-- (from EMAIL_PROTOCOL)
		ensure -- from PROTOCOL_RESOURCE
			protocol_not_initiated: not is_initiated

	execute_transfer
			-- Do the transfer.

	initiate_protocol
			-- Initiate the protocol.
			-- (from EMAIL_PROTOCOL)
		ensure -- from PROTOCOL_RESOURCE
			protocol_initiated: is_initiated

	transfer (resource: EMAIL_RESOURCE)
			-- Transfer the Current email resource to 'resource'.
			-- (from EMAIL_RESOURCE)
		require -- from EMAIL_RESOURCE
			resource_exists: resource /= void
			is_valid_transfer: (resource.can_be_sent and can_send) or (resource.can_receive and can_be_received)
			connection_is_initiated: (can_be_sent and resource.is_initiated) or (is_initiated and resource.can_be_received)
	
feature -- Constants for SMTP Protocol

	Ack_begin_connection: INTEGER is 220
			-- (from EMAIL_CONSTANTS)

	Ack_end_connection: INTEGER is 221
			-- (from EMAIL_CONSTANTS)

	Data: STRING is "DATA"
			-- (from EMAIL_CONSTANTS)

	Data_code: INTEGER is 354
			-- (from EMAIL_CONSTANTS)

	Ehlo: STRING is "EHLO "
			-- (from EMAIL_CONSTANTS)

	Helo: STRING is "HELO "
			-- (from EMAIL_CONSTANTS)

	Mail_bcc: STRING is "RCPT BCC:"
			-- (from EMAIL_CONSTANTS)

	Mail_cc: STRING is "RCPT CC:"
			-- (from EMAIL_CONSTANTS)

	Mail_from: STRING is "MAIL FROM: "
			-- (from EMAIL_CONSTANTS)

	Mail_reply_to: STRING is "RCPT REPLY TO:"
			-- (from EMAIL_CONSTANTS)

	Mail_to: STRING is "RCPT TO: "
			-- (from EMAIL_CONSTANTS)

	No_valid_recipient: INTEGER is 554
			-- (from EMAIL_CONSTANTS)

	Ok: INTEGER is 250
			-- (from EMAIL_CONSTANTS)

	Quit: STRING is "QUIT"
			-- (from EMAIL_CONSTANTS)

	Remote_error: INTEGER is 550
			-- (from EMAIL_CONSTANTS)

	Size_error: INTEGER is 500
			-- (from EMAIL_CONSTANTS)

	Struct_error: INTEGER is 552
			-- (from EMAIL_CONSTANTS)
	
feature -- Constants for email headers (Authorized keys for the Hashtables)

	default_headers: ARRAY [STRING]
			-- (from EMAIL_CONSTANTS)

	H_bcc: STRING is "Bcc"
			-- (from EMAIL_CONSTANTS)

	H_cc: STRING is "Cc"
			-- (from EMAIL_CONSTANTS)

	H_from: STRING is "From"
			-- (from EMAIL_CONSTANTS)

	H_reply_to: STRING is "Reply-to"
			-- (from EMAIL_CONSTANTS)

	H_subject: STRING is "Subject"
			-- (from EMAIL_CONSTANTS)

	H_to: STRING is "To"
			-- (from EMAIL_CONSTANTS)
	
feature -- Implementation (EMAIL_RESOURCE)

	Can_be_received: BOOLEAN is False
			-- Can a protocol be received?
			-- (from PROTOCOL_RESOURCE)

	Can_be_sent: BOOLEAN is False
			-- Can a protocol resource be send?
			-- (from PROTOCOL_RESOURCE)
	
feature -- Settings

	disable_connected
			-- Unset is_connected.
			-- (from EMAIL_PROTOCOL)

	enable_connected
			-- Set is_connected.
			-- (from EMAIL_PROTOCOL)

	set_default_port (new_port: INTEGER)
			-- Set the default port to 'new_port'.
			-- (from EMAIL_PROTOCOL)
	
invariant

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

end -- class RETRIEVING_PROTOCOL