1// Copyright (C) 2019 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QCOAPCONNECTION_P_H
6#define QCOAPCONNECTION_P_H
7
8#include <QtCoap/qcoapnamespace.h>
9#include <QtCoap/qcoapsecurityconfiguration.h>
10
11#include <QtCore/qqueue.h>
12#include <QtCore/qobject.h>
13#include <QtNetwork/qabstractsocket.h>
14#include <private/qobject_p.h>
15
16//
17// W A R N I N G
18// -------------
19//
20// This file is not part of the Qt API. It exists purely as an
21// implementation detail. This header file may change from version to
22// version without notice, or even be removed.
23//
24// We mean it.
25//
26
27QT_BEGIN_NAMESPACE
28
29class QCoapConnectionPrivate;
30class Q_AUTOTEST_EXPORT QCoapConnection : public QObject
31{
32 Q_OBJECT
33public:
34 enum class ConnectionState : quint8 {
35 Unconnected,
36 Bound
37 };
38
39 explicit QCoapConnection(QtCoap::SecurityMode securityMode = QtCoap::SecurityMode::NoSecurity,
40 QObject *parent = nullptr);
41 virtual ~QCoapConnection();
42
43 bool isSecure() const;
44 QtCoap::SecurityMode securityMode() const;
45 ConnectionState state() const;
46 QCoapSecurityConfiguration securityConfiguration() const;
47
48 Q_INVOKABLE void setSecurityConfiguration(const QCoapSecurityConfiguration &configuration);
49 Q_INVOKABLE void disconnect();
50
51Q_SIGNALS:
52 void error(QAbstractSocket::SocketError error);
53 void readyRead(const QByteArray &data, const QHostAddress &sender);
54 void bound();
55 void securityConfigurationChanged();
56
57private:
58 void startToSendRequest();
59
60protected:
61 QCoapConnection(QObjectPrivate &dd, QObject *parent = nullptr);
62
63 virtual void bind(const QString &host, quint16 port) = 0;
64 virtual void writeData(const QByteArray &data, const QString &host, quint16 port) = 0;
65 virtual void close() = 0;
66
67private:
68 friend class QCoapProtocolPrivate;
69
70 Q_DECLARE_PRIVATE(QCoapConnection)
71};
72
73struct CoapFrame {
74 QByteArray currentPdu;
75 QString host;
76 quint16 port = 0;
77
78 CoapFrame(const QByteArray &pdu, const QString &hostName, quint16 portNumber)
79 : currentPdu(pdu), host(hostName), port(portNumber) {}
80};
81
82class Q_AUTOTEST_EXPORT QCoapConnectionPrivate : public QObjectPrivate
83{
84public:
85 QCoapConnectionPrivate(QtCoap::SecurityMode security = QtCoap::SecurityMode::NoSecurity);
86
87 ~QCoapConnectionPrivate() override = default;
88
89 void sendRequest(const QByteArray &request, const QString &host, quint16 port);
90
91 QCoapSecurityConfiguration securityConfiguration;
92 QtCoap::SecurityMode securityMode;
93 QCoapConnection::ConnectionState state;
94 QQueue<CoapFrame> framesToSend;
95
96 Q_DECLARE_PUBLIC(QCoapConnection)
97};
98
99QT_END_NAMESPACE
100
101#endif // QCOAPCONNECTION_P_H
102

source code of qtcoap/src/coap/qcoapconnection_p.h