maxLifetime impl. WIP, waiting for uSockets bump

This commit is contained in:
Alex Hultman
2022-12-27 15:17:07 +01:00
parent 27d93c8d0c
commit b647f20a6d
4 changed files with 19 additions and 2 deletions
+9 -2
View File
@@ -261,8 +261,14 @@ public:
std::terminate();
}
if (behavior.idleTimeout % 4) {
std::cerr << "Warning: idleTimeout should be a multiple of 4!" << std::endl;
/* Maximum idleTimeout is ≈17 minutes */
if (behavior.idleTimeout % 4 || behavior.idleTimeout >= 254 * 4) {
std::cerr << "Warning: idleTimeout should be a multiple of 4 and must be less than or equal to 1016 seconds!" << std::endl;
}
/* Maximum maxLifetime is ≈4 hours */
if (behavior.maxLifetime % 60 || behavior.maxLifetime > 254 * 60) {
std::cerr << "Warning: maxLifetime should be a multiple of 60 and must be less than or equal to 15240 seconds!" << std::endl;
}
/* If we don't have a TopicTree yet, create one now */
@@ -366,6 +372,7 @@ public:
webSocketContext->getExt()->closeOnBackpressureLimit = behavior.closeOnBackpressureLimit;
webSocketContext->getExt()->resetIdleTimeoutOnSend = behavior.resetIdleTimeoutOnSend;
webSocketContext->getExt()->sendPingsAutomatically = behavior.sendPingsAutomatically;
webSocketContext->getExt()->maxLifetime = behavior.maxLifetime;
webSocketContext->getExt()->compression = behavior.compression;
/* Calculate idleTimeoutCompnents */
+3
View File
@@ -332,6 +332,9 @@ public:
httpContextData->upgradedWebSocket = webSocket;
}
/* Arm maxLifetime timeout */
us_socket_long_timeout(SSL, (us_socket_t *) webSocket, webSocketContextData->maxLifetime);
/* Arm idleTimeout */
us_socket_timeout(SSL, (us_socket_t *) webSocket, webSocketContextData->idleTimeoutComponents.first);
+6
View File
@@ -371,6 +371,12 @@ private:
return s;
});
us_socket_context_on_long_timeout(SSL, getSocketContext(), [](auto *s) {
((WebSocket<SSL, isServer, USERDATA> *) s)->end();
return s;
});
/* Handle socket timeouts, simply close them so to not confuse client with FIN */
us_socket_context_on_timeout(SSL, getSocketContext(), [](auto *s) {
+1
View File
@@ -76,6 +76,7 @@ public:
bool closeOnBackpressureLimit;
bool resetIdleTimeoutOnSend;
bool sendPingsAutomatically;
unsigned short maxLifetime;
/* These are calculated on creation */
std::pair<unsigned short, unsigned short> idleTimeoutComponents;