UI: Connections: Show block reason in tool-tip.

This commit is contained in:
Nodir Temirkhodjaev 2021-02-21 14:05:28 +05:00
parent 47488c0a55
commit dd415e57bf
8 changed files with 51 additions and 8 deletions

View File

@ -47,3 +47,21 @@ void LogEntryBlockedIp::setRemoteIp(quint32 ip)
{ {
m_remoteIp = ip; m_remoteIp = ip;
} }
QString LogEntryBlockedIp::reasonToString(quint8 blockReason)
{
switch (blockReason) {
case ReasonIpInet:
return QObject::tr("Not allowed Internet address");
case ReasonReauth:
return QObject::tr("Old connection closed on startup");
case ReasonProgram:
return QObject::tr("Programs logic");
case ReasonAppGroupFound:
return QObject::tr("App. Group logic");
case ReasonAppGroupDefault:
return QObject::tr("App. Group default logic");
default:
return QObject::tr("Unknown");
}
}

View File

@ -44,6 +44,8 @@ public:
quint32 remoteIp() const { return m_remoteIp; } quint32 remoteIp() const { return m_remoteIp; }
void setRemoteIp(quint32 ip); void setRemoteIp(quint32 ip);
static QString reasonToString(quint8 blockReason);
private: private:
bool m_inbound = false; bool m_inbound = false;
quint8 m_blockReason = 0; quint8 m_blockReason = 0;

View File

@ -79,7 +79,7 @@ int AppListModel::columnCount(const QModelIndex &parent) const
QVariant AppListModel::headerData(int section, Qt::Orientation orientation, int role) const QVariant AppListModel::headerData(int section, Qt::Orientation orientation, int role) const
{ {
if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { if (orientation == Qt::Horizontal && (role == Qt::DisplayRole || role == Qt::ToolTipRole)) {
switch (section) { switch (section) {
case 0: case 0:
return tr("Program"); return tr("Program");
@ -88,7 +88,7 @@ QVariant AppListModel::headerData(int section, Qt::Orientation orientation, int
case 2: case 2:
return tr("State"); return tr("State");
case 3: case 3:
return tr("Bl."); return (role == Qt::DisplayRole) ? tr("Bl.") : tr("Block scheduled");
case 4: case 4:
return tr("Creation Time"); return tr("Creation Time");
} }

View File

@ -46,7 +46,7 @@ int ConnListModel::columnCount(const QModelIndex &parent) const
QVariant ConnListModel::headerData(int section, Qt::Orientation orientation, int role) const QVariant ConnListModel::headerData(int section, Qt::Orientation orientation, int role) const
{ {
if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { if (orientation == Qt::Horizontal && (role == Qt::DisplayRole || role == Qt::ToolTipRole)) {
switch (section) { switch (section) {
case 0: case 0:
return tr("Program"); return tr("Program");
@ -59,7 +59,7 @@ QVariant ConnListModel::headerData(int section, Qt::Orientation orientation, int
case 4: case 4:
return tr("Remote IP and Port"); return tr("Remote IP and Port");
case 5: case 5:
return tr("Dir."); return (role == Qt::DisplayRole) ? tr("Dir.") : tr("Direction");
case 6: case 6:
return tr("Time"); return tr("Time");
} }
@ -97,8 +97,16 @@ QVariant ConnListModel::data(const QModelIndex &index, int role) const
return NetUtil::ip4ToText(connRow.localIp) + ':' + QString::number(connRow.localPort); return NetUtil::ip4ToText(connRow.localIp) + ':' + QString::number(connRow.localPort);
case 4: case 4:
return NetUtil::ip4ToText(connRow.remoteIp) + ':' + QString::number(connRow.remotePort); return NetUtil::ip4ToText(connRow.remoteIp) + ':' + QString::number(connRow.remotePort);
case 5: case 5: {
if (role == Qt::ToolTipRole) {
if (connRow.blocked) {
// Show block reason in tool-tip
const auto connBlock = getConnRowBlock(connRow.connId);
return LogEntryBlockedIp::reasonToString(connBlock.blockReason);
}
}
return connRow.inbound ? tr("In") : tr("Out"); return connRow.inbound ? tr("In") : tr("Out");
}
case 6: case 6:
return connRow.connTime; return connRow.connTime;
} }
@ -149,6 +157,14 @@ const ConnRow &ConnListModel::connRowAt(int row) const
return m_connRow; return m_connRow;
} }
ConnRowBlock ConnListModel::getConnRowBlock(qint64 connId) const
{
static const char *const sql = "SELECT block_reason FROM conn_block"
" WHERE conn_id = ?1";
return { quint8(sqliteDb()->executeEx(sql, { connId }).toInt()) };
}
void ConnListModel::clear() void ConnListModel::clear()
{ {
statManager()->deleteConns(); statManager()->deleteConns();

View File

@ -30,6 +30,11 @@ struct ConnRow : TableRow
QDateTime connTime; QDateTime connTime;
}; };
struct ConnRowBlock
{
quint8 blockReason = 0;
};
class ConnListModel : public TableSqlModel class ConnListModel : public TableSqlModel
{ {
Q_OBJECT Q_OBJECT
@ -55,6 +60,8 @@ public:
const ConnRow &connRowAt(int row) const; const ConnRow &connRowAt(int row) const;
ConnRowBlock getConnRowBlock(qint64 connId) const;
public slots: public slots:
void clear(); void clear();

View File

@ -41,7 +41,7 @@ int TrafListModel::columnCount(const QModelIndex &parent) const
QVariant TrafListModel::headerData(int section, Qt::Orientation orientation, int role) const QVariant TrafListModel::headerData(int section, Qt::Orientation orientation, int role) const
{ {
if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { if (orientation == Qt::Horizontal && (role == Qt::DisplayRole || role == Qt::ToolTipRole)) {
switch (section) { switch (section) {
case 0: case 0:
return tr("Date"); return tr("Date");

View File

@ -36,7 +36,7 @@ int ZoneListModel::columnCount(const QModelIndex &parent) const
QVariant ZoneListModel::headerData(int section, Qt::Orientation orientation, int role) const QVariant ZoneListModel::headerData(int section, Qt::Orientation orientation, int role) const
{ {
if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { if (orientation == Qt::Horizontal && (role == Qt::DisplayRole || role == Qt::ToolTipRole)) {
switch (section) { switch (section) {
case 0: case 0:
return tr("Zone"); return tr("Zone");

View File

@ -36,7 +36,7 @@ int TaskListModel::columnCount(const QModelIndex &parent) const
QVariant TaskListModel::headerData(int section, Qt::Orientation orientation, int role) const QVariant TaskListModel::headerData(int section, Qt::Orientation orientation, int role) const
{ {
if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { if (orientation == Qt::Horizontal && (role == Qt::DisplayRole || role == Qt::ToolTipRole)) {
switch (section) { switch (section) {
case 0: case 0:
return tr("Name"); return tr("Name");