StartumServer: disconnect and ban inactive clients

pull/112/head
SChernykh 2 years ago
parent 8767ef9e19
commit 9f449320b5

@ -516,6 +516,8 @@ void StratumServer::on_blobs_ready()
size_t numClientsProcessed = 0;
uint32_t extra_nonce = 0;
const time_t cur_time = time(nullptr);
{
MutexLock lock2(m_clientsListLock);
@ -523,7 +525,12 @@ void StratumServer::on_blobs_ready()
++numClientsProcessed;
if (!client->m_rpcId) {
// Not logged in yet, on_login() will send the job to this client
// Not logged in yet, on_login() will send the job to this client. Also close inactive connections.
if (cur_time >= client->m_connectedTime + 10) {
LOGWARN(4, "client " << static_cast<char*>(client->m_addrString) << " didn't send login data");
client->ban(DEFAULT_BAN_TIME);
client->close();
}
continue;
}
@ -760,6 +767,7 @@ void StratumServer::on_after_share_found(uv_work_t* req, int /*status*/)
StratumServer::StratumClient::StratumClient()
: m_rpcId(0)
, m_connectedTime(0)
, m_jobs{}
, m_perConnectionJobId(0)
, m_customDiff{}
@ -776,12 +784,19 @@ void StratumServer::StratumClient::reset()
{
Client::reset();
m_rpcId = 0;
m_connectedTime = 0;
memset(m_jobs, 0, sizeof(m_jobs));
m_perConnectionJobId = 0;
m_customDiff = {};
m_customUser.clear();
}
bool StratumServer::StratumClient::on_connect()
{
m_connectedTime = time(nullptr);
return true;
}
bool StratumServer::StratumClient::on_read(char* data, uint32_t size)
{
if ((data != m_readBuf + m_numRead) || (data + size > m_readBuf + sizeof(m_readBuf))) {

@ -45,7 +45,7 @@ public:
static Client* allocate() { return new StratumClient(); }
void reset() override;
bool on_connect() override { return true; }
bool on_connect() override;
bool on_read(char* data, uint32_t size) override;
bool process_request(char* data, uint32_t size);
@ -53,6 +53,7 @@ public:
bool process_submit(rapidjson::Document& doc, uint32_t id);
uint32_t m_rpcId;
time_t m_connectedTime;
uv_mutex_t m_jobsLock;

Loading…
Cancel
Save