Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qabstractsocketengine_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// Copyright (C) 2016 Intel Corporation.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4// Qt-Security score:significant reason:default
5
6#ifndef QABSTRACTSOCKETENGINE_P_H
7#define QABSTRACTSOCKETENGINE_P_H
8
9//
10// W A R N I N G
11// -------------
12//
13// This file is not part of the Qt API. It exists purely as an
14// implementation detail. This header file may change from version to
15// version without notice, or even be removed.
16//
17// We mean it.
18//
19
20#include <QtNetwork/private/qtnetworkglobal_p.h>
21#include "QtNetwork/qhostaddress.h"
22#include "QtNetwork/qabstractsocket.h"
23#include <QtCore/qdeadlinetimer.h>
24#include "private/qnetworkdatagram_p.h"
25#include "private/qobject_p.h"
26
27QT_BEGIN_NAMESPACE
28
29class QAuthenticator;
31#ifndef QT_NO_NETWORKINTERFACE
32class QNetworkInterface;
33#endif
34class QNetworkProxy;
35
37public:
39 virtual void readNotification()= 0;
40 virtual void writeNotification()= 0;
41 virtual void closeNotification()= 0;
42 virtual void exceptionNotification()= 0;
43 virtual void connectionNotification()= 0;
44#ifndef QT_NO_NETWORKPROXY
45 virtual void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)= 0;
46#endif
47};
48
49static constexpr std::chrono::seconds DefaultTimeout{30};
50
51class Q_AUTOTEST_EXPORT QAbstractSocketEngine : public QObject
52{
53 Q_OBJECT
54 Q_MOC_INCLUDE(<QtNetwork/qauthenticator.h>)
55public:
56
57 static QAbstractSocketEngine *createSocketEngine(QAbstractSocket::SocketType socketType, const QNetworkProxy &, QObject *parent);
58 static QAbstractSocketEngine *createSocketEngine(qintptr socketDescriptor, QObject *parent);
59
60 QAbstractSocketEngine(QObject *parent = nullptr);
61
62 enum SocketOption {
63 NonBlockingSocketOption,
64 BroadcastSocketOption,
65 ReceiveBufferSocketOption,
66 SendBufferSocketOption,
67 AddressReusable,
68 BindExclusively,
69 ReceiveOutOfBandData,
70 LowDelayOption,
71 KeepAliveOption,
72 MulticastTtlOption,
73 MulticastLoopbackOption,
74 TypeOfServiceOption,
75 ReceivePacketInformation,
76 ReceiveHopLimit,
77 MaxStreamsSocketOption,
78 PathMtuInformation,
79 BindInterfaceIndex,
80 };
81
82 enum PacketHeaderOption {
83 WantNone = 0,
84 WantDatagramSender = 0x01,
85 WantDatagramDestination = 0x02,
86 WantDatagramHopLimit = 0x04,
87 WantStreamNumber = 0x08,
88 WantEndOfRecord = 0x10,
89
90 WantAll = 0xff
91 };
92 Q_DECLARE_FLAGS(PacketHeaderOptions, PacketHeaderOption)
93
94 virtual bool initialize(QAbstractSocket::SocketType type, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::IPv4Protocol) = 0;
95
96 virtual bool initialize(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = QAbstractSocket::ConnectedState) = 0;
97
98 virtual qintptr socketDescriptor() const = 0;
99
100 virtual bool isValid() const = 0;
101
102 virtual bool connectToHost(const QHostAddress &address, quint16 port) = 0;
103 virtual bool connectToHostByName(const QString &name, quint16 port) = 0;
104 virtual bool bind(const QHostAddress &address, quint16 port) = 0;
105 virtual bool listen(int backlog) = 0;
106 virtual qintptr accept() = 0;
107 virtual void close() = 0;
108
109 virtual qint64 bytesAvailable() const = 0;
110
111 virtual qint64 read(char *data, qint64 maxlen) = 0;
112 virtual qint64 write(const char *data, qint64 len) = 0;
113
114#ifndef QT_NO_UDPSOCKET
115#ifndef QT_NO_NETWORKINTERFACE
116 virtual bool joinMulticastGroup(const QHostAddress &groupAddress,
117 const QNetworkInterface &iface) = 0;
118 virtual bool leaveMulticastGroup(const QHostAddress &groupAddress,
119 const QNetworkInterface &iface) = 0;
120 virtual QNetworkInterface multicastInterface() const = 0;
121 virtual bool setMulticastInterface(const QNetworkInterface &iface) = 0;
122#endif // QT_NO_NETWORKINTERFACE
123
124 virtual bool hasPendingDatagrams() const = 0;
125 virtual qint64 pendingDatagramSize() const = 0;
126#endif // QT_NO_UDPSOCKET
127
128 virtual qint64 readDatagram(char *data, qint64 maxlen, QIpPacketHeader *header = nullptr,
129 PacketHeaderOptions = WantNone) = 0;
130 virtual qint64 writeDatagram(const char *data, qint64 len, const QIpPacketHeader &header) = 0;
131 virtual qint64 bytesToWrite() const = 0;
132
133 virtual int option(SocketOption option) const = 0;
134 virtual bool setOption(SocketOption option, int value) = 0;
135
136 virtual bool waitForRead(QDeadlineTimer deadline = QDeadlineTimer{DefaultTimeout},
137 bool *timedOut = nullptr) = 0;
138 virtual bool waitForWrite(QDeadlineTimer deadline = QDeadlineTimer{DefaultTimeout},
139 bool *timedOut = nullptr) = 0;
140 virtual bool waitForReadOrWrite(bool *readyToRead, bool *readyToWrite,
141 bool checkRead, bool checkWrite,
142 QDeadlineTimer deadline = QDeadlineTimer{DefaultTimeout},
143 bool *timedOut = nullptr) = 0;
144
145 QAbstractSocket::SocketError error() const;
146 QString errorString() const;
147 QAbstractSocket::SocketState state() const;
148 QAbstractSocket::SocketType socketType() const;
149 QAbstractSocket::NetworkLayerProtocol protocol() const;
150
151 QHostAddress localAddress() const;
152 quint16 localPort() const;
153 QHostAddress peerAddress() const;
154 quint16 peerPort() const;
155 int inboundStreamCount() const;
156 int outboundStreamCount() const;
157
158 virtual bool isReadNotificationEnabled() const = 0;
159 virtual void setReadNotificationEnabled(bool enable) = 0;
160 virtual bool isWriteNotificationEnabled() const = 0;
161 virtual void setWriteNotificationEnabled(bool enable) = 0;
162 virtual bool isExceptionNotificationEnabled() const = 0;
163 virtual void setExceptionNotificationEnabled(bool enable) = 0;
164
165public Q_SLOTS:
166 void readNotification();
167 void writeNotification();
168 void closeNotification();
169 void exceptionNotification();
170 void connectionNotification();
171#ifndef QT_NO_NETWORKPROXY
172 void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator);
173#endif
174
175public:
176 void setReceiver(QAbstractSocketEngineReceiver *receiver);
177protected:
178 QAbstractSocketEngine(QAbstractSocketEnginePrivate &dd, QObject* parent = nullptr);
179
180 void setError(QAbstractSocket::SocketError error, const QString &errorString) const;
181 void setState(QAbstractSocket::SocketState state);
182 void setSocketType(QAbstractSocket::SocketType socketType);
183 void setProtocol(QAbstractSocket::NetworkLayerProtocol protocol);
184 void setLocalAddress(const QHostAddress &address);
185 void setLocalPort(quint16 port);
186 void setPeerAddress(const QHostAddress &address);
187 void setPeerPort(quint16 port);
188
189private:
190 Q_DECLARE_PRIVATE(QAbstractSocketEngine)
191 Q_DISABLE_COPY_MOVE(QAbstractSocketEngine)
192};
193
214
215
216class Q_AUTOTEST_EXPORT QSocketEngineHandler
217{
218protected:
219 QSocketEngineHandler();
220 virtual ~QSocketEngineHandler();
221 virtual QAbstractSocketEngine *createSocketEngine(QAbstractSocket::SocketType socketType,
222 const QNetworkProxy &, QObject *parent) = 0;
223 virtual QAbstractSocketEngine *createSocketEngine(qintptr socketDescriptor, QObject *parent) = 0;
224
225private:
226 friend class QAbstractSocketEngine;
227};
228
229Q_DECLARE_OPERATORS_FOR_FLAGS(QAbstractSocketEngine::PacketHeaderOptions)
230
231QT_END_NAMESPACE
232
233#endif // QABSTRACTSOCKETENGINE_P_H
QAbstractSocketEngineReceiver * receiver
QAbstractSocket::NetworkLayerProtocol socketProtocol
QAbstractSocket::SocketState socketState
QAbstractSocket::SocketError socketError
QAbstractSocket::SocketType socketType
virtual void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)=0
virtual void writeNotification()=0
virtual void exceptionNotification()=0
virtual void connectionNotification()=0
virtual void closeNotification()=0
virtual void readNotification()=0
static constexpr std::chrono::seconds DefaultTimeout