Add method to change MHD_OPTION_PER_IP_CONNECTION_LIMIT

Adds new method setIpConnectionLimit() to server.
Default is 0 (infinite)
This commit is contained in:
Nikhil Tanwar 2022-02-05 18:31:42 +05:30
parent ce24b1fa5f
commit 261adf0ef9
4 changed files with 11 additions and 3 deletions

View File

@ -54,6 +54,7 @@ namespace kiwix
void setAddress(const std::string& addr) { m_addr = addr; } void setAddress(const std::string& addr) { m_addr = addr; }
void setPort(int port) { m_port = port; } void setPort(int port) { m_port = port; }
void setNbThreads(int threads) { m_nbThreads = threads; } void setNbThreads(int threads) { m_nbThreads = threads; }
void setIpConnectionLimit(int limit) { m_ipConnectionLimit = limit; }
void setVerbose(bool verbose) { m_verbose = verbose; } void setVerbose(bool verbose) { m_verbose = verbose; }
void setIndexTemplateString(const std::string& indexTemplateString) { m_indexTemplateString = indexTemplateString; } void setIndexTemplateString(const std::string& indexTemplateString) { m_indexTemplateString = indexTemplateString; }
void setTaskbar(bool withTaskbar, bool withLibraryButton) void setTaskbar(bool withTaskbar, bool withLibraryButton)
@ -75,6 +76,7 @@ namespace kiwix
bool m_withTaskbar = true; bool m_withTaskbar = true;
bool m_withLibraryButton = true; bool m_withLibraryButton = true;
bool m_blockExternalLinks = false; bool m_blockExternalLinks = false;
int m_ipConnectionLimit = 0;
std::unique_ptr<InternalServer> mp_server; std::unique_ptr<InternalServer> mp_server;
}; };
} }

View File

@ -49,7 +49,8 @@ bool Server::start() {
m_withTaskbar, m_withTaskbar,
m_withLibraryButton, m_withLibraryButton,
m_blockExternalLinks, m_blockExternalLinks,
m_indexTemplateString)); m_indexTemplateString,
m_ipConnectionLimit));
return mp_server->start(); return mp_server->start();
} }

View File

@ -120,7 +120,8 @@ InternalServer::InternalServer(Library* library,
bool withTaskbar, bool withTaskbar,
bool withLibraryButton, bool withLibraryButton,
bool blockExternalLinks, bool blockExternalLinks,
std::string indexTemplateString) : std::string indexTemplateString,
int ipConnectionLimit) :
m_addr(addr), m_addr(addr),
m_port(port), m_port(port),
m_root(normalizeRootUrl(root)), m_root(normalizeRootUrl(root)),
@ -130,6 +131,7 @@ InternalServer::InternalServer(Library* library,
m_withLibraryButton(withLibraryButton), m_withLibraryButton(withLibraryButton),
m_blockExternalLinks(blockExternalLinks), m_blockExternalLinks(blockExternalLinks),
m_indexTemplateString(indexTemplateString.empty() ? RESOURCE::templates::index_html : indexTemplateString), m_indexTemplateString(indexTemplateString.empty() ? RESOURCE::templates::index_html : indexTemplateString),
m_ipConnectionLimit(ipConnectionLimit),
mp_daemon(nullptr), mp_daemon(nullptr),
mp_library(library), mp_library(library),
mp_nameMapper(nameMapper ? nameMapper : &defaultNameMapper) mp_nameMapper(nameMapper ? nameMapper : &defaultNameMapper)
@ -168,6 +170,7 @@ bool InternalServer::start() {
this, this,
MHD_OPTION_SOCK_ADDR, &sockAddr, MHD_OPTION_SOCK_ADDR, &sockAddr,
MHD_OPTION_THREAD_POOL_SIZE, m_nbThreads, MHD_OPTION_THREAD_POOL_SIZE, m_nbThreads,
MHD_OPTION_PER_IP_CONNECTION_LIMIT, m_ipConnectionLimit,
MHD_OPTION_END); MHD_OPTION_END);
if (mp_daemon == nullptr) { if (mp_daemon == nullptr) {
std::cerr << "Unable to instantiate the HTTP daemon. The port " << m_port std::cerr << "Unable to instantiate the HTTP daemon. The port " << m_port

View File

@ -55,7 +55,8 @@ class InternalServer {
bool withTaskbar, bool withTaskbar,
bool withLibraryButton, bool withLibraryButton,
bool blockExternalLinks, bool blockExternalLinks,
std::string indexTemplateString); std::string indexTemplateString,
int ipConnectionLimit);
virtual ~InternalServer() = default; virtual ~InternalServer() = default;
MHD_Result handlerCallback(struct MHD_Connection* connection, MHD_Result handlerCallback(struct MHD_Connection* connection,
@ -108,6 +109,7 @@ class InternalServer {
bool m_withLibraryButton; bool m_withLibraryButton;
bool m_blockExternalLinks; bool m_blockExternalLinks;
std::string m_indexTemplateString; std::string m_indexTemplateString;
int m_ipConnectionLimit;
struct MHD_Daemon* mp_daemon; struct MHD_Daemon* mp_daemon;
Library* mp_library; Library* mp_library;