}
+bool Network::saslMaybeSupports(const QString &saslMechanism) const
+{
+ if (!capAvailable(IrcCap::SASL)) {
+ // If SASL's not advertised at all, it's likely the mechanism isn't supported, as per specs.
+ // Unfortunately, we don't know for sure, but Quassel won't request SASL without it being
+ // advertised, anyways.
+ // This may also occur if the network's disconnected or negotiation hasn't yet happened.
+ return false;
+ }
+
+ // Get the SASL capability value
+ QString saslCapValue = capValue(IrcCap::SASL);
+ // SASL mechanisms are only specified in capability values as part of SASL 3.2. In SASL 3.1,
+ // it's handled differently. If we don't know via capability value, assume it's supported to
+ // reduce the risk of breaking existing setups.
+ // See: http://ircv3.net/specs/extensions/sasl-3.1.html
+ // And: http://ircv3.net/specs/extensions/sasl-3.2.html
+ return (saslCapValue.length() == 0)
+ || (saslCapValue.contains(saslMechanism, Qt::CaseInsensitive));
+}
+
+
IrcUser *Network::newIrcUser(const QString &hostmask, const QVariantMap &initData)
{
QString nick(nickFromMask(hostmask).toLower());
void Network::setMessageRateBurstSize(quint32 burstSize)
{
if (burstSize < 1) {
- // Can't go slower than one message at a time
- qWarning() << "Received invalid setMessageRateBurstSize data, cannot have zero message "
- "burst size!" << burstSize;
+ // Can't go slower than one message at a time. Also blocks old clients from trying to set
+ // this to 0.
+ qWarning() << "Received invalid setMessageRateBurstSize data - message burst size must be "
+ "non-zero positive, given" << burstSize;
return;
}
if (_messageRateBurstSize != burstSize) {
void Network::setMessageRateDelay(quint32 messageDelay)
{
+ if (messageDelay == 0) {
+ // Nonsensical to have no delay - just check the Unlimited box instead. Also blocks old
+ // clients from trying to set this to 0.
+ qWarning() << "Received invalid setMessageRateDelay data - message delay must be non-zero "
+ "positive, given" << messageDelay;
+ return;
+ }
if (_messageRateDelay != messageDelay) {
_messageRateDelay = messageDelay;
SYNC(ARG(messageDelay))