4#include "HttpConnection.h"
12template <
typename Base,
typename Derived>
15 static constexpr bool value = __is_base_of(Base, Derived);
21template <
int ReadQueue,
int WriteQueue,
int HeaderBytes,
int StreamBytes>
23 :
public HttpStaticConnection<ReadQueue, WriteQueue, HeaderBytes, StreamBytes, 8, HttpConnection>
46 return initInternal({clients.data(), clients.sizeInElements(),
sizeof(T)});
53 return resizeInternal({clients.data(), clients.sizeInElements(),
sizeof(T)});
72 [[nodiscard]]
bool isStarted()
const {
return state == State::Started; }
106 State state = State::Stopped;
108 bool defaultKeepAlive =
true;
109 uint32_t maxRequestsPerConnection = 0;
111 void onNewClient(AsyncSocketAccept::Result& result);
112 void closeAsync(HttpConnection& requestClient);
113 void deactivateConnection(HttpConnection& requestClient);
114 void onStreamReceive(HttpConnection& client, AsyncBufferView::ID bufferID);
115 void onRequestBodyData(HttpConnection& client, AsyncBufferView::ID bufferID);
117 Result waitForStopToFinish();
118 Result initInternal(SpanWithStride<HttpConnection> connections);
119 Result resizeInternal(SpanWithStride<HttpConnection> connections);
121 AsyncEventLoop* eventLoop =
nullptr;
122 SocketDescriptor serverSocket;
123 AsyncSocketAccept asyncServerAccept;
125 struct EventDataListener;
126 struct EventBodyDataListener;
127 struct EventEndListener;
unsigned short uint16_t
Platform independent (2) bytes unsigned int.
Definition PrimitiveTypes.h:28
struct SC_FOUNDATION_EXPORT Function
Wraps function pointers, member functions and lambdas without ever allocating.
Definition Function.h:19
unsigned int uint32_t
Platform independent (4) bytes unsigned int.
Definition PrimitiveTypes.h:29
Asynchronous I/O (files, sockets, timers, processes, fs events, threads wake-up) (see Async) AsyncEve...
Definition Async.h:1394
Adds compile-time configurable read and write queues to HttpConnection.
Definition HttpAsyncServer.h:24
Async Http Server.
Definition HttpAsyncServer.h:40
Result start(AsyncEventLoop &loop, StringSpan address, uint16_t port)
Starts the http server on the given AsyncEventLoop, address and port.
uint32_t getMaxRequestsPerConnection() const
Get the maximum requests per connection.
Definition HttpAsyncServer.h:92
Result stop()
Stops http server asynchronously pushing cancel and close requests to the event loop.
Result init(Span< T > clients)
Initializes the async server with all needed memory buffers.
Definition HttpAsyncServer.h:44
bool getDefaultKeepAlive() const
Get the default keep-alive setting.
Definition HttpAsyncServer.h:85
void setDefaultKeepAlive(bool enabled)
Set default keep-alive behavior for all connections.
Definition HttpAsyncServer.h:82
Function< void(HttpConnection &)> onRequest
Called after enough data from a newly connected client has arrived, causing all headers to be parsed.
Definition HttpAsyncServer.h:77
void setMaxRequestsPerConnection(uint32_t maxRequests)
Set maximum requests per keep-alive connection.
Definition HttpAsyncServer.h:89
bool isStarted() const
Returns true if the server has been started.
Definition HttpAsyncServer.h:72
Result close()
Closes the server, removing references to the memory buffers passed during init.
Http connection abstraction holding both the incoming and outgoing messages in an HTTP transaction.
Definition HttpConnection.h:410
A pool of HttpConnection that can be active or inactive.
Definition HttpConnection.h:493
Adds compile-time configurable read and write queues to any class subclassing HttpConnectionBase.
Definition HttpConnection.h:558
An ascii string used as boolean result. SC_TRY macro forwards errors to caller.
Definition Result.h:13
View over a contiguous sequence of items (pointer + size in elements).
Definition Span.h:29
An read-only view over a string (to avoid including Strings library when parsing is not needed).
Definition StringSpan.h:37
EnableIf conditionally defines a type if a boolean template parameter is true.
Definition TypeTraits.h:25
IsBaseOf evaluates to true if the type Base is a base class of Derived, false otherwise.
Definition HttpAsyncServer.h:14