X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcore%2Fnetworkconnection.h;h=5f593137b16d01a92d11f186c8ec4ca4bb4b1172;hb=906789f761e5d1b37b46b5a05a2f649e28900e36;hp=57fd9d25648fe1eb8e64c51266342df6715b487e;hpb=c0bbc724cda7acf652d9d2ce80605ebb53c4a2ff;p=quassel.git diff --git a/src/core/networkconnection.h b/src/core/networkconnection.h index 57fd9d25..5f593137 100644 --- a/src/core/networkconnection.h +++ b/src/core/networkconnection.h @@ -24,15 +24,21 @@ #include #include #include -#include #include +#ifndef QT_NO_OPENSSL +# include +# include +#else +# include +#endif + +#include "coresession.h" #include "identity.h" #include "message.h" #include "network.h" #include "signalproxy.h" -class CoreSession; class Network; class IrcServerHandler; @@ -46,18 +52,18 @@ public: NetworkConnection(Network *network, CoreSession *session); ~NetworkConnection(); - NetworkId networkId() const; - QString networkName() const; - Network *network() const; - Identity *identity() const; - CoreSession *coreSession() const; + inline NetworkId networkId() const { return network()->networkId(); } + inline QString networkName() const { return network()->networkName(); } + inline Network *network() const { return _network; } + inline Identity *identity() const { return coreSession()->identity(network()->identity()); } + inline CoreSession *coreSession() const { return _coreSession; } - bool isConnected() const; - Network::ConnectionState connectionState() const; + inline bool isConnected() const { return connectionState() == Network::Initialized; } + inline Network::ConnectionState connectionState() const { return _connectionState; } - IrcServerHandler *ircServerHandler() const; - UserInputHandler *userInputHandler() const; - CtcpHandler *ctcpHandler() const; + inline IrcServerHandler *ircServerHandler() const { return _ircServerHandler; } + inline UserInputHandler *userInputHandler() const { return _userInputHandler; } + inline CtcpHandler *ctcpHandler() const { return _ctcpHandler; } //! Decode a string using the server (network) decoding. QString serverDecode(const QByteArray &string) const; @@ -77,26 +83,26 @@ public: //! Encode a string using the user-specific encoding, if set, and use the standard encoding else. QByteArray userEncode(const QString &userNick, const QString &string) const; - inline QString channelKey(const QString &channel) const { return _channelKeys.value(channel, QString()); } + inline QString channelKey(const QString &channel) const { return _channelKeys.value(channel.toLower(), QString()); } + inline QStringList persistentChannels() const { return _channelKeys.keys(); } + + inline bool isAutoWhoInProgress(const QString &channel) const { return _autoWhoInProgress.contains(channel); } public slots: // void setServerOptions(); void connectToIrc(bool reconnecting = false); - void disconnectFromIrc(); + void disconnectFromIrc(bool requested = true); void userInput(BufferInfo bufferInfo, QString msg); void putRawLine(QByteArray input); void putCmd(const QString &cmd, const QVariantList ¶ms, const QByteArray &prefix = QByteArray()); + void setChannelJoined(const QString &channel); + void setChannelParted(const QString &channel); void addChannelKey(const QString &channel, const QString &key); void removeChannelKey(const QString &channel); -private slots: - void sendPerform(); - void autoReconnectSettingsChanged(); - void doAutoReconnect(); - void sendWho(); - void nickChanged(const QString &newNick, const QString &oldNick); // this signal is inteded to rename query buffers in the storage backend + bool setAutoWhoDone(const QString &channel); signals: // #void networkState(QString net, QVariantMap data); @@ -114,18 +120,40 @@ signals: //void queryRequested(QString network, QString nick); void nickChanged(const NetworkId &networkId, const QString &newNick, const QString &oldNick); // this signal is inteded to rename query buffers in the storage backend + void channelJoined(NetworkId, const QString &channel, const QString &key = QString()); + void channelParted(NetworkId, const QString &channel); + + void sslErrors(const QVariant &errorData); private slots: void socketHasData(); void socketError(QAbstractSocket::SocketError); void socketConnected(); + void socketInitialized(); void socketDisconnected(); void socketStateChanged(QAbstractSocket::SocketState); void setConnectionState(Network::ConnectionState); void networkInitialized(const QString ¤tServer); + void sendPerform(); + void autoReconnectSettingsChanged(); + void doAutoReconnect(); + void sendAutoWho(); + void startAutoWhoCycle(); + void nickChanged(const QString &newNick, const QString &oldNick); // this signal is inteded to rename query buffers in the storage backend + +#ifndef QT_NO_OPENSSL + void socketEncrypted(); + void sslErrors(const QList &errors); +#endif + private: +#ifndef QT_NO_OPENSSL + QSslSocket socket; +#else QTcpSocket socket; +#endif + Network::ConnectionState _connectionState; Network *_network; @@ -136,11 +164,22 @@ private: UserInputHandler *_userInputHandler; CtcpHandler *_ctcpHandler; - QHash _channelKeys; + QHash _channelKeys; // stores persistent channels and their passwords, if any + QTimer _autoReconnectTimer; int _autoReconnectCount; - QTimer _whoTimer; + bool _previousConnectionAttemptFailed; + int _lastUsedServerlistIndex; + + bool _autoWhoEnabled; + QStringList _autoWhoQueue; + QSet _autoWhoInProgress; + int _autoWhoInterval; + int _autoWhoNickLimit; + int _autoWhoDelay; + QTimer _autoWhoTimer, _autoWhoCycleTimer; + class ParseError : public Exception { public: