Files
EWF/library/server/httpd/configuration/httpd_configuration_i.e
Jocelyn Fiat d4ec640ac8 Renamed many classes and feature to use "secure" term instead of "ssl". (note, the .ecf are still using the "ssl" terminologie).
Provided easy way to set secure settings for Standalone.
For wsf launcher boolean option accept "true" or "yes" for True boolean, anything else is False.
2016-10-14 11:52:48 +02:00

349 lines
9.4 KiB
Plaintext

note
description: "Configuration for the standalone HTTPd server."
date: "$Date$"
revision: "$Revision$"
deferred class
HTTPD_CONFIGURATION_I
inherit
ANY
HTTPD_CONSTANTS
feature {NONE} -- Initialization
make
do
http_server_port := default_http_server_port
max_concurrent_connections := default_max_concurrent_connections
max_tcp_clients := default_max_tcp_clients
socket_timeout := default_socket_timeout
socket_recv_timeout := default_socket_recv_timeout
keep_alive_timeout := default_keep_alive_timeout
max_keep_alive_requests := default_max_keep_alive_requests
is_secure := False
create secure_certificate.make_empty
create secure_certificate_key.make_empty
end
feature -- Access
Server_details: STRING_8
-- Detail of the server.
deferred
end
http_server_name: detachable READABLE_STRING_8 assign set_http_server_name
http_server_port: INTEGER assign set_http_server_port
max_tcp_clients: INTEGER assign set_max_tcp_clients
-- Listen on socket for at most `queue' connections.
socket_timeout: INTEGER assign set_socket_timeout
-- Amount of seconds that the server waits for receipts and transmissions during communications.
-- note: with timeout of 0, socket can wait for ever.
-- By default: 60 seconds, which is appropriate for most situations.
socket_recv_timeout: INTEGER assign set_socket_recv_timeout
-- Amount of seconds that the server waits for receiving data during communications.
-- note: with timeout of 0, socket can wait for ever.
-- By default: 5 seconds.
max_concurrent_connections: INTEGER assign set_max_concurrent_connections
-- Max number of concurrent connections.
force_single_threaded: BOOLEAN assign set_force_single_threaded
do
Result := max_concurrent_connections = 0
end
is_verbose: BOOLEAN assign set_is_verbose
-- Display verbose message to the output?
verbose_level: INTEGER assign set_verbose_level
-- Verbosity of output.
keep_alive_timeout: INTEGER assign set_keep_alive_timeout
-- Persistent connection timeout.
-- Number of seconds the server waits after a request has been served before it closes the connection.
-- Timeout unit in Seconds.
-- By default: 5 seconds.
max_keep_alive_requests: INTEGER assign set_max_keep_alive_requests
-- Maximum number of requests allowed per persistent connection.
-- Recommended a high setting.
-- To disable KeepAlive, set `max_keep_alive_requests' to 0.
-- By default: 100 .
has_secure_support: BOOLEAN
-- Has SSL/TLS secure support?
deferred
end
request_settings: HTTPD_REQUEST_SETTINGS
do
Result.is_verbose := is_verbose
Result.verbose_level := verbose_level
Result.timeout := socket_timeout
Result.socket_recv_timeout := socket_recv_timeout
Result.keep_alive_timeout := keep_alive_timeout
Result.max_keep_alive_requests := max_keep_alive_requests
Result.is_secure := is_secure
end
feature -- Access: SSL
is_secure: BOOLEAN
-- Is SSL/TLS session?.
secure_certificate: detachable IMMUTABLE_STRING_32
-- the signed certificate.
secure_certificate_key: detachable IMMUTABLE_STRING_32
-- private key to the certificate authority.
secure_protocol: NATURAL
-- By default protocol is tls 1.2.
feature -- Element change
set_secure_settings (v: detachable separate TUPLE [protocol: separate READABLE_STRING_GENERAL; ca_crt, ca_key: detachable separate READABLE_STRING_GENERAL])
local
prot: STRING_32
do
is_secure := False
secure_certificate := Void
secure_certificate_key := Void
if v /= Void then
is_secure := True
create prot.make_from_separate (v.protocol)
set_secure_protocol_from_string (prot)
set_secure_certificate (v.ca_crt)
set_secure_certificate_key (v.ca_key)
end
end
set_http_server_name (v: detachable separate READABLE_STRING_8)
do
if v = Void then
unset_http_server_name
else
create {IMMUTABLE_STRING_8} http_server_name.make_from_separate (v)
end
end
unset_http_server_name
-- Unset `http_server_name' value.
do
http_server_name := Void
ensure
unset_http_server_name: http_server_name = Void
end
set_http_server_port (v: like http_server_port)
-- Set `http_server_port' with `v'.
do
http_server_port := v
ensure
http_server_port_set: http_server_port = v
end
set_max_tcp_clients (v: like max_tcp_clients)
-- Set `max_tcp_clients' with `v'.
do
max_tcp_clients := v
ensure
max_tcp_clients_set: max_tcp_clients = v
end
set_max_concurrent_connections (v: like max_concurrent_connections)
-- Set `max_concurrent_connections' with `v'.
do
max_concurrent_connections := v
ensure
max_concurrent_connections_set : max_concurrent_connections = v
end
set_socket_timeout (a_nb_seconds: like socket_timeout)
-- Set `socket_timeout' with `a_nb_seconds'
do
socket_timeout := a_nb_seconds
ensure
socket_timeout_set: socket_timeout = a_nb_seconds
end
set_socket_recv_timeout (a_nb_seconds: like socket_recv_timeout)
-- Set `socket_recv_timeout' with `a_nb_seconds'
do
socket_recv_timeout := a_nb_seconds
ensure
socket_recv_timeout_set: socket_recv_timeout = a_nb_seconds
end
set_keep_alive_timeout (a_seconds: like keep_alive_timeout)
-- Set `keep_alive_timeout' with `a_seconds'
do
keep_alive_timeout := a_seconds
ensure
keep_alive_timeout_set: keep_alive_timeout = a_seconds
end
set_max_keep_alive_requests (nb: like max_keep_alive_requests)
-- Set `max_keep_alive_requests' with `nb'
do
max_keep_alive_requests := nb
ensure
max_keep_alive_requests_set: max_keep_alive_requests = nb
end
set_force_single_threaded (v: like force_single_threaded)
-- Force server to handle incoming request in a single thread.
-- i.e set max_concurrent_connections to 0!
obsolete
"Use set_max_concurrent_connections (0) [June/2016]"
do
if v then
set_max_concurrent_connections (0)
end
--|Missing postcondition
--| force_single_thread_set: v implies max_concurrent_connections = 0
--| not_single_thread: not v implies max_concurrent_connections > 0
end
set_is_verbose (b: BOOLEAN)
-- Set `is_verbose' to `b'
do
is_verbose := b
ensure
is_verbose_set: is_verbose = b
end
set_verbose_level (lev: INTEGER)
-- Set `verbose_level' to `lev'.
do
verbose_level := lev
ensure
verbose_level_set: verbose_level = lev
end
set_is_secure (b: BOOLEAN)
-- Set `is_secure' to `b'.
do
if b and has_secure_support then
is_secure := True
if
http_server_port = 80
then
set_http_server_port (443)
end
else
is_secure := False
if
http_server_port = 443
then
set_http_server_port (80)
end
end
ensure
is_secure_set: has_secure_support implies is_secure
is_not_secure: not has_secure_support implies not is_secure
end
mark_secure
-- Set is_secure in True
do
set_is_secure (True)
ensure
is_secure_set: has_secure_support implies is_secure
-- http_server_port_set: has_secure_support implies http_server_port = 443
is_not_secure: not has_secure_support implies not is_secure
-- default_port: not has_secure_support implies http_server_port = 80
end
feature -- Element change
set_secure_certificate (a_value: detachable separate READABLE_STRING_GENERAL)
-- Set `secure_certificate' from `a_value'.
do
if a_value /= Void then
create secure_certificate.make_from_separate (a_value)
else
secure_certificate := Void
end
end
set_secure_certificate_key (a_value: detachable separate READABLE_STRING_GENERAL)
-- Set `secure_certificate_key' with `a_value'.
do
if a_value /= Void then
create secure_certificate_key.make_from_separate (a_value)
else
secure_certificate_key := Void
end
end
set_secure_protocol (a_version: NATURAL)
-- Set `secure_protocol' with `a_version'
do
secure_protocol := a_version
ensure
secure_protocol_set: secure_protocol = a_version
end
set_secure_protocol_from_string (a_ssl_version: READABLE_STRING_GENERAL)
-- Set `secure_protocol' with `a_ssl_version'
do
if a_ssl_version.is_case_insensitive_equal ("ssl_2_3") then
set_secure_protocol_to_ssl_2_or_3
elseif a_ssl_version.is_case_insensitive_equal ("tls_1_0") then
set_secure_protocol_to_tls_1_0
elseif a_ssl_version.is_case_insensitive_equal ("tls_1_1") then
set_secure_protocol_to_tls_1_1
elseif a_ssl_version.is_case_insensitive_equal ("tls_1_2") then
set_secure_protocol_to_tls_1_2
elseif a_ssl_version.is_case_insensitive_equal ("dtls_1_0") then
set_secure_protocol_to_dtls_1_0
else -- Default
set_secure_protocol_to_tls_1_2
end
end
feature -- SSL Helpers
set_secure_protocol_to_ssl_2_or_3
-- Set `secure_protocol' with `Ssl_23'.
deferred
end
set_secure_protocol_to_tls_1_0
-- Set `secure_protocol' with `Tls_1_0'.
deferred
end
set_secure_protocol_to_tls_1_1
-- Set `secure_protocol' with `Tls_1_1'.
deferred
end
set_secure_protocol_to_tls_1_2
-- Set `secure_protocol' with `Tls_1_2'.
deferred
end
set_secure_protocol_to_dtls_1_0
-- Set `secure_protocol' with `Dtls_1_0'.
deferred
end
note
copyright: "2011-2016, Jocelyn Fiat, Javier Velilla, 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