00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef KIMAP_SESSIONTHREAD_P_H
00021 #define KIMAP_SESSIONTHREAD_P_H
00022
00023 #include <QtCore/QMutex>
00024 #include <QtCore/QQueue>
00025 #include <QtCore/QThread>
00026
00027 #include <ktcpsocket.h>
00028
00029 typedef KTcpSocket SessionSocket;
00030
00031 namespace KIMAP {
00032
00033 class ImapStreamParser;
00034 struct Message;
00035 class Session;
00036
00037 class SessionThread : public QThread
00038 {
00039 Q_OBJECT
00040
00041 public:
00042 explicit SessionThread( const QString &hostName, quint16 port, Session *parent );
00043 ~SessionThread();
00044
00045 inline QString hostName() { return m_hostName; }
00046 inline quint16 port() { return m_port; }
00047
00048 void sendData( const QByteArray &payload );
00049 void run();
00050
00051 public slots:
00052 void closeSocket();
00053 void reconnect();
00054 void startSsl(const KTcpSocket::SslVersion &version);
00055
00056 signals:
00057 void responseReceived(const KIMAP::Message &response);
00058 void encryptionNegotiationResult(bool, KTcpSocket::SslVersion);
00059 void sslError(const KSslErrorUiData&);
00060
00061 private slots:
00062 void readMessage();
00063 void writeDataQueue();
00064 void sslConnected();
00065 void sslErrorHandlerResponse(bool result);
00066 void doCloseSocket();
00067
00068 private:
00069 QString m_hostName;
00070 quint16 m_port;
00071
00072 Session *m_session;
00073 SessionSocket *m_socket;
00074 ImapStreamParser *m_stream;
00075
00076 QQueue<QByteArray> m_dataQueue;
00077
00078 QMutex m_mutex;
00079
00080 bool m_encryptedMode;
00081 };
00082
00083 }
00084
00085 #endif