diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp index f273b9ea4..cb832fdd4 100644 --- a/src/qt/clientmodel.cpp +++ b/src/qt/clientmodel.cpp @@ -39,9 +39,18 @@ ClientModel::~ClientModel() unsubscribeFromCoreSignals(); } -int ClientModel::getNumConnections() const +int ClientModel::getNumConnections(unsigned int flags) const { - return vNodes.size(); + LOCK(cs_vNodes); + if (flags == CONNECTIONS_ALL) // Shortcut if we want total + return vNodes.size(); + + int nNum = 0; + BOOST_FOREACH(CNode* pnode, vNodes) + if (flags & (pnode->fInbound ? CONNECTIONS_IN : CONNECTIONS_OUT)) + nNum++; + + return nNum; } int ClientModel::getNumBlocks() const diff --git a/src/qt/clientmodel.h b/src/qt/clientmodel.h index ca735f14c..f29b695ea 100644 --- a/src/qt/clientmodel.h +++ b/src/qt/clientmodel.h @@ -25,6 +25,13 @@ enum BlockSource { BLOCK_SOURCE_NETWORK }; +enum NumConnections { + CONNECTIONS_NONE = 0, + CONNECTIONS_IN = (1U << 0), + CONNECTIONS_OUT = (1U << 1), + CONNECTIONS_ALL = (CONNECTIONS_IN | CONNECTIONS_OUT), +}; + /** Model for Bitcoin network client. */ class ClientModel : public QObject { @@ -36,7 +43,8 @@ public: OptionsModel *getOptionsModel(); - int getNumConnections() const; + //! Return number of connections, default is in- and outbound (total) + int getNumConnections(unsigned int flags = CONNECTIONS_ALL) const; int getNumBlocks() const; int getNumBlocksAtStartup(); diff --git a/src/qt/rpcconsole.cpp b/src/qt/rpcconsole.cpp index bd29efee8..cb5991adf 100644 --- a/src/qt/rpcconsole.cpp +++ b/src/qt/rpcconsole.cpp @@ -349,7 +349,14 @@ void RPCConsole::message(int category, const QString &message, bool html) void RPCConsole::setNumConnections(int count) { - ui->numberOfConnections->setText(QString::number(count)); + if (!clientModel) + return; + + QString connections = QString::number(count) + " ("; + connections += tr("In:") + " " + QString::number(clientModel->getNumConnections(CONNECTIONS_IN)) + " / "; + connections += tr("Out:") + " " + QString::number(clientModel->getNumConnections(CONNECTIONS_OUT)) + ")"; + + ui->numberOfConnections->setText(connections); } void RPCConsole::setNumBlocks(int count, int countOfPeers)