X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcommon%2Fnetwork.h;h=5ad42e9f1a3ffec70ca32775c57b79cfbf14d5a6;hb=61aac1868f15babb7086d8bc6bbcff530346f438;hp=969c3b9b131348a71619afb2d5f76e762c8a489f;hpb=7d30b18136eecbdf2089e5d5877c7e41c6f4bcb6;p=quassel.git diff --git a/src/common/network.h b/src/common/network.h index 969c3b9b..5ad42e9f 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; @@ -260,6 +263,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 +296,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;