Go to the
documentation of this file.
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #ifndef QSSLSOCKET_H
00044 #define QSSLSOCKET_H
00045
00046 #include <QtCore/qlist.h>
00047 #include <QtCore/qregexp.h>
00048 #ifndef QT_NO_OPENSSL
00049 # include <QtNetwork/qtcpsocket.h>
00050 # include <QtNetwork/qsslerror.h>
00051 #endif
00052
00053 QT_BEGIN_HEADER
00054
00055 QT_BEGIN_NAMESPACE
00056
00057 QT_MODULE(Network)
00058
00059 #ifndef QT_NO_OPENSSL
00060
00061 class QDir;
00062 class QSslCipher;
00063 class QSslCertificate;
00064 class QSslConfiguration;
00065
00066 class QSslSocketPrivate;
00067 class Q_NETWORK_EXPORT QSslSocket : public QTcpSocket
00068 {
00069 Q_OBJECT
00070 public:
00071 enum SslMode {
00072 UnencryptedMode,
00073 SslClientMode,
00074 SslServerMode
00075 };
00076
00077 enum PeerVerifyMode {
00078 VerifyNone,
00079 QueryPeer,
00080 VerifyPeer,
00081 AutoVerifyPeer
00082 };
00083
00084 QSslSocket(QObject *parent = 0);
00085 ~QSslSocket();
00086
00087
00088 void connectToHostEncrypted(const QString &hostName, quint16 port, OpenMode mode = ReadWrite);
00089 void connectToHostEncrypted(const QString &hostName, quint16 port, const QString &sslPeerName, OpenMode mode = ReadWrite);
00090 bool setSocketDescriptor(int socketDescriptor, SocketState state = ConnectedState,
00091 OpenMode openMode = ReadWrite);
00092
00093
00094 void setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value);
00095 QVariant socketOption(QAbstractSocket::SocketOption option);
00096
00097 SslMode mode() const;
00098 bool isEncrypted() const;
00099
00100 QSsl::SslProtocol protocol() const;
00101 void setProtocol(QSsl::SslProtocol protocol);
00102
00103 QSslSocket::PeerVerifyMode peerVerifyMode() const;
00104 void setPeerVerifyMode(QSslSocket::PeerVerifyMode mode);
00105
00106 int peerVerifyDepth() const;
00107 void setPeerVerifyDepth(int depth);
00108
00109
00110 qint64 bytesAvailable() const;
00111 qint64 bytesToWrite() const;
00112 bool canReadLine() const;
00113 void close();
00114 bool atEnd() const;
00115 bool flush();
00116 void abort();
00117
00118
00119 void setReadBufferSize(qint64 size);
00120
00121
00122 qint64 encryptedBytesAvailable() const;
00123 qint64 encryptedBytesToWrite() const;
00124
00125
00126 QSslConfiguration sslConfiguration() const;
00127 void setSslConfiguration(const QSslConfiguration &config);
00128
00129
00130 void setLocalCertificate(const QSslCertificate &certificate);
00131 void setLocalCertificate(const QString &fileName, QSsl::EncodingFormat format = QSsl::Pem);
00132 QSslCertificate localCertificate() const;
00133 QSslCertificate peerCertificate() const;
00134 QList<QSslCertificate> peerCertificateChain() const;
00135 QSslCipher sessionCipher() const;
00136
00137
00138 void setPrivateKey(const QSslKey &key);
00139 void setPrivateKey(const QString &fileName, QSsl::KeyAlgorithm algorithm = QSsl::Rsa,
00140 QSsl::EncodingFormat format = QSsl::Pem,
00141 const QByteArray &passPhrase = QByteArray());
00142 QSslKey privateKey() const;
00143
00144
00145 QList<QSslCipher> ciphers() const;
00146 void setCiphers(const QList<QSslCipher> &ciphers);
00147 void setCiphers(const QString &ciphers);
00148 static void setDefaultCiphers(const QList<QSslCipher> &ciphers);
00149 static QList<QSslCipher> defaultCiphers();
00150 static QList<QSslCipher> supportedCiphers();
00151
00152
00153 bool addCaCertificates(const QString &path, QSsl::EncodingFormat format = QSsl::Pem,
00154 QRegExp::PatternSyntax syntax = QRegExp::FixedString);
00155 void addCaCertificate(const QSslCertificate &certificate);
00156 void addCaCertificates(const QList<QSslCertificate> &certificates);
00157 void setCaCertificates(const QList<QSslCertificate> &certificates);
00158 QList<QSslCertificate> caCertificates() const;
00159 static bool addDefaultCaCertificates(const QString &path, QSsl::EncodingFormat format = QSsl::Pem,
00160 QRegExp::PatternSyntax syntax = QRegExp::FixedString);
00161 static void addDefaultCaCertificate(const QSslCertificate &certificate);
00162 static void addDefaultCaCertificates(const QList<QSslCertificate> &certificates);
00163 static void setDefaultCaCertificates(const QList<QSslCertificate> &certificates);
00164 static QList<QSslCertificate> defaultCaCertificates();
00165 static QList<QSslCertificate> systemCaCertificates();
00166
00167 bool waitForConnected(int msecs = 30000);
00168 bool waitForEncrypted(int msecs = 30000);
00169 bool waitForReadyRead(int msecs = 30000);
00170 bool waitForBytesWritten(int msecs = 30000);
00171 bool waitForDisconnected(int msecs = 30000);
00172
00173 QList<QSslError> sslErrors() const;
00174
00175 static bool supportsSsl();
00176 void ignoreSslErrors(const QList<QSslError> &errors);
00177
00178 public Q_SLOTS:
00179 void startClientEncryption();
00180 void startServerEncryption();
00181 void ignoreSslErrors();
00182
00183 Q_SIGNALS:
00184 void encrypted();
00185 void peerVerifyError(const QSslError &error);
00186 void sslErrors(const QList<QSslError> &errors);
00187 void modeChanged(QSslSocket::SslMode newMode);
00188 void encryptedBytesWritten(qint64 totalBytes);
00189
00190 protected Q_SLOTS:
00191 void connectToHostImplementation(const QString &hostName, quint16 port,
00192 OpenMode openMode);
00193 void disconnectFromHostImplementation();
00194
00195 protected:
00196 qint64 readData(char *data, qint64 maxlen);
00197 qint64 writeData(const char *data, qint64 len);
00198
00199 private:
00200 Q_DECLARE_PRIVATE(QSslSocket)
00201 Q_DISABLE_COPY(QSslSocket)
00202 Q_PRIVATE_SLOT(d_func(), void _q_connectedSlot())
00203 Q_PRIVATE_SLOT(d_func(), void _q_hostFoundSlot())
00204 Q_PRIVATE_SLOT(d_func(), void _q_disconnectedSlot())
00205 Q_PRIVATE_SLOT(d_func(), void _q_stateChangedSlot(QAbstractSocket::SocketState))
00206 Q_PRIVATE_SLOT(d_func(), void _q_errorSlot(QAbstractSocket::SocketError))
00207 Q_PRIVATE_SLOT(d_func(), void _q_readyReadSlot())
00208 Q_PRIVATE_SLOT(d_func(), void _q_bytesWrittenSlot(qint64))
00209 Q_PRIVATE_SLOT(d_func(), void _q_flushWriteBuffer())
00210 Q_PRIVATE_SLOT(d_func(), void _q_flushReadBuffer())
00211 friend class QSslSocketBackendPrivate;
00212 };
00213
00214 #endif // QT_NO_OPENSSL
00215
00216 QT_END_NAMESPACE
00217
00218 #ifndef QT_NO_OPENSSL
00219 Q_DECLARE_METATYPE(QList<QSslError>)
00220 #endif
00221
00222 QT_END_HEADER
00223
00224 #endif