File indexing completed on 2024-05-12 05:17:17
0001 /* 0002 SPDX-FileCopyrightText: 2009 Kevin Ottens <ervin@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include "session.h" 0010 #include "sessionuiproxy.h" 0011 0012 #include <QObject> 0013 #include <QQueue> 0014 #include <QSslSocket> 0015 #include <QString> 0016 #include <QTimer> 0017 0018 class KJob; 0019 0020 namespace KIMAP 0021 { 0022 class Job; 0023 struct Response; 0024 class SessionLogger; 0025 class SessionThread; 0026 0027 class KIMAP_EXPORT SessionPrivate : public QObject 0028 { 0029 Q_OBJECT 0030 0031 friend class Session; 0032 0033 public: 0034 explicit SessionPrivate(Session *session); 0035 ~SessionPrivate() override; 0036 0037 void addJob(Job *job); 0038 QByteArray sendCommand(const QByteArray &command, const QByteArray &args = QByteArray()); 0039 void startSsl(QSsl::SslProtocol protocol); 0040 void sendData(const QByteArray &data); 0041 0042 QSsl::SslProtocol negotiatedEncryption() const; 0043 0044 void setSocketTimeout(int ms); 0045 int socketTimeout() const; 0046 0047 Q_SIGNALS: 0048 void encryptionNegotiationResult(bool); 0049 0050 private Q_SLOTS: 0051 void onEncryptionNegotiationResult(bool isEncrypted, QSsl::SslProtocol sslVersion); 0052 void onSocketTimeout(); 0053 0054 void doStartNext(); 0055 void jobDone(KJob *); 0056 void jobDestroyed(QObject *); 0057 void responseReceived(const KIMAP::Response &); 0058 0059 void socketConnected(); 0060 void socketDisconnected(); 0061 void socketError(QAbstractSocket::SocketError error); 0062 void socketActivity(); 0063 0064 void handleSslError(const KSslErrorUiData &errorData); 0065 0066 private: 0067 void startNext(); 0068 void clearJobQueue(); 0069 void setState(Session::State state); 0070 0071 void startSocketTimer(); 0072 void stopSocketTimer(); 0073 void restartSocketTimer(); 0074 bool isConnected() const; 0075 0076 Session *const q; 0077 0078 bool isSocketConnected = false; 0079 Session::State state; 0080 0081 SessionLogger *logger = nullptr; 0082 SessionThread *thread = nullptr; 0083 SessionUiProxy::Ptr uiProxy; 0084 0085 bool jobRunning = false; 0086 Job *currentJob = nullptr; 0087 QQueue<Job *> queue; 0088 0089 QByteArray authTag; 0090 QByteArray selectTag; 0091 QByteArray closeTag; 0092 0093 QString userName; 0094 QByteArray greeting; 0095 QByteArray currentMailBox; 0096 QByteArray upcomingMailBox; 0097 quint16 tagCount; 0098 0099 QSsl::SslProtocol sslVersion; 0100 0101 int socketTimerInterval = 0; 0102 QTimer socketTimer; 0103 }; 0104 0105 }