Implemented and fixed many issues
This commit is contained in:
@@ -34,6 +34,12 @@ static const uint32 WS_MAX_RECV_PAYLOAD = 65536u;
|
||||
/** Maximum WebSocket frame payload we will send (data frames can be large). */
|
||||
static const uint32 WS_MAX_SEND_PAYLOAD = 4u * 1024u * 1024u; /* 4 MiB */
|
||||
|
||||
/** Maximum entries in the Origin allowlist. */
|
||||
static const uint32 WS_MAX_ORIGINS = 8u;
|
||||
|
||||
/** Maximum length of one allowlisted Origin ("scheme://host[:port]"). */
|
||||
static const uint32 WS_MAX_ORIGIN_LEN = 128u;
|
||||
|
||||
/**
|
||||
* @brief Callback interface — implemented by StreamHub.
|
||||
*/
|
||||
@@ -77,6 +83,20 @@ public:
|
||||
*/
|
||||
bool Start(uint16 port, WSCommandCallback *cb);
|
||||
|
||||
/**
|
||||
* @brief Add an Origin that is accepted for the WebSocket upgrade.
|
||||
*
|
||||
* With an empty allowlist (the default) only same-origin requests pass:
|
||||
* the Origin's host must equal the Host header, which excludes the usual
|
||||
* deployment where the SPA is served by a separate web server on another
|
||||
* port. Add that server's origin (e.g. "http://localhost:8080") to allow
|
||||
* it. Requests without an Origin header (non-browser clients) always pass.
|
||||
*
|
||||
* @param origin "scheme://host[:port]", compared verbatim.
|
||||
* @return false if the allowlist is full or the string is too long.
|
||||
*/
|
||||
bool AddAllowedOrigin(const char *origin);
|
||||
|
||||
/**
|
||||
* @brief Stop accept thread; close all client connections; close listener.
|
||||
*/
|
||||
@@ -119,11 +139,15 @@ private:
|
||||
BasicTCPSocket tcpListener;
|
||||
WSClientSlot clients[WS_MAX_CLIENTS];
|
||||
uint32 numClients;
|
||||
mutable FastPollingMutexSem clientsMutex; ///< Protects numClients and clients[] array
|
||||
uint32 liveReadThreads; ///< Read threads not yet unwound; Stop() waits on it
|
||||
mutable FastPollingMutexSem clientsMutex; ///< Protects numClients, liveReadThreads and clients[] array
|
||||
|
||||
WSCommandCallback *callback;
|
||||
volatile bool running;
|
||||
|
||||
char allowedOrigins[WS_MAX_ORIGINS][WS_MAX_ORIGIN_LEN];
|
||||
uint32 numAllowedOrigins;
|
||||
|
||||
MARTe::ThreadIdentifier acceptTid;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user