Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
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
5#ifndef QABSTRACTSOCKETENGINE_P_H
6#define QABSTRACTSOCKETENGINE_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <QtNetwork/private/qtnetworkglobal_p.h>
20#include "QtNetwork/qhostaddress.h"
21#include "QtNetwork/qabstractsocket.h"
22#include <QtCore/qdeadlinetimer.h>
23#include "private/qnetworkdatagram_p.h"
24#include "private/qobject_p.h"
25
27
28class QAuthenticator;
30#ifndef QT_NO_NETWORKINTERFACE
32#endif
33class QNetworkProxy;
34
36public:
38 virtual void readNotification()= 0;
39 virtual void writeNotification()= 0;
40 virtual void closeNotification()= 0;
41 virtual void exceptionNotification()= 0;
42 virtual void connectionNotification()= 0;
43#ifndef QT_NO_NETWORKPROXY
44 virtual void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)= 0;
45#endif
46};
47
48static constexpr std::chrono::seconds DefaultTimeout{30};
49
51{
53 Q_MOC_INCLUDE(<QtNetwork/qauthenticator.h>)
54public:
55
56 static QAbstractSocketEngine *createSocketEngine(QAbstractSocket::SocketType socketType, const QNetworkProxy &, QObject *parent);
57 static QAbstractSocketEngine *createSocketEngine(qintptr socketDescriptor, QObject *parent);
58
59 QAbstractSocketEngine(QObject *parent = nullptr);
60
79
81 WantNone = 0,
82 WantDatagramSender = 0x01,
83 WantDatagramDestination = 0x02,
84 WantDatagramHopLimit = 0x04,
85 WantStreamNumber = 0x08,
86 WantEndOfRecord = 0x10,
87
88 WantAll = 0xff
89 };
90 Q_DECLARE_FLAGS(PacketHeaderOptions, PacketHeaderOption)
91
92 virtual bool initialize(QAbstractSocket::SocketType type, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::IPv4Protocol) = 0;
93
94 virtual bool initialize(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = QAbstractSocket::ConnectedState) = 0;
95
96 virtual qintptr socketDescriptor() const = 0;
97
98 virtual bool isValid() const = 0;
99
100 virtual bool connectToHost(const QHostAddress &address, quint16 port) = 0;
101 virtual bool connectToHostByName(const QString &name, quint16 port) = 0;
102 virtual bool bind(const QHostAddress &address, quint16 port) = 0;
103 virtual bool listen(int backlog) = 0;
104 virtual qintptr accept() = 0;
105 virtual void close() = 0;
106
107 virtual qint64 bytesAvailable() const = 0;
108
109 virtual qint64 read(char *data, qint64 maxlen) = 0;
110 virtual qint64 write(const char *data, qint64 len) = 0;
111
112#ifndef QT_NO_UDPSOCKET
113#ifndef QT_NO_NETWORKINTERFACE
114 virtual bool joinMulticastGroup(const QHostAddress &groupAddress,
115 const QNetworkInterface &iface) = 0;
116 virtual bool leaveMulticastGroup(const QHostAddress &groupAddress,
117 const QNetworkInterface &iface) = 0;
119 virtual bool setMulticastInterface(const QNetworkInterface &iface) = 0;
120#endif // QT_NO_NETWORKINTERFACE
121
122 virtual bool hasPendingDatagrams() const = 0;
123 virtual qint64 pendingDatagramSize() const = 0;
124#endif // QT_NO_UDPSOCKET
125
126 virtual qint64 readDatagram(char *data, qint64 maxlen, QIpPacketHeader *header = nullptr,
127 PacketHeaderOptions = WantNone) = 0;
128 virtual qint64 writeDatagram(const char *data, qint64 len, const QIpPacketHeader &header) = 0;
129 virtual qint64 bytesToWrite() const = 0;
130
131 virtual int option(SocketOption option) const = 0;
132 virtual bool setOption(SocketOption option, int value) = 0;
133
135 bool *timedOut = nullptr) = 0;
137 bool *timedOut = nullptr) = 0;
138 virtual bool waitForReadOrWrite(bool *readyToRead, bool *readyToWrite,
139 bool checkRead, bool checkWrite,
141 bool *timedOut = nullptr) = 0;
142
144 QString errorString() const;
148
149 QHostAddress localAddress() const;
150 quint16 localPort() const;
151 QHostAddress peerAddress() const;
152 quint16 peerPort() const;
153 int inboundStreamCount() const;
154 int outboundStreamCount() const;
155
156 virtual bool isReadNotificationEnabled() const = 0;
157 virtual void setReadNotificationEnabled(bool enable) = 0;
158 virtual bool isWriteNotificationEnabled() const = 0;
159 virtual void setWriteNotificationEnabled(bool enable) = 0;
160 virtual bool isExceptionNotificationEnabled() const = 0;
162
163public Q_SLOTS:
164 void readNotification();
165 void writeNotification();
166 void closeNotification();
167 void exceptionNotification();
168 void connectionNotification();
169#ifndef QT_NO_NETWORKPROXY
170 void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator);
171#endif
172
173public:
174 void setReceiver(QAbstractSocketEngineReceiver *receiver);
175protected:
177
178 void setError(QAbstractSocket::SocketError error, const QString &errorString) const;
179 void setState(QAbstractSocket::SocketState state);
180 void setSocketType(QAbstractSocket::SocketType socketType);
182 void setLocalAddress(const QHostAddress &address);
183 void setLocalPort(quint16 port);
184 void setPeerAddress(const QHostAddress &address);
185 void setPeerPort(quint16 port);
186
187private:
188 Q_DECLARE_PRIVATE(QAbstractSocketEngine)
189 Q_DISABLE_COPY_MOVE(QAbstractSocketEngine)
190};
191
212
213
215{
216protected:
218 virtual ~QSocketEngineHandler();
220 const QNetworkProxy &, QObject *parent) = 0;
221 virtual QAbstractSocketEngine *createSocketEngine(qintptr socketDescriptor, QObject *parent) = 0;
222
223private:
225};
226
227Q_DECLARE_OPERATORS_FOR_FLAGS(QAbstractSocketEngine::PacketHeaderOptions)
228
230
231#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
virtual bool leaveMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface)=0
virtual bool waitForRead(QDeadlineTimer deadline=QDeadlineTimer{DefaultTimeout}, bool *timedOut=nullptr)=0
virtual bool setMulticastInterface(const QNetworkInterface &iface)=0
virtual bool joinMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface)=0
virtual void setWriteNotificationEnabled(bool enable)=0
virtual bool isReadNotificationEnabled() const =0
PacketHeaderOption
Specifies which fields in the IP packet header are desired in the call to readDatagram().
virtual bool hasPendingDatagrams() const =0
virtual bool waitForWrite(QDeadlineTimer deadline=QDeadlineTimer{DefaultTimeout}, bool *timedOut=nullptr)=0
virtual int option(SocketOption option) const =0
virtual qint64 readDatagram(char *data, qint64 maxlen, QIpPacketHeader *header=nullptr, PacketHeaderOptions=WantNone)=0
virtual void setReadNotificationEnabled(bool enable)=0
virtual bool waitForReadOrWrite(bool *readyToRead, bool *readyToWrite, bool checkRead, bool checkWrite, QDeadlineTimer deadline=QDeadlineTimer{DefaultTimeout}, bool *timedOut=nullptr)=0
virtual bool setOption(SocketOption option, int value)=0
virtual qint64 pendingDatagramSize() const =0
virtual qint64 bytesToWrite() const =0
virtual void setExceptionNotificationEnabled(bool enable)=0
virtual bool isWriteNotificationEnabled() const =0
virtual bool isExceptionNotificationEnabled() const =0
virtual qint64 writeDatagram(const char *data, qint64 len, const QIpPacketHeader &header)=0
virtual QNetworkInterface multicastInterface() const =0
The QAbstractSocket class provides the base functionality common to all socket types.
SocketState
This enum describes the different states in which a socket can be.
SocketError
This enum describes the socket errors that can occur.
SocketType
This enum describes the transport layer protocol.
The QAuthenticator class provides an authentication object.
\inmodule QtCore
The QHostAddress class provides an IP address.
The QNetworkInterface class provides a listing of the host's IP addresses and network interfaces.
The QNetworkProxy class provides a network layer proxy.
\inmodule QtCore
Definition qobject.h:103
virtual QAbstractSocketEngine * createSocketEngine(qintptr socketDescriptor, QObject *parent)=0
virtual QAbstractSocketEngine * createSocketEngine(QAbstractSocket::SocketType socketType, const QNetworkProxy &, QObject *parent)=0
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
else opt state
[0]
Combined button and popup list for selecting options.
static constexpr std::chrono::seconds DefaultTimeout
static bool initialize()
Definition qctf.cpp:94
DBusConnection const char DBusError * error
static QString header(const QString &name)
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
EGLOutputPortEXT port
static QT_BEGIN_NAMESPACE const char * socketType(QSocketNotifier::Type type)
#define Q_DECLARE_FLAGS(Flags, Enum)
Definition qflags.h:174
#define Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)
Definition qflags.h:194
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLenum type
GLboolean enable
GLuint name
GLuint GLuint64EXT address
GLuint GLenum option
GLenum GLsizei len
static void setError(QJsonObject *response, const QString &msg)
#define Q_AUTOTEST_EXPORT
#define Q_OBJECT
#define Q_SLOTS
#define Q_MOC_INCLUDE(...)
unsigned short quint16
Definition qtypes.h:48
long long qint64
Definition qtypes.h:60
ptrdiff_t qintptr
Definition qtypes.h:166
ReturnedValue read(const char *data)
gzip write("uncompressed data")
sock connectToHost(url.host(), url.port(80))
QDeadlineTimer deadline(30s)
QNetworkProxy proxy
[0]
socketLayer bind(QHostAddress::Any, 4000)
socketLayer listen()
config setProtocol(QSsl::TlsV1_2)