Files
giesCANne/mqtt/qmqtt_websocket.cpp
Collin Kidder ee287eac4b Add two new external libraries. SimpleCrypt is used to encrypt passwords, QMQTT is an MQTT
library that I was able to integrate into the codebase so there aren't any external
dependencies. Both external projects have their own open source licenses. Those licenses
are included. Also in this commit is some preliminary work to start adding MQTT support to SavvyCAN.
2020-08-05 20:24:02 -04:00

104 lines
2.6 KiB
C++

#ifdef QT_WEBSOCKETS_LIB
#include "qmqtt_websocket_p.h"
#include <QNetworkRequest>
#include <QUrl>
#include <QSslError>
#ifndef QT_NO_SSL
QMQTT::WebSocket::WebSocket(const QString& origin,
QWebSocketProtocol::Version version,
const QSslConfiguration* sslConfig,
QObject* parent)
: SocketInterface(parent)
, _socket(new QWebSocket(origin, version, this))
, _ioDevice(new WebSocketIODevice(_socket, this))
{
initialize();
if (sslConfig != NULL)
_socket->setSslConfiguration(*sslConfig);
connect(_socket, &QWebSocket::sslErrors, this, &WebSocket::sslErrors);
}
#endif // QT_NO_SSL
QMQTT::WebSocket::WebSocket(const QString& origin,
QWebSocketProtocol::Version version,
QObject* parent)
: SocketInterface(parent)
, _socket(new QWebSocket(origin, version, this))
, _ioDevice(new WebSocketIODevice(_socket, this))
{
initialize();
}
void QMQTT::WebSocket::initialize()
{
connect(_socket, &QWebSocket::connected, this, &WebSocket::connected);
connect(_socket, &QWebSocket::disconnected, this, &WebSocket::disconnected);
connect(_socket,
static_cast<void (QWebSocket::*)(QAbstractSocket::SocketError)>(&QWebSocket::error),
this,
static_cast<void (SocketInterface::*)(QAbstractSocket::SocketError)>(&SocketInterface::error));
}
QMQTT::WebSocket::~WebSocket()
{
}
void QMQTT::WebSocket::connectToHost(const QHostAddress& address, quint16 port)
{
Q_UNUSED(address)
Q_UNUSED(port)
qFatal("No supported");
}
void QMQTT::WebSocket::connectToHost(const QString& hostName, quint16 port)
{
Q_UNUSED(port)
QUrl url(hostName);
QNetworkRequest request(url);
request.setRawHeader("Sec-WebSocket-Protocol", "mqtt");
_ioDevice->connectToHost(request);
}
void QMQTT::WebSocket::disconnectFromHost()
{
_socket->close();
}
QAbstractSocket::SocketState QMQTT::WebSocket::state() const
{
return _socket->state();
}
QAbstractSocket::SocketError QMQTT::WebSocket::error() const
{
return _socket->error();
}
#ifndef QT_NO_SSL
void QMQTT::WebSocket::ignoreSslErrors(const QList<QSslError>& errors)
{
_socket->ignoreSslErrors(errors);
}
void QMQTT::WebSocket::ignoreSslErrors()
{
_socket->ignoreSslErrors();
}
QSslConfiguration QMQTT::WebSocket::sslConfiguration() const
{
return _socket->sslConfiguration();
}
void QMQTT::WebSocket::setSslConfiguration(const QSslConfiguration& config)
{
_socket->setSslConfiguration(config);
}
#endif // QT_NO_SSL
#endif // QT_WEBSOCKETS_LIB