mirror of
https://github.com/qt/qtmqtt.git
synced 2026-10-25 16:16:26 +00:00
Replace the current license disclaimer in files by a SPDX-License-Identifier. License files are organized under LICENSES directory. Pick-to: 6.4 Task-number: QTBUG-67283 Change-Id: Ie4309963c8e17d4e7dad602f61a660246d5e23cb Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
69 lines
1.7 KiB
C++
69 lines
1.7 KiB
C++
// Copyright (C) 2017 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
|
|
|
#include "websocketiodevice.h"
|
|
|
|
#include <QtCore/QDebug>
|
|
|
|
WebSocketIODevice::WebSocketIODevice(QObject *parent)
|
|
: QIODevice(parent)
|
|
{
|
|
connect(&m_socket, &QWebSocket::connected, this, &WebSocketIODevice::onSocketConnected);
|
|
connect(&m_socket, &QWebSocket::binaryMessageReceived, this, &WebSocketIODevice::handleBinaryMessage);
|
|
}
|
|
|
|
bool WebSocketIODevice::open(QIODevice::OpenMode mode)
|
|
{
|
|
// Cannot use an URL because of missing sub protocol support
|
|
// Have to use QNetworkRequest, see QTBUG-38742
|
|
QNetworkRequest request;
|
|
request.setUrl(m_url);
|
|
request.setRawHeader("Sec-WebSocket-Protocol", m_protocol.constData());
|
|
|
|
m_socket.open(request);
|
|
|
|
return QIODevice::open(mode);
|
|
}
|
|
|
|
void WebSocketIODevice::close()
|
|
{
|
|
m_socket.close();
|
|
QIODevice::close();
|
|
}
|
|
|
|
qint64 WebSocketIODevice::readData(char *data, qint64 maxlen)
|
|
{
|
|
qint64 bytesToRead = qMin(maxlen, (qint64)m_buffer.size());
|
|
memcpy(data, m_buffer.constData(), bytesToRead);
|
|
m_buffer = m_buffer.right(m_buffer.size() - bytesToRead);
|
|
return bytesToRead;
|
|
}
|
|
|
|
qint64 WebSocketIODevice::writeData(const char *data, qint64 len)
|
|
{
|
|
QByteArray msg(data, len);
|
|
const int length = m_socket.sendBinaryMessage(msg);
|
|
return length;
|
|
}
|
|
|
|
void WebSocketIODevice::setUrl(const QUrl &url)
|
|
{
|
|
m_url = url;
|
|
}
|
|
|
|
void WebSocketIODevice::setProtocol(const QByteArray &data)
|
|
{
|
|
m_protocol = data;
|
|
}
|
|
|
|
void WebSocketIODevice::handleBinaryMessage(const QByteArray &msg)
|
|
{
|
|
m_buffer.append(msg);
|
|
emit readyRead();
|
|
}
|
|
|
|
void WebSocketIODevice::onSocketConnected()
|
|
{
|
|
emit socketConnected();
|
|
}
|