(snake) add an option to disable answering pongs as response to pings, to test cobra client behavior with hanged connections

This commit is contained in:
Benjamin Sergeant 2020-01-31 16:55:54 -08:00
parent 86f6fca703
commit c192c9ec96
6 changed files with 23 additions and 3 deletions

View File

@ -1,6 +1,10 @@
# Changelog # Changelog
All changes to this project will be documented in this file. All changes to this project will be documented in this file.
## [8.0.6] - 2020-01-31
(snake) add an option to disable answering pongs as response to pings, to test cobra client behavior with hanged connections
## [8.0.5] - 2020-01-31 ## [8.0.5] - 2020-01-31
(IXCobraConnection) set a ping timeout of 90 seconds. If no pong messages are received as responses to ping for a while, give up and close the connection (IXCobraConnection) set a ping timeout of 90 seconds. If no pong messages are received as responses to ping for a while, give up and close the connection

View File

@ -32,6 +32,7 @@ namespace snake
// Misc // Misc
bool verbose; bool verbose;
bool disablePong;
}; };
bool isAppKeyValid(const AppConfig& appConfig, std::string appkey); bool isAppKeyValid(const AppConfig& appConfig, std::string appkey);

View File

@ -21,6 +21,15 @@ namespace snake
, _server(appConfig.port, appConfig.hostname) , _server(appConfig.port, appConfig.hostname)
{ {
_server.setTLSOptions(appConfig.socketTLSOptions); _server.setTLSOptions(appConfig.socketTLSOptions);
if (appConfig.disablePong)
{
_server.disablePong();
}
std::stringstream ss;
ss << "Listening on " << appConfig.hostname << ":" << appConfig.port;
ix::IXCoreLogger::Log(ss.str().c_str());
} }
// //

View File

@ -99,6 +99,7 @@ int main(int argc, char** argv)
bool redirect = false; bool redirect = false;
bool version = false; bool version = false;
bool verifyNone = false; bool verifyNone = false;
bool disablePong = false;
int port = 8008; int port = 8008;
int redisPort = 6379; int redisPort = 6379;
int statsdPort = 8125; int statsdPort = 8125;
@ -309,6 +310,7 @@ int main(int argc, char** argv)
snakeApp->add_option("--apps_config_path", appsConfigPath, "Path to auth data") snakeApp->add_option("--apps_config_path", appsConfigPath, "Path to auth data")
->check(CLI::ExistingPath); ->check(CLI::ExistingPath);
snakeApp->add_flag("-v", verbose, "Verbose"); snakeApp->add_flag("-v", verbose, "Verbose");
snakeApp->add_flag("-d", disablePong, "Disable Pongs");
addTLSOptions(snakeApp); addTLSOptions(snakeApp);
CLI::App* httpServerApp = app.add_subcommand("httpd", "HTTP server"); CLI::App* httpServerApp = app.add_subcommand("httpd", "HTTP server");
@ -492,7 +494,8 @@ int main(int argc, char** argv)
redisPassword, redisPassword,
verbose, verbose,
appsConfigPath, appsConfigPath,
tlsOptions); tlsOptions,
disablePong);
} }
else if (app.got_subcommand("httpd")) else if (app.got_subcommand("httpd"))
{ {

View File

@ -142,7 +142,8 @@ namespace ix
const std::string& redisPassword, const std::string& redisPassword,
bool verbose, bool verbose,
const std::string& appsConfigPath, const std::string& appsConfigPath,
const ix::SocketTLSOptions& tlsOptions); const ix::SocketTLSOptions& tlsOptions,
bool disablePong);
int ws_httpd_main(int port, int ws_httpd_main(int port,
const std::string& hostname, const std::string& hostname,

View File

@ -44,7 +44,8 @@ namespace ix
const std::string& redisPassword, const std::string& redisPassword,
bool verbose, bool verbose,
const std::string& appsConfigPath, const std::string& appsConfigPath,
const SocketTLSOptions& socketTLSOptions) const SocketTLSOptions& socketTLSOptions,
bool disablePong)
{ {
snake::AppConfig appConfig; snake::AppConfig appConfig;
appConfig.port = port; appConfig.port = port;
@ -53,6 +54,7 @@ namespace ix
appConfig.redisPort = redisPort; appConfig.redisPort = redisPort;
appConfig.redisPassword = redisPassword; appConfig.redisPassword = redisPassword;
appConfig.socketTLSOptions = socketTLSOptions; appConfig.socketTLSOptions = socketTLSOptions;
appConfig.disablePong = disablePong;
// Parse config file // Parse config file
auto str = readAsString(appsConfigPath); auto str = readAsString(appsConfigPath);