X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fnetwork.h;h=c67fea89a6e15df89d7e6fdffb68266ad8550d67;hp=93d9d515a401fda318d1c212850f457ada9278c3;hb=da3aa4136fe01e142238f0f42fe1273481037b9d;hpb=fd7c2c4a41b5bb9cffcfe7a8f86a28ab7f38ac27 diff --git a/src/common/network.h b/src/common/network.h index 93d9d515..c67fea89 100644 --- a/src/common/network.h +++ b/src/common/network.h @@ -21,12 +21,14 @@ #ifndef _NETWORK_H_ #define _NETWORK_H_ +#include #include #include #include #include #include #include +#include #include "types.h" #include "syncableobject.h" @@ -35,29 +37,56 @@ class SignalProxy; class IrcUser; class IrcChannel; +// defined below! +struct NetworkInfo; + +// TODO: ConnectionInfo to propagate and sync the current state of NetworkConnection, encodings etcpp class Network : public SyncableObject { Q_OBJECT + Q_ENUMS(ConnectionState Network::ConnectionState) Q_PROPERTY(QString networkName READ networkName WRITE setNetworkName STORED false) Q_PROPERTY(QString currentServer READ currentServer WRITE setCurrentServer STORED false) Q_PROPERTY(QString myNick READ myNick WRITE setMyNick STORED false) + Q_PROPERTY(QByteArray codecForServer READ codecForServer WRITE setCodecForServer STORED false) + Q_PROPERTY(QByteArray codecForEncoding READ codecForEncoding WRITE setCodecForEncoding STORED false) + Q_PROPERTY(QByteArray codecForDecoding READ codecForDecoding WRITE setCodecForDecoding STORED false) + Q_PROPERTY(IdentityId identityId READ identity WRITE setIdentity STORED false) + Q_PROPERTY(bool isConnected READ isConnected WRITE setConnected STORED false) + //Q_PROPERTY(Network::ConnectionState connectionState READ connectionState WRITE setConnectionState STORED false) + Q_PROPERTY(int connectionState READ connectionState WRITE setConnectionState STORED false) + Q_PROPERTY(bool useRandomServer READ useRandomServer WRITE setUseRandomServer STORED false) + Q_PROPERTY(QStringList perform READ perform WRITE setPerform STORED false) + Q_PROPERTY(bool useAutoIdentify READ useAutoIdentify WRITE setUseAutoIdentify STORED false) + Q_PROPERTY(QString autoIdentifyService READ autoIdentifyService WRITE setAutoIdentifyService STORED false) + Q_PROPERTY(QString autoIdentifyPassword READ autoIdentifyPassword WRITE setAutoIdentifyPassword STORED false) + Q_PROPERTY(bool useAutoReconnect READ useAutoReconnect WRITE setUseAutoReconnect STORED false) + Q_PROPERTY(quint32 autoReconnectInterval READ autoReconnectInterval WRITE setAutoReconnectInterval STORED false) + Q_PROPERTY(quint16 autoReconnectRetries READ autoReconnectRetries WRITE setAutoReconnectRetries STORED false) + Q_PROPERTY(bool unlimitedReconnectRetries READ unlimitedReconnectRetries WRITE setUnlimitedReconnectRetries STORED false) + Q_PROPERTY(bool rejoinChannels READ rejoinChannels WRITE setRejoinChannels STORED false) public: - Network(const uint &networkid, QObject *parent = 0); - //virtual ~Network(); + enum ConnectionState { Disconnected, Connecting, Initializing, Initialized, Reconnecting, Disconnecting }; + + Network(const NetworkId &networkid, QObject *parent = 0); + ~Network(); NetworkId networkId() const; - bool initialized() const; SignalProxy *proxy() const; void setProxy(SignalProxy *proxy); bool isMyNick(const QString &nick) const; - bool isMyNick(IrcUser *ircuser) const; + bool isMe(IrcUser *ircuser) const; bool isChannelName(const QString &channelname) const; + bool isConnected() const; + //Network::ConnectionState connectionState() const; + int connectionState() const; + QString prefixToMode(const QString &prefix); QString prefixToMode(const QCharRef &prefix); QString modeToPrefix(const QString &mode); @@ -66,8 +95,23 @@ public: QString networkName() const; QString currentServer() const; QString myNick() const; + IdentityId identity() const; QStringList nicks() const; QStringList channels() const; + QVariantList serverList() const; + bool useRandomServer() const; + QStringList perform() const; + bool useAutoIdentify() const; + QString autoIdentifyService() const; + QString autoIdentifyPassword() const; + bool useAutoReconnect() const; + quint32 autoReconnectInterval() const; + quint16 autoReconnectRetries() const; + bool unlimitedReconnectRetries() const; + bool rejoinChannels() const; + + NetworkInfo networkInfo() const; + void setNetworkInfo(const NetworkInfo &); QString prefixes(); QString prefixModes(); @@ -80,81 +124,168 @@ public: IrcUser *ircUser(QString nickname) const; IrcUser *ircUser(const QByteArray &nickname) const; QList ircUsers() const; + quint32 ircUserCount() const; IrcChannel *newIrcChannel(const QString &channelname); IrcChannel *newIrcChannel(const QByteArray &channelname); - IrcChannel *ircChannel(QString channelname); - IrcChannel *ircChannel(const QByteArray &channelname); - + IrcChannel *ircChannel(QString channelname) const; + IrcChannel *ircChannel(const QByteArray &channelname) const; QList ircChannels() const; + quint32 ircChannelCount() const; + + inline QHash persistentChannels() const { return _persistentChannels; } - QTextCodec *codecForEncoding() const; - QTextCodec *codecForDecoding() const; - void setCodecForEncoding(const QString &codecName); + QByteArray codecForServer() const; + QByteArray codecForEncoding() const; + QByteArray codecForDecoding() const; + void setCodecForServer(QTextCodec *codec); void setCodecForEncoding(QTextCodec *codec); - void setCodecForDecoding(const QString &codecName); void setCodecForDecoding(QTextCodec *codec); QString decodeString(const QByteArray &text) const; - QByteArray encodeString(const QString string) const; + QByteArray encodeString(const QString &string) const; + QString decodeServerString(const QByteArray &text) const; + QByteArray encodeServerString(const QString &string) const; + + static QByteArray defaultCodecForServer(); + static QByteArray defaultCodecForEncoding(); + static QByteArray defaultCodecForDecoding(); + static void setDefaultCodecForServer(const QByteArray &name); + static void setDefaultCodecForEncoding(const QByteArray &name); + static void setDefaultCodecForDecoding(const QByteArray &name); public slots: void setNetworkName(const QString &networkName); void setCurrentServer(const QString ¤tServer); + void setConnected(bool isConnected); + //void setConnectionState(Network::ConnectionState state); + void setConnectionState(int state); void setMyNick(const QString &mynick); + void setIdentity(IdentityId); + + void setServerList(const QVariantList &serverList); + void setUseRandomServer(bool); + void setPerform(const QStringList &); + void setUseAutoIdentify(bool); + void setAutoIdentifyService(const QString &); + void setAutoIdentifyPassword(const QString &); + void setUseAutoReconnect(bool); + void setAutoReconnectInterval(quint32); + void setAutoReconnectRetries(quint16); + void setUnlimitedReconnectRetries(bool); + void setRejoinChannels(bool); + + void setCodecForServer(const QByteArray &codecName); + void setCodecForEncoding(const QByteArray &codecName); + void setCodecForDecoding(const QByteArray &codecName); void addSupport(const QString ¶m, const QString &value = QString()); void removeSupport(const QString ¶m); inline void addIrcUser(const QString &hostmask) { newIrcUser(hostmask); } - void removeIrcUser(QString nick); - + void removeIrcUser(const QString &nick); + void removeIrcChannel(const QString &channel); + + void addPersistentChannel(const QString &channel, const QString &key = QString()); + void removePersistentChannel(const QString &channel); + void setPersistentChannelKey(const QString &channel, const QString &key); + //init geters QVariantMap initSupports() const; + QVariantList initServerList() const; QStringList initIrcUsers() const; QStringList initIrcChannels() const; + QStringList initPersistentChannels() const; //init seters void initSetSupports(const QVariantMap &supports); + void initSetServerList(const QVariantList &serverList); void initSetIrcUsers(const QStringList &hostmasks); - void initSetChannels(const QStringList &channels); + void initSetIrcChannels(const QStringList &channels); + void initSetPersistentChannels(const QStringList &channels); IrcUser *updateNickFromMask(const QString &mask); // these slots are to keep the hashlists of all users and the // channel lists up to date void ircUserNickChanged(QString newnick); - void setInitialized(); + + void requestConnect() const; + void requestDisconnect() const; + + void emitConnectionError(const QString &); private slots: - void ircUserDestroyed(); void channelDestroyed(); void removeIrcUser(IrcUser *ircuser); - + void removeIrcChannel(IrcChannel *ircChannel); + void removeChansAndUsers(); + void ircUserInitDone(); + void ircChannelInitDone(); + signals: + void aboutToBeDestroyed(); void networkNameSet(const QString &networkName); void currentServerSet(const QString ¤tServer); + void connectedSet(bool isConnected); + void connectionStateSet(Network::ConnectionState); + void connectionStateSet(int); + void connectionError(const QString &errorMsg); void myNickSet(const QString &mynick); + void identitySet(IdentityId); + + void serverListSet(QVariantList serverList); + void useRandomServerSet(bool); + void performSet(const QStringList &); + void useAutoIdentifySet(bool); + void autoIdentifyServiceSet(const QString &); + void autoIdentifyPasswordSet(const QString &); + void useAutoReconnectSet(bool); + void autoReconnectIntervalSet(quint32); + void autoReconnectRetriesSet(quint16); + void unlimitedReconnectRetriesSet(bool); + void rejoinChannelsSet(bool); + + void codecForServerSet(const QByteArray &codecName); + void codecForEncodingSet(const QByteArray &codecName); + void codecForDecodingSet(const QByteArray &codecName); void supportAdded(const QString ¶m, const QString &value); void supportRemoved(const QString ¶m); - - void ircUserAdded(QString hostmask); - void ircChannelAdded(QString channelname); - void ircUserRemoved(QString nick); - - void initDone(); - void ircUserInitDone(); - void ircChannelInitDone(); - + void ircUserAdded(const QString &hostmask); + void ircUserAdded(IrcUser *); + void ircChannelAdded(const QString &channelname); + void ircChannelAdded(IrcChannel *); + + void ircUserRemoved(const QString &nick); + void ircChannelRemoved(const QString &channel); + + void persistentChannelAdded(const QString &channel, const QString &key); + void persistentChannelRemoved(const QString &channel); + void persistentChannelKeySet(const QString &channel, const QString &key); + + // needed for client sync progress + void ircUserRemoved(QObject *); + void ircChannelRemoved(QObject *); + + void ircUserInitDone(IrcUser *); + void ircChannelInitDone(IrcChannel *); + + void connectRequested(NetworkId id = 0) const; + void disconnectRequested(NetworkId id = 0) const; + private: - uint _networkId; - bool _initialized; - + QPointer _proxy; + + NetworkId _networkId; + IdentityId _identity; + QString _myNick; QString _networkName; QString _currentServer; + bool _connected; + ConnectionState _connectionState; QString _prefixes; QString _prefixModes; @@ -162,16 +293,68 @@ private: QHash _ircUsers; // stores all known nicks for the server QHash _ircChannels; // stores all known channels QHash _supports; // stores results from RPL_ISUPPORT + QHash _persistentChannels; // stores persistent channels and their passwords, if any + + QVariantList _serverList; + bool _useRandomServer; + QStringList _perform; + + bool _useAutoIdentify; + QString _autoIdentifyService; + QString _autoIdentifyPassword; + + bool _useAutoReconnect; + quint32 _autoReconnectInterval; + quint16 _autoReconnectRetries; + bool _unlimitedReconnectRetries; + bool _rejoinChannels; - //QVariantMap networkSettings; - //QVariantMap identity; - - QPointer _proxy; void determinePrefixes(); + QTextCodec *_codecForServer; QTextCodec *_codecForEncoding; QTextCodec *_codecForDecoding; + static QTextCodec *_defaultCodecForServer; + static QTextCodec *_defaultCodecForEncoding; + static QTextCodec *_defaultCodecForDecoding; }; +//! Stores all editable information about a network (as opposed to runtime state). +struct NetworkInfo { + NetworkId networkId; + QString networkName; + IdentityId identity; + + bool useCustomEncodings; // not used! + QByteArray codecForServer; + QByteArray codecForEncoding; + QByteArray codecForDecoding; + + // Server entry: QString "Host", uint "Port", QString "Password", bool "UseSSL" + QVariantList serverList; + bool useRandomServer; + + QStringList perform; + + bool useAutoIdentify; + QString autoIdentifyService; + QString autoIdentifyPassword; + + bool useAutoReconnect; + quint32 autoReconnectInterval; + quint16 autoReconnectRetries; + bool unlimitedReconnectRetries; + bool rejoinChannels; + + bool operator==(const NetworkInfo &other) const; + bool operator!=(const NetworkInfo &other) const; +}; + +QDataStream &operator<<(QDataStream &out, const NetworkInfo &info); +QDataStream &operator>>(QDataStream &in, NetworkInfo &info); +QDebug operator<<(QDebug dbg, const NetworkInfo &i); + +Q_DECLARE_METATYPE(NetworkInfo); + #endif