X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcorenetwork.h;h=7ad13f4343690da573145b044447ae8e2062fdfb;hp=a0e8c179e58d0be375bd9fe0b0caa2c46ac98020;hb=0a79f71c41f69643fdbf0c32c061f1b11d14346d;hpb=b9828e0dd235964b8e2e97f844f4bed3476d3bd4 diff --git a/src/core/corenetwork.h b/src/core/corenetwork.h index a0e8c179..7ad13f43 100644 --- a/src/core/corenetwork.h +++ b/src/core/corenetwork.h @@ -23,6 +23,7 @@ #include "network.h" #include "coreircchannel.h" +#include "coreircuser.h" #include @@ -33,14 +34,19 @@ # include #endif +#ifdef HAVE_QCA2 +# include "cipher.h" +#endif + #include "coresession.h" class CoreIdentity; -class IrcServerHandler; -class UserInputHandler; -class CtcpHandler; +class CoreUserInputHandler; +class CoreIgnoreListManager; +class Event; class CoreNetwork : public Network { + SYNCABLE_OBJECT Q_OBJECT public: @@ -50,10 +56,10 @@ public: inline CoreIdentity *identityPtr() const { return coreSession()->identity(identity()); } inline CoreSession *coreSession() const { return _coreSession; } + inline CoreNetworkConfig *networkConfig() const { return coreSession()->networkConfig(); } - inline IrcServerHandler *ircServerHandler() const { return _ircServerHandler; } - inline UserInputHandler *userInputHandler() const { return _userInputHandler; } - inline CtcpHandler *ctcpHandler() const { return _ctcpHandler; } + inline CoreUserInputHandler *userInputHandler() const { return _userInputHandler; } + inline CoreIgnoreListManager *ignoreListManager() { return coreSession()->ignoreListManager(); } //! Decode a string using the server (network) decoding. inline QString serverDecode(const QByteArray &string) const { return decodeServerString(string); } @@ -79,6 +85,13 @@ public: inline UserId userId() const { return _coreSession->user(); } + inline QAbstractSocket::SocketState socketState() const { return socket.state(); } + inline bool socketConnected() const { return socket.state() == QAbstractSocket::ConnectedState; } + inline QHostAddress localAddress() const { return socket.localAddress(); } + inline QHostAddress peerAddress() const { return socket.peerAddress(); } + inline quint16 localPort() const { return socket.localPort(); } + inline quint16 peerPort() const { return socket.peerPort(); } + public slots: virtual void setMyNick(const QString &mynick); @@ -90,6 +103,8 @@ public slots: virtual void setAutoReconnectInterval(quint32); virtual void setAutoReconnectRetries(quint16); + void setPingInterval(int interval); + void connectToIrc(bool reconnecting = false); void disconnectFromIrc(bool requested = true, const QString &reason = QString(), bool withReconnect = false); @@ -102,11 +117,26 @@ public slots: void addChannelKey(const QString &channel, const QString &key); void removeChannelKey(const QString &channel); + // Blowfish stuff +#ifdef HAVE_QCA2 + Cipher *cipher(const QString &recipient) const; + QByteArray cipherKey(const QString &recipient) const; + void setCipherKey(const QString &recipient, const QByteArray &key); +#endif + + void setAutoWhoEnabled(bool enabled); + void setAutoWhoInterval(int interval); + void setAutoWhoDelay(int delay); + bool setAutoWhoDone(const QString &channel); + void updateIssuedModes(const QString &requestedModes); + void updatePersistentModes(QString addModes, QString removeModes); + void resetPersistentModes(); + Server usedServer() const; - inline void resetPingTimeout() { _lastPingTime = 0; } + inline void resetPingTimeout() { _pingCount = 0; } inline void displayMsg(Message::Type msgType, BufferInfo::Type bufferType, const QString &target, const QString &text, const QString &sender = "", Message::Flags flags = Message::None) { emit displayMsg(networkId(), msgType, bufferType, target, text, sender, flags); @@ -122,8 +152,19 @@ signals: void quitRequested(NetworkId networkId); void sslErrors(const QVariant &errorData); + void newEvent(Event *event); + void socketInitialized(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort); + void socketDisconnected(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort); + protected: inline virtual IrcChannel *ircChannelFactory(const QString &channelname) { return new CoreIrcChannel(channelname, this); } + inline virtual IrcUser *ircUserFactory(const QString &hostmask) { return new CoreIrcUser(hostmask, this); } + +protected slots: + // TODO: remove cached cipher keys, when appropriate + //virtual void removeIrcUser(IrcUser *ircuser); + //virtual void removeIrcChannel(IrcChannel *ircChannel); + //virtual void removeChansAndUsers(); private slots: void socketHasData(); @@ -138,7 +179,7 @@ private slots: void restoreUserModes(); void doAutoReconnect(); void sendPing(); - void enablePingTimeout(); + void enablePingTimeout(bool enable = true); void disablePingTimeout(); void sendAutoWho(); void startAutoWhoCycle(); @@ -160,9 +201,7 @@ private: QTcpSocket socket; #endif - IrcServerHandler *_ircServerHandler; - UserInputHandler *_userInputHandler; - CtcpHandler *_ctcpHandler; + CoreUserInputHandler *_userInputHandler; QHash _channelKeys; // stores persistent channels and their passwords, if any @@ -182,20 +221,22 @@ private: QTimer _pingTimer; uint _lastPingTime; + uint _pingCount; - bool _autoWhoEnabled; QStringList _autoWhoQueue; QHash _autoWhoPending; - int _autoWhoInterval; - int _autoWhoNickLimit; - int _autoWhoDelay; QTimer _autoWhoTimer, _autoWhoCycleTimer; QTimer _tokenBucketTimer; - int _messagesPerSecond; // token refill speed + int _messageDelay; // token refill speed in ms int _burstSize; // size of the token bucket int _tokenBucket; // the virtual bucket that holds the tokens QList _msgQueue; + + QString _requestedUserModes; // 2 strings separated by a '-' character. first part are requested modes to add, the second to remove + + // Blowfish key map + QHash _cipherKeys; }; #endif //CORENETWORK_H