------------------------------------------------------------------------------
-- Ada Web Server --
-- --
-- Copyright (C) 2000-2020, AdaCore --
-- --
-- This library is free software; you can redistribute it and/or modify --
-- it under terms of the GNU General Public License as published by the --
-- Free Software Foundation; either version 3, or (at your option) any --
-- later version. This library is distributed in the hope that it will be --
-- useful, but WITHOUT ANY WARRANTY; without even the implied warranty of --
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. --
-- --
-- As a special exception under Section 7 of GPL version 3, you are --
-- granted additional permissions described in the GCC Runtime Library --
-- Exception, version 3.1, as published by the Free Software Foundation. --
-- --
-- You should have received a copy of the GNU General Public License and --
-- a copy of the GCC Runtime Library Exception along with this program; --
-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
-- . --
-- --
-- As a special exception, if other files instantiate generics from this --
-- unit, or you link this unit with other files to produce an executable, --
-- this unit does not by itself cause the resulting executable to be --
-- covered by the GNU General Public License. This exception does not --
-- however invalidate any other reasons why the executable file might be --
-- covered by the GNU Public License. --
------------------------------------------------------------------------------
pragma Ada_2012;
-- This package provide an easy way to handle server configuration options.
--
-- If initialization of this package is not done all functions below will
-- return the default value as declared in AWS.Default.
with System;
with GNAT.Regexp;
private with Ada.Strings.Unbounded;
private with AWS.Containers.String_Vectors;
private with AWS.Default;
package AWS.Config is
type Object is private;
Default_Config : constant Object;
-- For the external configuration to be loaded either Get_Current or
-- Load_Config must be called explicitely.
function Get_Current return Object;
-- Returns a configuration record. This is the properties as read in files
-- 'aws.ini' and 'progname.ini'. This configuration object holds only the
-- per-server options.
procedure Load_Config;
-- Load configuration and store it into an internal object. This can be
-- called when only some server-wide configuration are to be set from
-- .ini files for example.
------------------------
-- Per Server options --
------------------------
------------
-- Server --
------------
function Server_Name (O : Object) return String with Inline;
-- This is the name of the server as set by AWS.Server.Start
function Protocol_Family (O : Object) return String with Inline;
-- Server protocol family. Family_Inet for IPv4, Family_Inet6 for IPv6 and
-- Family_Unspec for unspecified protocol family.
function IPv6_Only (O : Object) return Boolean with Inline;
-- IPv6 server accepts only IPv6 connections
function Server_Host (O : Object) return String with Inline;
-- This is the server host. Can be used if the computer has a more than
-- one IP address. It is possible to have two servers at the same port
-- on the same machine, both being binded on different IP addresses.
function Server_Port (O : Object) return Natural with Inline;
-- This is the server port as set by the HTTP object declaration
function Hotplug_Port (O : Object) return Positive with Inline;
-- This is the hotplug communication port needed to register and
-- un-register an hotplug module.
function Session (O : Object) return Boolean with Inline;
-- Returns True if the server session is activated
function Case_Sensitive_Parameters (O : Object) return Boolean with Inline;
-- HTTP parameters are case sensitive
function Session_Name (O : Object) return String with Inline;
-- Name of the cookie session
function Session_Private_Name (O : Object) return String with Inline;
-- Name of the private cookie session
function Server_Priority (O : Object) return System.Any_Priority
with Inline;
-- Returns the priority used by the HTTP and WebSockets servers
function Server_Header (O : Object) return String with Inline;
-- Returns the Server header value
----------------
-- Connection --
----------------
function Max_Connection (O : Object) return Positive with Inline;
-- This is the max simultaneous connections as set by the HTTP object
-- declaration.
function Send_Buffer_Size (O : Object) return Natural with Inline;
-- This is the socket buffer size used for sending data. Increasing this
-- value will give better performances on slow or long distances
-- connections.
function TCP_No_Delay (O : Object) return Boolean with Inline;
-- Returns wether the TCP_NODELAY option is set for this server
function Free_Slots_Keep_Alive_Limit (O : Object) return Natural
with Inline;
-- The minimum number of free slots where keep-alive connections are still
-- enabled. After this limit no more keep-alive connection will be
-- accepted by the server. This parameter must be used for heavy-loaded
-- servers to make sure the server will never run out of slots. This limit
-- must be less than Max_Connection.
function Keep_Alive_Force_Limit (O : Object) return Positive with Inline;
-- Server could have more than Max_Connection keep-alive sockets. Keep
-- alive sockets are waiting for client input in the internal server socket
-- set. This parameter defines the maximum number of keep alive sockets
-- processed by the server with standard timeouts. If number of keep-alive
-- sockets becomes more than Keep_Alive_Force_Limit the server starts to
-- use shorter timeouts. If this parameter is not defined in the
-- configuration, the server uses Max_Connection * 2 as value.
function Keep_Alive_Close_Limit (O : Object) return Positive with Inline;
-- This parameter defines the limit of keep alive sockets in the internal
-- server socket set. If the number of sockets in socket set became more
-- than Keep_Alive_Close_Limit, most close to timeout socket would be
-- closed. If this parameter is not defined in the configuration,
-- the server uses Max_Connection * 4 as value.
function Accept_Queue_Size (O : Object) return Positive with Inline;
-- This is the size of the queue for the incoming requests. Higher this
-- value will be and less "connection refused" will be reported to the
-- client.
function Line_Stack_Size (O : Object) return Positive with Inline;
-- HTTP lines stack size
function Reuse_Address (O : Object) return Boolean with Inline;
-- Returns true if bind is allowed to reuse an address (not waiting for
-- the delay between two bind to the same port).
----------
-- Data --
----------
function WWW_Root (O : Object) return String with Inline;
-- This is the root directory name for the server. This variable is not
-- used internally by AWS. It is supposed to be used by the callback
-- procedures who want to retrieve physical objects (images, Web pages...).
-- The default value is the current working directory. The returned
-- directory ends with a directory separator.
function Upload_Directory (O : Object) return String with Inline;
-- This point to the directory where uploaded files will be stored. The
-- directory returned will end with a directory separator.
function Upload_Size_Limit (O : Object) return Positive with Inline;
-- Size limit for the client uploading data before calling the user's
-- callback or dispatcher handler. User can call
-- AWS.Status.Is_Body_Uploaded to check if client data is uploaded or not
-- because of this limit. User can still approve the uploading data above
-- this limit by using AWS.Server.Get_Message_Body.
function Directory_Browser_Page (O : Object) return String with Inline;
-- Filename for the directory browser template page
function Max_POST_Parameters (O : Object) return Positive with Inline;
-- Returns the maximum number of POST parameters handled. Past this limit
-- the exception Too_Many_Parameters is raised.
---------
-- Log --
---------
function Log_Activated (O : Object) return Boolean with Inline;
-- Whether the default log should be activated
function Log_File_Directory (O : Object) return String with Inline;
-- This point to the directory where log files will be written. The
-- directory returned will end with a directory separator.
function Log_Filename_Prefix (O : Object) return String with Inline;
-- This is the prefix to use for the log filename
function Log_Split_Mode (O : Object) return String with Inline;
-- This is split mode for the log file. Possible values are : Each_Run,
-- Daily, Monthly and None. Any other values will raise an exception.
function Log_Size_Limit (O : Object) return Natural with Inline;
generic
with procedure Field_Id (Id : String);
procedure Log_Extended_Fields_Generic_Iterate (O : Object);
-- Calls procedure Field_Id for each extended http log field identifier
function Log_Extended_Fields_Length (O : Object) return Natural with Inline;
-- Returns the number of extended http log fileds identifiers.
-- If returned value is zero then http log is not extended.
function Error_Log_Activated (O : Object) return Boolean with Inline;
-- Whether the error log should be activated
function Error_Log_Filename_Prefix (O : Object) return String with Inline;
-- This is the prefix to use for the log filename
function Error_Log_Split_Mode (O : Object) return String with Inline;
-- This is split mode for the log file. Possible values are : Each_Run,
-- Daily, Monthly and None. Any other values will raise an exception.
------------
-- Status --
------------
function Admin_Password (O : Object) return String with Inline;
-- The admin password
function Admin_Realm (O : Object) return String with Inline;
-- The admin password
function Admin_URI (O : Object) return String with Inline;
-- This is the name of the admin server page as set by AWS.Server.Start.
-- It is also known as the status page.
function Status_Page (O : Object) return String with Inline;
-- Filename for the status template page
function Up_Image (O : Object) return String with Inline;
-- Filename for the up arrow image used in the status page
function Down_Image (O : Object) return String with Inline;
-- Filename for the down arrow image used in the status page
function Logo_Image (O : Object) return String with Inline;
-- Filename for the AWS logo image used in the status page
--------------
-- Timeouts --
--------------
function Cleaner_Wait_For_Client_Timeout (O : Object) return Duration
with Inline;
-- Number of seconds to timout on waiting for a client request.
-- This is a timeout for regular cleaning task.
function Cleaner_Client_Header_Timeout (O : Object) return Duration
with Inline;
-- Number of seconds to timout on waiting for client header.
-- This is a timeout for regular cleaning task.
function Cleaner_Client_Data_Timeout (O : Object) return Duration
with Inline;
-- Number of seconds to timout on waiting for client message body.
-- This is a timeout for regular cleaning task.
function Cleaner_Server_Response_Timeout (O : Object) return Duration
with Inline;
-- Number of seconds to timout on waiting for client to accept answer.
-- This is a timeout for regular cleaning task.
function Force_Wait_For_Client_Timeout (O : Object) return Duration
with Inline;
-- Number of seconds to timout on waiting for a client request.
-- This is a timeout for urgent request when resources are missing.
function Force_Client_Header_Timeout (O : Object) return Duration
with Inline;
-- Number of seconds to timout on waiting for client header.
-- This is a timeout for urgent request when resources are missing.
function Force_Client_Data_Timeout (O : Object) return Duration with Inline;
-- Number of seconds to timout on waiting for client message body.
-- This is a timeout for urgent request when resources are missing.
function Force_Server_Response_Timeout (O : Object) return Duration
with Inline;
-- Number of seconds to timout on waiting for client to accept answer.
-- This is a timeout for urgent request when resources are missing.
function Send_Timeout (O : Object) return Duration with Inline;
-- Number of seconds to timeout when sending chunck of data
function Receive_Timeout (O : Object) return Duration with Inline;
-- Number of seconds to timeout when receiving chunck of data
--------------
-- Security --
--------------
function Check_URL_Validity (O : Object) return Boolean with Inline;
-- Server have to check URI for validity. For example it checks that an
-- URL does not reference a resource above the Web root.
function Security (O : Object) return Boolean with Inline;
-- Is the server working through th SSL
function Certificate (O : Object) return String with Inline;
-- Returns the certificate to be used with the secure server. Returns the
-- empty string if the server is not a secure one.
function Key (O : Object) return String with Inline;
-- Returns the key to be used with the secure server. Returns the
-- empty string if the server is not a secure one.
function Security_Mode (O : Object) return String with Inline;
-- Returns the security mode to be used with the secure server. Returns the
-- empty string if the server is not a secure one.
function Cipher_Priorities (O : Object) return String with Inline;
-- Returns the cipher priorities for the security communication
function TLS_Ticket_Support (O : Object) return Boolean with Inline;
-- Is security communication side has support stateless TLS session
-- resumption. See RFC 5077.
function Exchange_Certificate (O : Object) return Boolean with Inline;
-- Returns True if the client is requested to send its certificate to the
-- server.
function Certificate_Required (O : Object) return Boolean with Inline;
-- Returns True if the server must abort the connection if the
-- client did not provide trusted certificate. If this option is set
-- the Exchange_Certificate must also be set.
function Trusted_CA (O : Object) return String with Inline;
-- Returns the filename containing a list of trusted CA, this is to be used
-- with the Exchange_Certificate option. The filename is on bundle of CAs
-- that can be trusted. A client certificate signed with one of those CA
-- will be accetped by the server.
function CRL_File (O : Object) return String with Inline;
-- Returns the filename containing the Certificate Revocation List. This
-- list is used by the server to check for revoked certificate.
function SSL_Session_Cache_Size (O : Object) return Natural with Inline;
-- Returns SSL session cashe size
-------------------------
-- Per Process options --
-------------------------
function Session_Cleanup_Interval return Duration with Inline;
-- Number of seconds between each run of the cleaner task to remove
-- obsolete session data.
function Session_Lifetime return Duration with Inline;
-- Number of seconds to keep a session if not used. After this period the
-- session data is obsoleted and will be removed during next cleanup.
function Session_Id_Length return Positive with Inline;
-- Returns the length (number of characters) of the session id
function Session_Cleaner_Priority return System.Any_Priority with Inline;
-- Returns the priority used by the session cleaner task
function Service_Priority return System.Any_Priority with Inline;
-- Returns the priority used by the others services (SMTP server, Jabber
-- server, Push server...).
function Config_Directory return String with Inline;
-- Directory where AWS parameter files are located
function Disable_Program_Ini return Boolean with Inline;
-- Whether the .ini file should be read
function Transient_Cleanup_Interval return Duration with Inline;
-- Number of seconds between each run of the cleaner task to remove
-- transient pages.
function Transient_Lifetime return Duration with Inline;
-- Number of seconds to keep a transient page. After this period the
-- transient page is obsoleted and will be removed during next cleanup.
function Max_Concurrent_Download return Positive with Inline;
-- Number of maximum concurrent download supported by the download manager
-- service.
function MIME_Types return String with Inline;
-- Returns the file name of the MIME types to use
function Input_Line_Size_Limit return Positive with Inline;
-- Limit of the HTTP protocol text lines length
function Context_Lifetime return Duration with Inline;
-- Number of seconds to keep a context if not used. After this period the
-- context data is obsoleted and will be removed during next cleanup.
function Max_WebSocket_Handler return Positive with Inline;
-- This is the max simultaneous connections handling WebSocket's messages
function WebSocket_Message_Queue_Size return Positive with Inline;
-- This is the size of the queue containing incoming messages
function WebSocket_Send_Message_Queue_Size return Positive with Inline;
-- This is the size of the queue containing messages to send
function Max_WebSocket return Positive with Inline;
-- The maximum number of simultaneous WebSocket opened. Note that that
-- there could be more WebSocket registered when counting the closing
-- WebSockets.
function WebSocket_Timeout return Duration with Inline;
-- Returns the WebSocket activity timeout. After this number of seconds
-- without any activity the WebSocket can be closed when needed.
function Is_WebSocket_Origin_Set return Boolean with Inline;
-- Returns True if the Origin has been set
function WebSocket_Origin return GNAT.Regexp.Regexp;
-- This is regular expression to restrict WebSocket to a specific origin
function WebSocket_Origin return String;
-- This is the string regular expression to restrict WebSocket to a
-- specific origin.
function WebSocket_Priority return System.Any_Priority;
-- Set the priority used by the WebSocket service
function User_Agent return String with Inline;
-- Returns the User_Agent header value
private
use Ada.Strings.Unbounded;
package SV renames AWS.Containers.String_Vectors;
-- List of token (keyword) recognized by the parser. There must be one
-- entry for every option name to be handled.
type Parameter_Name is
-- Per server option
(Server_Name,
WWW_Root,
Admin_URI,
Admin_Password,
Admin_Realm,
Protocol_Family,
IPv6_Only,
Server_Host,
Server_Port,
Server_Priority,
Server_Header,
Security,
Certificate,
Key,
Security_Mode,
Cipher_Priorities,
TLS_Ticket_Support,
Exchange_Certificate,
Certificate_Required,
Trusted_CA,
CRL_File,
SSL_Session_Cache_Size,
Hotplug_Port,
Max_Connection,
Send_Buffer_Size,
TCP_No_Delay,
Free_Slots_Keep_Alive_Limit,
Keep_Alive_Force_Limit,
Keep_Alive_Close_Limit,
Accept_Queue_Size,
Log_File_Directory,
Log_Filename_Prefix,
Log_Extended_Fields,
Log_Split_Mode,
Log_Size_Limit,
Log_Activated,
Error_Log_Filename_Prefix,
Error_Log_Split_Mode,
Error_Log_Activated,
Upload_Directory,
Upload_Size_Limit,
Session,
Session_Name,
Session_Private_Name,
Cleaner_Wait_For_Client_Timeout,
Cleaner_Client_Header_Timeout,
Cleaner_Client_Data_Timeout,
Cleaner_Server_Response_Timeout,
Force_Wait_For_Client_Timeout,
Force_Client_Header_Timeout,
Force_Client_Data_Timeout,
Force_Server_Response_Timeout,
Send_Timeout,
Receive_Timeout,
Status_Page,
Directory_Browser_Page,
Up_Image,
Down_Image,
Logo_Image,
Line_Stack_Size,
Reuse_Address,
Check_URL_Validity,
Case_Sensitive_Parameters,
Max_POST_Parameters,
-- Per process options
Session_Cleanup_Interval,
Session_Lifetime,
Session_Id_Length,
Session_Cleaner_Priority,
Service_Priority,
Config_Directory,
Disable_Program_Ini,
User_Agent,
Transient_Cleanup_Interval,
Transient_Lifetime,
Input_Line_Size_Limit,
Max_Concurrent_Download,
Max_WebSocket_Handler,
MIME_Types,
WebSocket_Message_Queue_Size,
WebSocket_Send_Message_Queue_Size,
WebSocket_Origin,
WebSocket_Priority,
Max_WebSocket,
WebSocket_Timeout,
Context_Lifetime);
subtype Server_Parameter_Name is Parameter_Name
range Server_Name .. Max_POST_Parameters;
subtype Process_Parameter_Name is Parameter_Name
range Session_Cleanup_Interval .. Context_Lifetime;
type Value_Type is (Str, Dir, Nat, Pos, Dur, Bool, Str_Vect, Regexp);
type Values (Kind : Value_Type := Str) is record
case Kind is
when Str =>
Str_Value : Unbounded_String;
when Dir =>
Dir_Value : Unbounded_String;
when Pos =>
Pos_Value : Positive;
when Nat =>
Nat_Value : Natural;
when Dur =>
Dur_Value : Duration;
when Bool =>
Bool_Value : Boolean;
when Str_Vect =>
Strs_Value : SV.Vector;
when Regexp =>
Is_Set : Boolean;
Pattern : GNAT.Regexp.Regexp;
Regexp_Str : Unbounded_String;
end case;
end record;
type Parameter_Set is array (Parameter_Name range <>) of Values;
function "+"
(Str : String) return Unbounded_String renames To_Unbounded_String;
Default_Parameters : constant Parameter_Set (Server_Parameter_Name) :=
(Cleaner_Wait_For_Client_Timeout =>
(Dur, Default.Cleaner_Wait_For_Client_Timeout),
Cleaner_Client_Header_Timeout =>
(Dur, Default.Cleaner_Client_Header_Timeout),
Cleaner_Client_Data_Timeout =>
(Dur, Default.Cleaner_Client_Data_Timeout),
Cleaner_Server_Response_Timeout =>
(Dur, Default.Cleaner_Server_Response_Timeout),
Force_Wait_For_Client_Timeout =>
(Dur, Default.Force_Wait_For_Client_Timeout),
Force_Client_Header_Timeout =>
(Dur, Default.Force_Client_Header_Timeout),
Force_Client_Data_Timeout =>
(Dur, Default.Force_Client_Data_Timeout),
Force_Server_Response_Timeout =>
(Dur, Default.Force_Server_Response_Timeout),
Send_Timeout =>
(Dur, Default.Send_Timeout),
Receive_Timeout =>
(Dur, Default.Receive_Timeout),
Status_Page =>
(Str, +Default.Status_Page),
Directory_Browser_Page =>
(Str, +Default.Directory_Browser_Page),
Up_Image =>
(Str, +Default.Up_Image),
Down_Image =>
(Str, +Default.Down_Image),
Logo_Image =>
(Str, +Default.Logo_Image),
Admin_Password =>
(Str, +Default.Admin_Password),
Admin_Realm =>
(Str, +Default.Admin_Realm),
Admin_URI =>
(Str, +Default.Admin_URI),
Server_Name =>
(Str, +Default.Server_Name),
WWW_Root =>
(Dir, +Default.WWW_Root),
Log_File_Directory =>
(Dir, +Default.Log_File_Directory),
Log_Filename_Prefix =>
(Str, +Default.Log_Filename_Prefix),
Log_Extended_Fields =>
(Str_Vect, SV.Empty_Vector),
Log_Split_Mode =>
(Str, +Default.Log_Split_Mode),
Log_Size_Limit =>
(Nat, Default.Log_Size_Limit),
Log_Activated =>
(Bool, Default.Log_Activated),
Error_Log_Filename_Prefix =>
(Str, +Default.Error_Log_Filename_Prefix),
Error_Log_Split_Mode =>
(Str, +Default.Error_Log_Split_Mode),
Error_Log_Activated =>
(Bool, Default.Error_Log_Activated),
Upload_Directory =>
(Dir, +Default.Upload_Directory),
Upload_Size_Limit =>
(Pos, Default.Upload_Size_Limit),
Max_Connection =>
(Pos, Default.Max_Connection),
Send_Buffer_Size =>
(Nat, Default.Send_Buffer_Size),
TCP_No_Delay =>
(Bool, Default.TCP_No_Delay),
Free_Slots_Keep_Alive_Limit =>
(Nat, Default.Free_Slots_Keep_Alive_Limit),
Keep_Alive_Force_Limit =>
(Nat, Default.Keep_Alive_Force_Limit),
Keep_Alive_Close_Limit =>
(Nat, Default.Keep_Alive_Close_Limit),
Accept_Queue_Size =>
(Pos, Default.Accept_Queue_Size),
Protocol_Family =>
(Str, +Default.Protocol_Family),
IPv6_Only =>
(Bool, Default.IPv6_Only),
Server_Host =>
(Str, Null_Unbounded_String),
Server_Port =>
(Nat, Default.Server_Port),
Server_Priority =>
(Nat, Default.Server_Priority),
Server_Header =>
(Str, +Default.Server_Header),
Hotplug_Port =>
(Pos, Default.Hotplug_Port),
Session =>
(Bool, Default.Session),
Session_Name =>
(Str, +Default.Session_Name),
Session_Private_Name =>
(Str, +Default.Session_Private_Name),
Security =>
(Bool, Default.Security),
Certificate =>
(Str, +Default.Certificate),
Key =>
(Str, +Default.Key),
Security_Mode =>
(Str, +Default.Security_Mode),
Cipher_Priorities =>
(Str, +Default.Cipher_Priorities),
TLS_Ticket_Support =>
(Bool, Default.TLS_Ticket_Support),
Exchange_Certificate =>
(Bool, Default.Exchange_Certificate),
Certificate_Required =>
(Bool, Default.Certificate_Required),
Trusted_CA =>
(Str, +Default.Trusted_CA),
CRL_File =>
(Str, +Default.CRL_File),
SSL_Session_Cache_Size =>
(Nat, Default.SSL_Session_Cache_Size),
Case_Sensitive_Parameters =>
(Bool, Default.Case_Sensitive_Parameters),
Check_URL_Validity =>
(Bool, Default.Check_URL_Validity),
Line_Stack_Size =>
(Pos, Default.Line_Stack_Size),
Reuse_Address =>
(Bool, Default.Reuse_Address),
Max_POST_Parameters =>
(Pos, Default.Max_POST_Parameters));
type Object is record
P : Parameter_Set (Server_Parameter_Name) := Default_Parameters;
end record;
Default_Config : constant Object := (P => Default_Parameters);
Process_Options : Parameter_Set (Process_Parameter_Name) :=
(Session_Cleanup_Interval =>
(Dur, Default.Session_Cleanup_Interval),
Session_Lifetime =>
(Dur, Default.Session_Lifetime),
Session_Id_Length =>
(Pos, Default.Session_Id_Length),
Session_Cleaner_Priority =>
(Nat, Default.Session_Cleaner_Priority),
Service_Priority =>
(Nat, Default.Service_Priority),
Config_Directory =>
(Str, +Default.Config_Directory),
Disable_Program_Ini =>
(Bool, Default.Disable_Program_Ini),
User_Agent =>
(Str, +Default.User_Agent),
Transient_Cleanup_Interval =>
(Dur, Default.Transient_Cleanup_Interval),
Transient_Lifetime =>
(Dur, Default.Transient_Lifetime),
Input_Line_Size_Limit =>
(Pos, Default.Input_Line_Size_Limit),
Max_Concurrent_Download =>
(Pos, Default.Max_Concurrent_Download),
Max_WebSocket =>
(Pos, Default.Max_WebSocket),
Max_WebSocket_Handler =>
(Pos, Default.Max_WebSocket_Handler),
MIME_Types =>
(Str, +Default.MIME_Types),
WebSocket_Message_Queue_Size =>
(Pos, Default.WebSocket_Message_Queue_Size),
WebSocket_Send_Message_Queue_Size =>
(Pos, Default.WebSocket_Send_Message_Queue_Size),
WebSocket_Origin =>
(Regexp, False, Pattern => <>,
Regexp_Str => Null_Unbounded_String),
WebSocket_Priority =>
(Nat, Default.WebSocket_Priority),
WebSocket_Timeout =>
(Dur, Default.WebSocket_Timeout),
Context_Lifetime =>
(Dur, Default.Context_Lifetime));
end AWS.Config;