X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fnetwork.h;h=eaa427c34a38c6e59581f14c0af254ca0352c48f;hp=a56b0935b25e85780fa927a316ac174bb4411079;hb=ab7ef4d24f62b5848b628482b7762ebfc0b53e1a;hpb=0b983b0d9364e62db0b5e6cf25988ef8041a0c5d diff --git a/src/common/network.h b/src/common/network.h index a56b0935..eaa427c3 100644 --- a/src/common/network.h +++ b/src/common/network.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2016 by the Quassel Project * + * Copyright (C) 2005-2018 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -172,10 +172,72 @@ 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; + } + /**@}*/ + + /** + * Sorts the user channelmodes according to priority set by PREFIX + * + * Given a list of channel modes, sorts according to the order of PREFIX, putting the highest + * modes first. Any unknown modes are moved to the end in no given order. + * + * If prefix modes cannot be determined from the network, no changes will be made. + * + * @param modes User channelmodes + * @return Priority-sorted user channelmodes + */ + QString sortPrefixModes(const QString &modes) const; + + /**@{*/ + /** + * Sorts the list of users' channelmodes according to priority set by PREFIX + * + * Maintains order of the modes list. + * + * @seealso Network::sortPrefixModes() + * + * @param modesList List of users' channel modes + * @return Priority-sorted list of users' channel modes + */ + inline QStringList sortPrefixModes(const QStringList &modesList) const { + QStringList sortedModesList; + // Sort each individual mode string, appending back + // Must maintain the order received! + for (QString modes : modesList) { + sortedModesList << sortPrefixModes(modes); + } + return sortedModesList; + } + /**@}*/ ChannelModeType channelModeType(const QString &mode); inline ChannelModeType channelModeType(const QCharRef &mode) { return channelModeType(QString(mode)); } @@ -263,6 +325,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 guarantee. + * + * @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. * @@ -683,44 +758,42 @@ private: //! Stores all editable information about a network (as opposed to runtime state). -struct NetworkInfo { - // set some default values, note that this does not initialize e.g. name and id - NetworkInfo(); - - NetworkId networkId; +struct NetworkInfo +{ QString networkName; - IdentityId identity; - - bool useCustomEncodings; // not used! - QByteArray codecForServer; - QByteArray codecForEncoding; - QByteArray codecForDecoding; Network::ServerList serverList; - bool useRandomServer; - QStringList perform; - bool useAutoIdentify; - QString autoIdentifyService; + QString autoIdentifyService{"NickServ"}; QString autoIdentifyPassword; - bool useSasl; QString saslAccount; QString saslPassword; - bool useAutoReconnect; - quint32 autoReconnectInterval; - quint16 autoReconnectRetries; - bool unlimitedReconnectRetries; - bool rejoinChannels; + QByteArray codecForServer; + QByteArray codecForEncoding; + QByteArray codecForDecoding; - // Custom rate limiting - bool useCustomMessageRate; /// If true, use custom rate limits, otherwise use defaults - quint32 messageRateBurstSize; /// Maximum number of messages to send without any delays - quint32 messageRateDelay; /// Delay in ms. for messages when max. burst messages sent - bool unlimitedMessageRate; /// If true, disable rate limiting, otherwise apply limits + NetworkId networkId {0}; + IdentityId identity {1}; + + quint32 messageRateBurstSize {5}; ///< Maximum number of messages to send without any delays + quint32 messageRateDelay {2200}; ///< Delay in ms. for messages when max. burst messages sent + + quint32 autoReconnectInterval {60}; + quint16 autoReconnectRetries {20}; + + bool rejoinChannels {true}; + bool useRandomServer {false}; + bool useAutoIdentify {false}; + bool useSasl {false}; + bool useAutoReconnect {true}; + bool unlimitedReconnectRetries {false}; + bool useCustomMessageRate {false}; ///< If true, use custom rate limits, otherwise use defaults + bool unlimitedMessageRate {false}; ///< If true, disable rate limiting, otherwise apply limits +public: bool operator==(const NetworkInfo &other) const; bool operator!=(const NetworkInfo &other) const; };