X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fnetwork.h;h=8a810216bfa2a2a4b70801669e45861e435e5780;hp=969c3b9b131348a71619afb2d5f76e762c8a489f;hb=16f22647e6890d3eb8c3e94f7a0700e12fa29e44;hpb=7d30b18136eecbdf2089e5d5877c7e41c6f4bcb6 diff --git a/src/common/network.h b/src/common/network.h index 969c3b9b..8a810216 100644 --- a/src/common/network.h +++ b/src/common/network.h @@ -39,6 +39,9 @@ #include "ircuser.h" #include "ircchannel.h" +// IRCv3 capabilities +#include "irccap.h" + // defined below! struct NetworkInfo; @@ -169,10 +172,37 @@ public : //Network::ConnectionState connectionState() const; inline int connectionState() const { return _connectionState; } + /**@{*/ + /** + * Translates a user’s prefix to the channelmode associated with it. + * @param prefix Prefix to be translated. + */ QString prefixToMode(const QString &prefix) const; inline QString prefixToMode(const QCharRef &prefix) const { return prefixToMode(QString(prefix)); } + inline QString prefixesToModes(const QString &prefix) const { + QString modes; + for (QChar c : prefix) { + modes += prefixToMode(c); + } + return modes; + } + /**@}*/ + + /**@{*/ + /** + * Translates a user’s prefix to the channelmode associated with it. + * @param prefix Prefix to be translated. + */ QString modeToPrefix(const QString &mode) const; inline QString modeToPrefix(const QCharRef &mode) const { return modeToPrefix(QString(mode)); } + inline QString modesToPrefixes(const QString &mode) const { + QString prefixes; + for (QChar c : mode) { + prefixes += modeToPrefix(c); + } + return prefixes; + } + /**@}*/ ChannelModeType channelModeType(const QString &mode); inline ChannelModeType channelModeType(const QCharRef &mode) { return channelModeType(QString(mode)); } @@ -260,6 +290,19 @@ public : bool supports(const QString ¶m) const { return _supports.contains(param); } QString support(const QString ¶m) const; + /** + * Checks if a given capability is advertised by the server. + * + * These results aren't valid if the network is disconnected or capability negotiation hasn't + * happened, and some servers might not correctly advertise capabilities. Don't treat this as + * a guarentee. + * + * @param[in] capability Name of capability + * @returns True if connected and advertised by the server, otherwise false + */ + inline bool capAvailable(const QString &capability) const { return _caps.contains(capability.toLower()); } + // IRCv3 specs all use lowercase capability names + /** * Checks if a given capability is acknowledged and active. * @@ -280,6 +323,17 @@ public : // QHash returns the default constructed value if not found, in this case, empty string // See: https://doc.qt.io/qt-4.8/qhash.html#value + /** + * Check if the given authentication mechanism is likely to be supported. + * + * This depends on the server advertising SASL support and either declaring available mechanisms + * (SASL 3.2), or just indicating something is supported (SASL 3.1). + * + * @param[in] saslMechanism Desired SASL mechanism + * @return True if mechanism supported or unknown, otherwise false + */ + bool saslMaybeSupports(const QString &saslMechanism) const; + IrcUser *newIrcUser(const QString &hostmask, const QVariantMap &initData = QVariantMap()); inline IrcUser *newIrcUser(const QByteArray &hostmask) { return newIrcUser(decodeServerString(hostmask)); } IrcUser *ircUser(QString nickname) const;