4#ifndef _Stroika_Framework_WebServer_ConnectionManager_h_
5#define _Stroika_Framework_WebServer_ConnectionManager_h_ 1
7#include "Stroika/Frameworks/StroikaPreComp.h"
12#include "Stroika/Foundation/Common/Property.h"
13#include "Stroika/Foundation/Containers/Collection.h"
14#include "Stroika/Foundation/Containers/KeyedCollection.h"
15#include "Stroika/Foundation/Containers/Set.h"
19#include "Stroika/Foundation/IO/Network/HTTP/Headers.h"
20#include "Stroika/Foundation/IO/Network/Listener.h"
21#include "Stroika/Foundation/IO/Network/SocketAddress.h"
23#if qCompilerAndStdLib_function_dependency_too_complex_Buggy
27#include "Stroika/Frameworks/WebServer/CORS.h"
28#include "Stroika/Frameworks/WebServer/Connection.h"
29#include "Stroika/Frameworks/WebServer/Request.h"
30#include "Stroika/Frameworks/WebServer/Response.h"
31#include "Stroika/Frameworks/WebServer/Router.h"
202 static constexpr unsigned int kDefault_MaxConnections{25};
203 static constexpr Socket::BindFlags kDefault_BindFlags{};
205 static inline const CORSOptions kDefault_CORS{[] () {
return kDefault_CORSOptions; }()};
206 static constexpr bool kDefault_AutoComputeETagResponse{
true};
207 static constexpr Duration kDefault_AutomaticTCPDisconnectOnClose{2.0s};
208 static constexpr optional<int> kDefault_Linger{nullopt};
209 static constexpr bool kDefault_TCPNoDelay{
true};
211 static const Options kDefaultOptions;
216 ConnectionManager (
const SocketAddress& bindAddress,
const Sequence<Route>& routes,
const Options&
options = kDefaultOptions);
218 ConnectionManager (
const ConnectionManager&) =
delete;
219#if qStroika_Foundation_Debug_DefaultTracingOn
220 ~ConnectionManager ();
222 ~ConnectionManager () =
default;
226 nonvirtual ConnectionManager& operator= (
const ConnectionManager&) =
delete;
229#if qCompilerAndStdLib_lambdas_in_unevaluatedContext_warning_Buggy
232 struct StatsSocketID_ {
233 auto operator() (
const Connection::Stats& t)
const
241 decltype ([] (
const Connection::Stats& t) {
return t.fSocketID; })>;
317 size_t fThreadEntryCount{};
324 ThreadPool fThreadPool;
384 ConnectionStatistics fConnections;
401 nonvirtual
Statistics ComputeStatistics_ ()
const;
413 eAfterBeforeInterceptors,
415 using InterceptorAddRelativeTo::eAfterBeforeInterceptors;
416 using InterceptorAddRelativeTo::eAppend;
417 using InterceptorAddRelativeTo::ePrepend;
418 using InterceptorAddRelativeTo::ePrependsToEarly;
428 nonvirtual
void RemoveInterceptor (
const Interceptor& i);
433 nonvirtual
void AbortConnection (
const shared_ptr<Connection>& conn);
436 nonvirtual
void DeriveConnectionDefaultOptionsFromEffectiveOptions_ ();
442 nonvirtual
void WaitForReadyConnectionLoop_ ();
449 nonvirtual
void ReplaceInEarlyInterceptor_ (
const optional<Interceptor>& oldValue,
const optional<Interceptor>& newValue);
452 Options fEffectiveOptions_;
454#if qCompilerAndStdLib_function_dependency_too_complex_Buggy
456 shared_ptr<Connection::Options> fUseDefaultConnectionOptions_BWA_{Memory::MakeSharedPtr<Connection::Options> ()};
457 Connection::Options& fUseDefaultConnectionOptions_{*fUseDefaultConnectionOptions_BWA_};
459 Connection::Options fUseDefaultConnectionOptions_;
471 struct MyWaitForIOReady_Traits_ {
472 using HighLevelType = shared_ptr<Connection>;
473 static inline auto GetSDKPollable (
const HighLevelType& t)
475 return t->socket ().GetNativeSocket ();
502 IO::Network::Listener fListener_;
505 inline const ConnectionManager::Options ConnectionManager::kDefaultOptions;
514#include "ConnectionManager.inl"
String is like std::u32string, except it is much easier to use, often much more space efficient,...
A Collection<T> is a container to manage an un-ordered collection of items, without equality defined ...
a cross between Mapping<KEY, T> and Collection<T> and Set<T>
Set<T> is a container of T, where once an item is added, additionally adds () do nothing.
Wrap any object with Synchronized<> and it can be used similarly to the base type,...
Simple wrapper on WaitForIOReady (POSIX select/poll/etc API) - except it allows for the list if polle...
Duration is a chrono::duration<double> (=.
Iterable<T> is a base class for containers which easily produce an Iterator<T> to traverse them.
Common::ReadOnlyProperty< Statistics > statistics
Common::ReadOnlyProperty< ConnectionStatsCollection > connections
Common::ReadOnlyProperty< Traversal::Iterable< SocketAddress > > bindings
Return the socket addresses the webserver (connection manager) is listening on (to serve web content)...
Common::Property< Sequence< Interceptor > > earlyInterceptors
Common::Property< Sequence< Interceptor > > beforeInterceptors
Common::Property< optional< Interceptor > > defaultErrorHandler
Common::ReadOnlyProperty< const Options & > options
Common::Property< Sequence< Interceptor > > afterInterceptors
ConnectionManager::Options specify things like default headers, caching policies, binding flags (not ...
optional< String > fThreadPoolName
unsigned int fMaxConnections
optional< CORSOptions > fCORS
optional< Headers > fDefaultResponseHeaders
optional< bool > fAutoComputeETagResponse
sets the initial value for each Response. Harmless except for the slight performance cost (wont alway...
optional< Headers > fDefaultGETResponseHeaders
optional< Containers::Set< HTTP::ContentEncoding > > fSupportedCompressionEncodings
override the set of compression encodings the WebServer supports (default is all the Stroika implemen...
optional< unsigned int > fMaxConcurrentlyHandledConnections
optional< Duration > fAutomaticTCPDisconnectOnClose
Duration fConnectionPiningForTheFjordsDelay
optional< unsigned int > fTCPBacklog
optional< size_t > fAutomaticTransferChunkSize
controls whether to use Transfer-Coding: chunked or not
optional< Socket::BindFlags > fBindFlags
optional< bool > fTCPNoDelay
CommonStatistics< Duration > fDurationOfOpenConnections
CommonStatistics< Duration > fDurationOfOpenConnectionsRequests
size_t fNumberOfActiveConnections
CommonStatistics< Duration > fDurationOfActiveConnectionsRequests
size_t fNumberOfOpenConnections
nonvirtual Characters::String ToString() const
size_t fConnectionsPiningForTheFjords
nonvirtual Characters::String ToString() const