js8call/JS8_Mainwindow/processHeartbeatRateLimit.cpp

39 lines
1 KiB
C++
Raw Permalink Normal View History

/** @file
* @brief member function of the UI_Constructor class
* process HB ACK rate limiting
*/
#include "JS8_UI/mainwindow.h"
void UI_Constructor::processHeartbeatRateLimit(const QString &callsign) {
// Feature disabled in settings
if (!m_config.hb_rate_limit()) {
return;
}
constexpr int BLOCK_WINDOW_SECS = 55 * 60;
HBBlockingDB db(hbBlockingPath());
if (!db.open()) {
qCDebug(mainwindow_js8)
<< "HBBlockingDB failed to open:" << db.error();
return;
}
auto now = DriftingDateTime::currentDateTimeUtc();
auto last = db.getTimestamp(callsign);
if (last.isValid() && last.secsTo(now) < BLOCK_WINDOW_SECS) {
qCDebug(mainwindow_js8)
<< "HB rate-limit triggered for" << callsign
<< "- only" << last.secsTo(now) << "s since last HB";
m_config.addToHbBlacklist(callsign);
db.deleteTimestamp(callsign);
return;
}
// First contact or window expired — record/refresh the timestamp
db.upsertTimestamp(callsign, now);
}