_debugLogRawNetId = Quassel::optionValue("debug-irc-id").toInt();
_autoReconnectTimer.setSingleShot(true);
- connect(&_socketCloseTimer, &QTimer::timeout, this, &CoreNetwork::socketCloseTimeout);
+ connect(&_socketCloseTimer, &QTimer::timeout, this, &CoreNetwork::onSocketCloseTimeout);
setPingInterval(networkConfig()->pingInterval());
connect(&_pingTimer, &QTimer::timeout, this, &CoreNetwork::sendPing);
connect(&_autoWhoCycleTimer, &QTimer::timeout, this, &CoreNetwork::startAutoWhoCycle);
connect(&_tokenBucketTimer, &QTimer::timeout, this, &CoreNetwork::checkTokenBucket);
- connect(&socket, SIGNAL(connected()), this, SLOT(socketInitialized()));
- connect(&socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(socketError(QAbstractSocket::SocketError)));
- connect(&socket, &QAbstractSocket::stateChanged, this, &CoreNetwork::socketStateChanged);
- connect(&socket, &QIODevice::readyRead, this, &CoreNetwork::socketHasData);
+ connect(&socket, &QAbstractSocket::connected, this, &CoreNetwork::onSocketInitialized);
+ connect(&socket, selectOverload<QAbstractSocket::SocketError>(&QAbstractSocket::error), this, &CoreNetwork::onSocketError);
+ connect(&socket, &QAbstractSocket::stateChanged, this, &CoreNetwork::onSocketStateChanged);
+ connect(&socket, &QIODevice::readyRead, this, &CoreNetwork::onSocketHasData);
#ifdef HAVE_SSL
- connect(&socket, SIGNAL(encrypted()), this, SLOT(socketInitialized()));
- connect(&socket, SIGNAL(sslErrors(const QList<QSslError> &)), this, SLOT(sslErrors(const QList<QSslError> &)));
+ connect(&socket, &QSslSocket::encrypted, this, &CoreNetwork::onSocketInitialized);
+ connect(&socket, selectOverload<const QList<QSslError>&>(&QSslSocket::sslErrors), this, &CoreNetwork::onSslErrors);
#endif
connect(this, &CoreNetwork::newEvent, coreSession()->eventManager(), &EventManager::postEvent);
connect(this, &Network::capRemoved, this, &CoreNetwork::serverCapRemoved);
if (Quassel::isOptionSet("oidentd")) {
- connect(this, SIGNAL(socketInitialized(const CoreIdentity*, QHostAddress, quint16, QHostAddress, quint16, qint64)),
- Core::instance()->oidentdConfigGenerator(), SLOT(addSocket(const CoreIdentity*, QHostAddress, quint16, QHostAddress, quint16, qint64)), Qt::BlockingQueuedConnection);
- connect(this, SIGNAL(socketDisconnected(const CoreIdentity*, QHostAddress, quint16, QHostAddress, quint16, qint64)),
- Core::instance()->oidentdConfigGenerator(), SLOT(removeSocket(const CoreIdentity*, QHostAddress, quint16, QHostAddress, quint16, qint64)));
+ connect(this, &CoreNetwork::socketInitialized, Core::instance()->oidentdConfigGenerator(), &OidentdConfigGenerator::addSocket);
+ connect(this, &CoreNetwork::socketDisconnected, Core::instance()->oidentdConfigGenerator(), &OidentdConfigGenerator::removeSocket);
}
if (Quassel::isOptionSet("ident-daemon")) {
- connect(this, SIGNAL(socketInitialized(const CoreIdentity*, QHostAddress, quint16, QHostAddress, quint16, qint64)),
- Core::instance()->identServer(), SLOT(addSocket(const CoreIdentity*, QHostAddress, quint16, QHostAddress, quint16, qint64)), Qt::BlockingQueuedConnection);
- connect(this, SIGNAL(socketDisconnected(const CoreIdentity*, QHostAddress, quint16, QHostAddress, quint16, qint64)),
- Core::instance()->identServer(), SLOT(removeSocket(const CoreIdentity*, QHostAddress, quint16, QHostAddress, quint16, qint64)));
+ connect(this, &CoreNetwork::socketInitialized, Core::instance()->identServer(), &IdentServer::addSocket);
+ connect(this, &CoreNetwork::socketDisconnected, Core::instance()->identServer(), &IdentServer::removeSocket);
}
}
else if (_previousConnectionAttemptFailed) {
// cycle to next server if previous connection attempt failed
_previousConnectionAttemptFailed = false;
- displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("Connection failed. Cycling to next Server"));
+ showMessage(Message::Server, BufferInfo::StatusBuffer, "", tr("Connection failed. Cycling to next Server"));
if (++_lastUsedServerIndex >= serverList().size()) {
_lastUsedServerIndex = 0;
}
Server server = usedServer();
displayStatusMsg(tr("Connecting to %1:%2...").arg(server.host).arg(server.port));
- displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("Connecting to %1:%2...").arg(server.host).arg(server.port));
+ showMessage(Message::Server, BufferInfo::StatusBuffer, "", tr("Connecting to %1:%2...").arg(server.host).arg(server.port));
if (server.useProxy) {
QNetworkProxy proxy((QNetworkProxy::ProxyType)server.proxyType, server.proxyHost, server.proxyPort, server.proxyUser, server.proxyPass);
else
_quitReason = reason;
- displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("Disconnecting. (%1)").arg((!requested && !withReconnect) ? tr("Core Shutdown") : _quitReason));
+ showMessage(Message::Server, BufferInfo::StatusBuffer, "", tr("Disconnecting. (%1)").arg((!requested && !withReconnect) ? tr("Core Shutdown") : _quitReason));
if (socket.state() == QAbstractSocket::UnconnectedState) {
- socketDisconnected();
+ onSocketDisconnected();
}
else {
if (socket.state() == QAbstractSocket::ConnectedState) {
}
-void CoreNetwork::socketCloseTimeout()
+void CoreNetwork::onSocketCloseTimeout()
{
qWarning() << QString{"Timed out quitting network %1 (network ID: %2, user ID: %3)"}
.arg(networkName()).arg(networkId().toInt()).arg(userId().toInt());
}
-void CoreNetwork::userInput(BufferInfo buf, QString msg)
+void CoreNetwork::userInput(const BufferInfo &buf, QString msg)
{
userInputHandler()->handleUserInput(buf, msg);
}
-void CoreNetwork::putRawLine(const QByteArray s, const bool prepend)
+void CoreNetwork::putRawLine(const QByteArray &s, bool prepend)
{
- if (_tokenBucket > 0 || (_skipMessageRates && _msgQueue.size() == 0)) {
+ if (_tokenBucket > 0 || (_skipMessageRates && _msgQueue.isEmpty())) {
// If there's tokens remaining, ...
// Or rate limits don't apply AND no messages are in queue (to prevent out-of-order), ...
// Send the message now.
}
-void CoreNetwork::socketHasData()
+void CoreNetwork::onSocketHasData()
{
while (socket.canReadLine()) {
QByteArray s = socket.readLine();
}
-void CoreNetwork::socketError(QAbstractSocket::SocketError error)
+void CoreNetwork::onSocketError(QAbstractSocket::SocketError error)
{
// Ignore socket closed errors if expected
if (_disconnectExpected && error == QAbstractSocket::RemoteHostClosedError) {
_previousConnectionAttemptFailed = true;
qWarning() << qPrintable(tr("Could not connect to %1 (%2)").arg(networkName(), socket.errorString()));
emit connectionError(socket.errorString());
- displayMsg(Message::Error, BufferInfo::StatusBuffer, "", tr("Connection failure: %1").arg(socket.errorString()));
+ showMessage(Message::Error, BufferInfo::StatusBuffer, "", tr("Connection failure: %1").arg(socket.errorString()));
emitConnectionError(socket.errorString());
if (socket.state() < QAbstractSocket::ConnectedState) {
- socketDisconnected();
+ onSocketDisconnected();
}
}
-void CoreNetwork::socketInitialized()
+void CoreNetwork::onSocketInitialized()
{
CoreIdentity *identity = identityPtr();
if (!identity) {
// Request capabilities as per IRCv3.2 specifications
// Older servers should ignore this; newer servers won't downgrade to RFC1459
- displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("Requesting capability list..."));
+ showMessage(Message::Server, BufferInfo::StatusBuffer, "", tr("Requesting capability list..."));
putRawLine(serverEncode(QString("CAP LS 302")));
if (!server.password.isEmpty()) {
}
-void CoreNetwork::socketDisconnected()
+void CoreNetwork::onSocketDisconnected()
{
disablePingTimeout();
_msgQueue.clear();
IrcUser *me_ = me();
if (me_) {
foreach(QString channel, me_->channels())
- displayMsg(Message::Quit, BufferInfo::ChannelBuffer, channel, _quitReason, me_->hostmask());
+ showMessage(Message::Quit, BufferInfo::ChannelBuffer, channel, _quitReason, me_->hostmask());
}
setConnected(false);
}
-void CoreNetwork::socketStateChanged(QAbstractSocket::SocketState socketState)
+void CoreNetwork::onSocketStateChanged(QAbstractSocket::SocketState socketState)
{
Network::ConnectionState state;
switch (socketState) {
case QAbstractSocket::UnconnectedState:
state = Network::Disconnected;
- socketDisconnected();
+ onSocketDisconnected();
break;
case QAbstractSocket::HostLookupState:
case QAbstractSocket::ConnectingState:
if (_skipMessageRates) {
// If the message queue already contains messages, they need sent before disabling the
// timer. Set the timer to a rapid pace and let it disable itself.
- if (_msgQueue.size() > 0) {
+ if (!_msgQueue.isEmpty()) {
qDebug() << "Outgoing message queue contains messages while disabling rate "
"limiting. Sending remaining queued messages...";
// Promptly run the timer again to clear the messages. Rate limiting is disabled,
// EXTERNAL authentication supported, send request
putRawLine(serverEncode("AUTHENTICATE EXTERNAL"));
} else {
- displayMsg(Message::Error, BufferInfo::StatusBuffer, "",
- tr("SASL EXTERNAL authentication not supported"));
+ showMessage(Message::Error, BufferInfo::StatusBuffer, "", tr("SASL EXTERNAL authentication not supported"));
sendNextCap();
}
} else {
// Only working with PLAIN atm, blowfish later
putRawLine(serverEncode("AUTHENTICATE PLAIN"));
} else {
- displayMsg(Message::Error, BufferInfo::StatusBuffer, "",
- tr("SASL PLAIN authentication not supported"));
+ showMessage(Message::Error, BufferInfo::StatusBuffer, "", tr("SASL PLAIN authentication not supported"));
sendNextCap();
}
#ifdef HAVE_SSL
// Add most recently tried capability set to individual list, re-requesting them one at a time
_capsQueuedIndividual.append(_capsQueuedLastBundle);
// Warn of this issue to explain the slower login. Servers usually shouldn't trigger this.
- displayMsg(Message::Server, BufferInfo::StatusBuffer, "",
- tr("Could not negotiate some capabilities, retrying individually (%1)...")
- .arg(_capsQueuedLastBundle.join(", ")));
+ showMessage(Message::Server, BufferInfo::StatusBuffer, "",
+ tr("Could not negotiate some capabilities, retrying individually (%1)...")
+ .arg(_capsQueuedLastBundle.join(", ")));
// Capabilities are already removed from the capability bundle queue via takeQueuedCaps(), no
// need to remove them here.
// Clear the most recently tried set to reduce risk that mistakes elsewhere causes retrying
if (!capNegotiationInProgress()) {
// If the server doesn't have any capabilities, but supports CAP LS, continue on with the
// normal connection.
- displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("No capabilities available"));
+ showMessage(Message::Server, BufferInfo::StatusBuffer, "", tr("No capabilities available"));
endCapNegotiation();
return;
}
_capNegotiationActive = true;
- displayMsg(Message::Server, BufferInfo::StatusBuffer, "",
- tr("Ready to negotiate (found: %1)").arg(caps().join(", ")));
+ showMessage(Message::Server, BufferInfo::StatusBuffer, "", tr("Ready to negotiate (found: %1)").arg(caps().join(", ")));
// Build a list of queued capabilities, starting with individual, then bundled, only adding the
// comma separator between the two if needed (both individual and bundled caps exist).
_capsQueuedIndividual.join(", ")
+ ((!_capsQueuedIndividual.empty() && !_capsQueuedBundled.empty()) ? ", " : "")
+ _capsQueuedBundled.join(", ");
- displayMsg(Message::Server, BufferInfo::StatusBuffer, "",
- tr("Negotiating capabilities (requesting: %1)...").arg(queuedCapsDisplay));
+ showMessage(Message::Server, BufferInfo::StatusBuffer, "", tr("Negotiating capabilities (requesting: %1)...").arg(queuedCapsDisplay));
sendNextCap();
}
// No pending desired capabilities, capability negotiation finished
// If SASL requested but not available, print a warning
if (networkInfo().useSasl && !capEnabled(IrcCap::SASL))
- displayMsg(Message::Error, BufferInfo::StatusBuffer, "",
- tr("SASL authentication currently not supported by server"));
+ showMessage(Message::Error, BufferInfo::StatusBuffer, "", tr("SASL authentication currently not supported by server"));
if (_capNegotiationActive) {
- displayMsg(Message::Server, BufferInfo::StatusBuffer, "",
- tr("Capability negotiation finished (enabled: %1)").arg(capsEnabled().join(", ")));
+ showMessage(Message::Server, BufferInfo::StatusBuffer, "", tr("Capability negotiation finished (enabled: %1)").arg(capsEnabled().join(", ")));
_capNegotiationActive = false;
}
#ifdef HAVE_SSL
-void CoreNetwork::sslErrors(const QList<QSslError> &sslErrors)
+void CoreNetwork::onSslErrors(const QList<QSslError> &sslErrors)
{
Server server = usedServer();
if (server.sslVerify) {
// Add the error reason if known
sslErrorMessage.append(tr(" (Reason: %1)").arg(sslErrors.first().errorString()));
}
- displayMsg(Message::Error, BufferInfo::StatusBuffer, "", sslErrorMessage);
+ showMessage(Message::Error, BufferInfo::StatusBuffer, "", sslErrorMessage);
// Disconnect, triggering a reconnect in case it's a temporary issue with certificate
// validity, network trouble, etc.
// Add the error reason if known
sslErrorMessage.append(tr(" (Reason: %1)").arg(sslErrors.first().errorString()));
}
- displayMsg(Message::Info, BufferInfo::StatusBuffer, "", sslErrorMessage);
+ showMessage(Message::Info, BufferInfo::StatusBuffer, "", sslErrorMessage);
// Proceed with the connection
socket.ignoreSslErrors();
}
-QList<QList<QByteArray>> CoreNetwork::splitMessage(const QString &cmd, const QString &message, std::function<QList<QByteArray>(QString &)> cmdGenerator)
+QList<QList<QByteArray>> CoreNetwork::splitMessage(const QString &cmd, const QString &message, const std::function<QList<QByteArray>(QString &)> &cmdGenerator)
{
QString wrkMsg(message);
QList<QList<QByteArray>> msgsToSend;