X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcoreauthhandler.cpp;h=a05fa95b4f63f78530f61afba3ee9b63ad5f54f9;hp=6f454fa3c9635f7d6833d09e52776a4d977dfdd5;hb=9f91e0dd3c4eb5c2e2dedfc8d36a068d433d51b1;hpb=f77a0b720ed58a2b68876b9320742b81b6df871f diff --git a/src/core/coreauthhandler.cpp b/src/core/coreauthhandler.cpp index 6f454fa3..a05fa95b 100644 --- a/src/core/coreauthhandler.cpp +++ b/src/core/coreauthhandler.cpp @@ -171,18 +171,23 @@ void CoreAuthHandler::handle(const RegisterClient &msg) return; } + _peer->setFeatures(std::move(msg.features)); + _peer->setBuildDate(msg.buildDate); + _peer->setClientVersion(msg.clientVersion); + QVariantList backends; QVariantList authenticators; bool configured = Core::isConfigured(); if (!configured) { backends = Core::backendInfo(); - authenticators = Core::authenticatorInfo(); + if (_peer->hasFeature(Quassel::Feature::Authenticators)) { + authenticators = Core::authenticatorInfo(); + } } - // useSsl is only used for the legacy protocol - // XXX: FIXME: use client features here: we cannot pass authenticators if the client is too old! - _peer->dispatch(ClientRegistered(Quassel::features(), configured, backends, useSsl, authenticators)); + _peer->dispatch(ClientRegistered(Quassel::Features{}, configured, backends, authenticators, useSsl)); + // useSsl is only used for the legacy protocol if (_legacy && useSsl) startSsl(); @@ -232,6 +237,15 @@ void CoreAuthHandler::handle(const Login &msg) quInfo() << qPrintable(tr("Client %1 initialized and authenticated successfully as \"%2\" (UserId: %3).").arg(socket()->peerAddress().toString(), msg.user, QString::number(uid.toInt()))); + const auto &clientFeatures = _peer->features(); + auto unsupported = clientFeatures.toStringList(false); + if (!unsupported.isEmpty()) { + quInfo() << qPrintable(tr("Client does not support the following features: %1").arg(unsupported.join(", "))); + } + if (!clientFeatures.unknownFeatures().isEmpty()) { + quInfo() << qPrintable(tr("Client supports unknown features: %1").arg(clientFeatures.unknownFeatures().join(", "))); + } + disconnect(socket(), 0, this, 0); disconnect(_peer, 0, this, 0); _peer->setParent(0); // Core needs to take care of this one now!