X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcore%2Fnetworkconnection.h;h=1a7aafaa14667edca95a275dee3c05ec9b6ccc0b;hb=aa40491595ffec54ba340a9850d99dc14d920eb3;hp=f9db515461087f2cfd6c3a15ae4715baf0e14b8c;hpb=da3aa4136fe01e142238f0f42fe1273481037b9d;p=quassel.git diff --git a/src/core/networkconnection.h b/src/core/networkconnection.h index f9db5154..1a7aafaa 100644 --- a/src/core/networkconnection.h +++ b/src/core/networkconnection.h @@ -24,9 +24,15 @@ #include #include #include -#include #include +#ifndef QT_NO_OPENSSL +# include +# include +#else +# include +#endif + #include "identity.h" #include "message.h" #include "network.h" @@ -77,17 +83,20 @@ 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(); } 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); @@ -95,6 +104,7 @@ 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 signals: @@ -113,31 +123,53 @@ 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); +#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; CoreSession *_coreSession; + BufferInfo _statusBufferInfo; IrcServerHandler *_ircServerHandler; 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; + class ParseError : public Exception { public: ParseError(QString cmd, QString prefix, QStringList params);