indexing
description: "The FILE protocol"
status: "See note at end of class"
date: "$Date$"
revision: "$Revision$"
class interface
FILE_PROTOCOL
create
make (addr: like address)
DATA_RESOURCE
require DATA_RESOURCE
address_exists: addr /= void
ensure DATA_RESOURCE
address_set: address = addr
feature
address: FILE_URL
hash_code: INTEGER
DATA_RESOURCE
ensure HASHABLE
good_hash_value: Result >= 0
last_packet: STRING
DATA_RESOURCE
location: STRING
DATA_RESOURCE
require DATA_RESOURCE
address_exists: address /= void
mode: INTEGER
DATA_RESOURCE
port: INTEGER
DATA_RESOURCE
service: STRING
DATA_RESOURCE
feature
bytes_transferred: INTEGER
count: INTEGER
last_packet_size: INTEGER
read_buffer_size: INTEGER
feature
is_equal (other: like Current): BOOLEAN
other
DATA_RESOURCE
require ANY
other_not_void: other /= void
ensure ANY
symmetric: Result implies other.is_equal (Current)
consistent: standard_is_equal (other) implies Result
feature
address_exists: BOOLEAN
error: BOOLEAN
DATA_RESOURCE
error_code: INTEGER
DATA_RESOURCE
error_text (code: INTEGER): STRING
DATA_RESOURCE_ERROR_CONSTANTS
require DATA_RESOURCE_ERROR_CONSTANTS
positive_code: code > 0
has_packet: BOOLEAN
last_packet
DATA_RESOURCE
Is_count_valid: BOOLEAN is True
count
is_hashable: BOOLEAN
DATA_RESOURCE
ensure HASHABLE
ok_if_not_default: Result implies (Current /= default)
Is_local: BOOLEAN is True
is_mode_set: BOOLEAN
DATA_RESOURCE
is_open: BOOLEAN
is_packet_pending: BOOLEAN
is_proxy_supported: BOOLEAN
DATA_RESOURCE
is_readable: BOOLEAN
ensure DATA_RESOURCE
mode_unchanged: mode = old mode
is_writable: BOOLEAN
ensure DATA_RESOURCE
mode_unchanged: mode = old mode
read_mode: BOOLEAN
Supports_multiple_transactions: BOOLEAN is False
timeout: INTEGER
DATA_RESOURCE
transfer_initiated: BOOLEAN
DATA_RESOURCE
valid_mode (n: INTEGER): BOOLEAN
n
write_mode: BOOLEAN
feature
close
require DATA_RESOURCE
open: is_open
ensure DATA_RESOURCE
closed: not is_open
mode_unchanged: mode = old mode
no_packet_available: not (has_packet and is_packet_pending)
initiate_transfer
require DATA_RESOURCE
no_error_occurred: not error
mode_set: is_mode_set
open: is_open
not_initiated: not transfer_initiated
ensure DATA_RESOURCE
failure_means_error: not transfer_initiated implies error
open
require DATA_RESOURCE
no_error_occurred: not error
mode_set: is_mode_set
ensure DATA_RESOURCE
no_packet_available: not (has_packet and is_packet_pending)
initiated_flag_reset: not transfer_initiated
failure_means_error: not is_open implies error
ensure then
counter_reset: bytes_transferred = 0
reset_error
DATA_RESOURCE
ensure DATA_RESOURCE
error_reset: not error
reset_overwrite_mode
reset_proxy
DATA_RESOURCE
ensure DATA_RESOURCE
proxy_reset: not address.is_proxy_used
reuse_connection (other: DATA_RESOURCE)
other
require DATA_RESOURCE
other_exists: other /= void
same_type: same_type (other)
supports_multiple_transactions: supports_multiple_transactions and other.supports_multiple_transactions
other_opened: other.is_open
set_overwrite_mode
set_password (pw: STRING)
pw
DATA_RESOURCE
require DATA_RESOURCE
password_accepted: address.is_password_accepted
non_empty_password: pw /= void and then not pw.is_empty
set_port (port_no: INTEGER)
port_no
DATA_RESOURCE
require DATA_RESOURCE
closed: not is_open
non_negative_port_number: port_no >= 0
ensure DATA_RESOURCE
port_set: port = port_no
set_proxy (host: STRING; port_no: INTEGER)
hostport_no
DATA_RESOURCE
require DATA_RESOURCE
proxy_supported: is_proxy_supported
closed: not is_open
non_empty_host: host /= void and then not host.is_empty
host_ok: address.proxy_host_ok (host)
non_negative_port: port_no >= 0
ensure DATA_RESOURCE
proxy_set: address.is_proxy_used
set_proxy_information (pi: PROXY_INFORMATION)
pi
DATA_RESOURCE
require DATA_RESOURCE
proxy_supported: is_proxy_supported
ensure DATA_RESOURCE
proxy_set: address.is_proxy_used
set_read_buffer_size (n: INTEGER)
require DATA_RESOURCE
size_positive: n > 0
ensure DATA_RESOURCE
buffer_size_set: read_buffer_size = n
ensure then
buffer_size_correct: buffer.area.count = read_buffer_size
set_read_mode
ensure DATA_RESOURCE
read_mode_set: read_mode
set_timeout (n: INTEGER)
n
DATA_RESOURCE
require DATA_RESOURCE
non_negative: n >= 0
ensure DATA_RESOURCE
timeout_set: timeout = n
set_username (un: STRING)
un
DATA_RESOURCE
require DATA_RESOURCE
username_accepted: address.has_username
non_empty_username: un /= void and then not un.is_empty
set_write_mode
ensure DATA_RESOURCE
write_mode_set: write_mode
feature
dispose
DATA_RESOURCE
feature
read
require DATA_RESOURCE
no_error_occurred: not error
open: is_open
transfer_initated: transfer_initiated
readable: is_readable
positive_read_buffer_size: read_buffer_size > 0
packet_pending: is_packet_pending
ensure DATA_RESOURCE
packet_received: is_packet_pending implies last_packet_size > 0
counter_correct: not error implies bytes_transferred = old bytes_transferred + last_packet_size
feature
put (other: DATA_RESOURCE)
other
require DATA_RESOURCE
no_error_occurred: not (error and other.error)
other_resource_exists: other /= void
resources_open: is_open and other.is_open
writable: is_writable
transfer_initated: transfer_initiated
invariant
ANY
reflexive_equality: standard_is_equal (Current)
reflexive_conformance: conforms_to (Current)
DATA_RESOURCE
address_assigned: address /= void
timeout_non_negative: timeout >= 0
packet_constraint: not (has_packet xor last_packet /= void)
pending_constraint: is_packet_pending implies (is_open and is_readable and transfer_initiated)
error_definition: error = (error_code /= 0)
valid_count_constraint: count > 0 implies is_count_valid
mode_constraint: is_mode_set = read_mode xor write_mode
end -- FILE_PROTOCOL