X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Firccap.h;h=f378a78e32314774d378aee23dcb28eac4c7c239;hp=3398adab295825a68e5daede53701ed644a82f25;hb=e38846f054ad1766f2e91992a57bbaffd33c7c06;hpb=dccbef488a2299cf08146cdfc11933a8fe28a387 diff --git a/src/common/irccap.h b/src/common/irccap.h index 3398adab..f378a78e 100644 --- a/src/common/irccap.h +++ b/src/common/irccap.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2016 by the Quassel Project * + * Copyright (C) 2005-2019 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -18,8 +18,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef IRCCAP_H -#define IRCCAP_H +#pragma once #include #include @@ -41,6 +40,14 @@ namespace IrcCap { */ const QString ACCOUNT_NOTIFY = "account-notify"; + /** + * Magic number for WHOX, used to ignore user-requested WHOX replies from servers + * + * If a user initiates a WHOX, there's no easy way to tell what fields were requested. It's + * simpler to not attempt to parse data from user-requested WHOX replies. + */ + const uint ACCOUNT_NOTIFY_WHOX_NUM = 369; + /** * Away change notification. * @@ -58,6 +65,13 @@ namespace IrcCap { */ const QString CAP_NOTIFY = "cap-notify"; + /** + * Hostname/user changed notification. + * + * http://ircv3.net/specs/extensions/chghost-3.2.html + */ + const QString CHGHOST = "chghost"; + /** * Extended join information. * @@ -86,18 +100,57 @@ namespace IrcCap { */ const QString USERHOST_IN_NAMES = "userhost-in-names"; + /** + * Server time for messages. + * + * https://ircv3.net/specs/extensions/server-time-3.2.html + */ + const QString SERVER_TIME = "server-time"; + + /** + * Vendor-specific capabilities + */ + namespace Vendor { + + /** + * Twitch.tv membership message support + * + * User list in a channel can be quite large and often non required for bot users and is then optional. + * + * From Twitch.tv documentation: + * "Adds membership state event data. By default, we do not send this data to clients without this capability." + * + * https://dev.twitch.tv/docs/v5/guides/irc/#twitch-irc-capability-membership + */ + const QString TWITCH_MEMBERSHIP = "twitch.tv/membership"; + + /** + * Self message support, as recognized by ZNC. + * + * Some servers (e.g. Bitlbee) assume self-message support; ZNC requires a capability + * instead. As self-message is already implemented, there's little reason to not do this. + * + * More information in the IRCv3 commit that removed the 'self-message' capability. + * + * https://github.com/ircv3/ircv3-specifications/commit/1bfba47843c2526707c902034b3395af934713c8 + */ + const QString ZNC_SELF_MESSAGE = "znc.in/self-message"; + } + /** * List of capabilities currently implemented and requested during capability negotiation. */ - const QStringList knownCaps = QStringList { - ACCOUNT_NOTIFY, - AWAY_NOTIFY, - CAP_NOTIFY, - EXTENDED_JOIN, - MULTI_PREFIX, - SASL, - USERHOST_IN_NAMES - }; + const QStringList knownCaps = QStringList{ACCOUNT_NOTIFY, + AWAY_NOTIFY, + CAP_NOTIFY, + CHGHOST, + EXTENDED_JOIN, + MULTI_PREFIX, + SASL, + USERHOST_IN_NAMES, + SERVER_TIME, + Vendor::TWITCH_MEMBERSHIP, + Vendor::ZNC_SELF_MESSAGE}; // NOTE: If you modify the knownCaps list, update the constants above as needed. /** @@ -106,22 +159,6 @@ namespace IrcCap { * http://ircv3.net/specs/extensions/sasl-3.1.html */ namespace SaslMech { - - /** - * Check if the given authentication mechanism is likely to be supported. - * - * @param[in] saslCapValue QString of SASL capability value, e.g. capValue(IrcCap::SASL) - * @param[in] saslMechanism Desired SASL mechanism - * @return True if mechanism supported or unknown, otherwise false - */ - inline bool maybeSupported(const QString &saslCapValue, const QString &saslMechanism) { return - ((saslCapValue.length() == 0) || (saslCapValue.contains(saslMechanism, Qt::CaseInsensitive))); } - // 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 - /** * PLAIN authentication, e.g. hashed password */ @@ -133,5 +170,3 @@ namespace IrcCap { const QString EXTERNAL = "EXTERNAL"; } } - -#endif // IRCCAP_H