Codebase list qsslcaudit / 2c6069a src / libqsslcaudit / dtlsserver.h
2c6069a

Tree @2c6069a (Download .tar.gz)

dtlsserver.h @2c6069araw · history · blame

#ifndef DTLSSERVER_H
#define DTLSSERVER_H

#include "debug.h"

#include <QUdpSocket>
#include <QThread>

#include "sslserver.h"

class DtlsServerWorker;

class DtlsServer : public QObject
{
    Q_OBJECT

public:
    DtlsServer(const SslUserSettings *settings,
               QList<XSslCertificate> localCert,
               XSslKey privateKey,
               XSsl::SslProtocol sslProtocol,
               QList<XSslCipher> sslCiphers,
               QObject *parent = nullptr);
    ~DtlsServer();

    bool listen(const QHostAddress &address, quint16 port);
    void close();
    void handleClient();

signals:
    void udpSocketErrors(const QList<XSslError> &sslErrors,
                         const QString &errorStr, QAbstractSocket::SocketError socketError);
    void dtlsHandshakeError(const XDtlsError, const QString &);
    void dataIntercepted(const QByteArray &data);
    void sslHandshakeFinished(const QList<XSslCertificate> &clientCerts);
    void newPeer(const QHostAddress &peerAddress);
    void rawDataCollected(const QByteArray &rdData, const QByteArray &wrData);
    void sessionFinished();
    void newConnection();

private:
    void handleSigInt();
    bool isForwarding();

    QThread dtlsThread;
    DtlsServerWorker *dtlsWorker;

    bool m_stopForwarding;
    bool m_isForwarding;

    friend class SslServer;
};

#endif // DTLSSERVER_H