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
qsocks5socketengine_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QSOCKS5SOCKETENGINE_P_H
5#define QSOCKS5SOCKETENGINE_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtNetwork/private/qtnetworkglobal_p.h>
19
20#include <QtNetwork/qnetworkproxy.h>
21
23
25
27
29
31{
33public:
34 QSocks5SocketEngine(QObject *parent = nullptr);
36
38 bool initialize(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = QAbstractSocket::ConnectedState) override;
39
40 void setProxy(const QNetworkProxy &networkProxy);
41
42 qintptr socketDescriptor() const override;
43
44 bool isValid() const override;
45
46 bool connectInternal();
47 bool connectToHost(const QHostAddress &address, quint16 port) override;
48 bool connectToHostByName(const QString &name, quint16 port) override;
49 bool bind(const QHostAddress &address, quint16 port) override;
50 bool listen(int backlog) override;
51 qintptr accept() override;
52 void close() override;
53
54 qint64 bytesAvailable() const override;
55
56 qint64 read(char *data, qint64 maxlen) override;
57 qint64 write(const char *data, qint64 len) override;
58
59#ifndef QT_NO_UDPSOCKET
60#ifndef QT_NO_NETWORKINTERFACE
61 bool joinMulticastGroup(const QHostAddress &groupAddress,
62 const QNetworkInterface &interface) override;
63 bool leaveMulticastGroup(const QHostAddress &groupAddress,
64 const QNetworkInterface &interface) override;
66 bool setMulticastInterface(const QNetworkInterface &iface) override;
67#endif // QT_NO_NETWORKINTERFACE
68
69 bool hasPendingDatagrams() const override;
70 qint64 pendingDatagramSize() const override;
71#endif // QT_NO_UDPSOCKET
72
73 qint64 readDatagram(char *data, qint64 maxlen, QIpPacketHeader * = nullptr,
74 PacketHeaderOptions = WantNone) override;
75 qint64 writeDatagram(const char *data, qint64 len, const QIpPacketHeader &) override;
76 qint64 bytesToWrite() const override;
77
78 int option(SocketOption option) const override;
79 bool setOption(SocketOption option, int value) override;
80
82 bool *timedOut = nullptr) override;
84 bool *timedOut = nullptr) override;
85 bool waitForReadOrWrite(bool *readyToRead, bool *readyToWrite,
86 bool checkRead, bool checkWrite,
88 bool *timedOut = nullptr) override;
89
90 bool isReadNotificationEnabled() const override;
91 void setReadNotificationEnabled(bool enable) override;
92 bool isWriteNotificationEnabled() const override;
93 void setWriteNotificationEnabled(bool enable) override;
94 bool isExceptionNotificationEnabled() const override;
95 void setExceptionNotificationEnabled(bool enable) override;
96
97private:
98 Q_DECLARE_PRIVATE(QSocks5SocketEngine)
99 Q_DISABLE_COPY_MOVE(QSocks5SocketEngine)
100 Q_PRIVATE_SLOT(d_func(), void _q_controlSocketConnected())
101 Q_PRIVATE_SLOT(d_func(), void _q_controlSocketReadNotification())
102 Q_PRIVATE_SLOT(d_func(), void _q_controlSocketErrorOccurred(QAbstractSocket::SocketError))
103#ifndef QT_NO_UDPSOCKET
104 Q_PRIVATE_SLOT(d_func(), void _q_udpSocketReadNotification())
105#endif
106 Q_PRIVATE_SLOT(d_func(), void _q_controlSocketBytesWritten())
107 Q_PRIVATE_SLOT(d_func(), void _q_emitPendingReadNotification())
108 Q_PRIVATE_SLOT(d_func(), void _q_emitPendingWriteNotification())
109 Q_PRIVATE_SLOT(d_func(), void _q_emitPendingConnectionNotification())
110 Q_PRIVATE_SLOT(d_func(), void _q_controlSocketDisconnected())
111 Q_PRIVATE_SLOT(d_func(), void _q_controlSocketStateChanged(QAbstractSocket::SocketState))
112
113};
114
115
116class QTcpSocket;
117
119{
120public:
122 virtual ~QSocks5Authenticator();
123 virtual char methodId();
124 virtual bool beginAuthenticate(QTcpSocket *socket, bool *completed);
125 virtual bool continueAuthenticate(QTcpSocket *socket, bool *completed);
126
127 bool seal(const QByteArray &buf, QByteArray *sealedBuf);
128 bool unSeal(const QByteArray &sealedBuf, QByteArray *buf);
129 bool unSeal(QTcpSocket *sealedSocket, QByteArray *buf);
130
131 virtual QString errorString() { return QString(); }
132};
133
135{
136public:
137 QSocks5PasswordAuthenticator(const QString &userName, const QString &password);
138 char methodId() override;
139 bool beginAuthenticate(QTcpSocket *socket, bool *completed) override;
140 bool continueAuthenticate(QTcpSocket *socket, bool *completed) override;
141
142 QString errorString() override;
143
144private:
145 QString userName;
146 QString password;
147};
148
149struct QSocks5Data;
150struct QSocks5ConnectData;
152struct QSocks5BindData;
153
155{
156 Q_DECLARE_PUBLIC(QSocks5SocketEngine)
157public:
160
178
187
201
202 void initialize(Socks5Mode socks5Mode);
203
204 void setErrorState(Socks5State state, const QString &extraMessage = QString());
205 void setErrorState(Socks5State state, Socks5Error socks5error);
206
207 void reauthenticate();
210 void sendRequestMethod();
213
214 bool waitForConnected(QDeadlineTimer deadline, bool *timedOut);
215
219#ifndef QT_NO_UDPSOCKET
221#endif
225
227
229
231
234#ifndef QT_NO_UDPSOCKET
236#endif
240
243
253};
254
256{
257public:
259 const QNetworkProxy &, QObject *parent) override;
260 virtual QAbstractSocketEngine *createSocketEngine(qintptr socketDescriptor, QObject *parent) override;
261};
262
264
265#endif // QSOCKS5SOCKETENGINE_H
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 bind(const QHostAddress &address, quint16 port)=0
virtual bool isValid() const =0
virtual bool isReadNotificationEnabled() const =0
virtual bool hasPendingDatagrams() const =0
virtual bool connectToHost(const QHostAddress &address, quint16 port)=0
virtual qintptr accept()=0
virtual qint64 readDatagram(char *data, qint64 maxlen, QIpPacketHeader *header=nullptr, PacketHeaderOptions=WantNone)=0
virtual qint64 read(char *data, qint64 maxlen)=0
virtual void setReadNotificationEnabled(bool enable)=0
static QAbstractSocketEngine * createSocketEngine(QAbstractSocket::SocketType socketType, const QNetworkProxy &, QObject *parent)
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 write(const char *data, qint64 len)=0
virtual qint64 pendingDatagramSize() const =0
virtual qintptr socketDescriptor() const =0
virtual bool connectToHostByName(const QString &name, quint16 port)=0
virtual qint64 bytesAvailable() const =0
virtual qint64 bytesToWrite() const =0
virtual void setExceptionNotificationEnabled(bool enable)=0
virtual bool isWriteNotificationEnabled() const =0
virtual void close()=0
virtual bool isExceptionNotificationEnabled() const =0
virtual qint64 writeDatagram(const char *data, qint64 len, const QIpPacketHeader &header)=0
virtual QNetworkInterface multicastInterface() const =0
SocketState
This enum describes the different states in which a socket can be.
static constexpr auto IPv4Protocol
SocketError
This enum describes the socket errors that can occur.
SocketType
This enum describes the transport layer protocol.
\inmodule QtCore
Definition qbytearray.h:57
\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 bool beginAuthenticate(QTcpSocket *socket, bool *completed)
virtual bool continueAuthenticate(QTcpSocket *socket, bool *completed)
virtual QString errorString()
bool seal(const QByteArray &buf, QByteArray *sealedBuf)
bool unSeal(const QByteArray &sealedBuf, QByteArray *buf)
bool beginAuthenticate(QTcpSocket *socket, bool *completed) override
bool continueAuthenticate(QTcpSocket *socket, bool *completed) override
QSocks5PasswordAuthenticator(const QString &userName, const QString &password)
QSocks5UdpAssociateData * udpData
void setErrorState(Socks5State state, const QString &extraMessage=QString())
void _q_controlSocketStateChanged(QAbstractSocket::SocketState)
void _q_controlSocketErrorOccurred(QAbstractSocket::SocketError)
bool waitForConnected(QDeadlineTimer deadline, bool *timedOut)
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
The QTcpSocket class provides a TCP socket.
Definition qtcpsocket.h:18
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 DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char * interface
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
EGLOutputPortEXT port
static QT_BEGIN_NAMESPACE const char * socketType(QSocketNotifier::Type type)
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLenum type
GLenum GLuint GLenum GLsizei const GLchar * buf
GLboolean enable
GLuint name
GLuint GLuint64EXT address
GLuint GLenum option
GLenum GLsizei len
#define Q_AUTOTEST_EXPORT
#define QT_REQUIRE_CONFIG(feature)
#define Q_OBJECT
#define Q_PRIVATE_SLOT(d, signature)
unsigned short quint16
Definition qtypes.h:48
long long qint64
Definition qtypes.h:60
ptrdiff_t qintptr
Definition qtypes.h:166
QDeadlineTimer deadline(30s)
QTcpSocket * socket
[1]
serverSocket setProxy(QNetworkProxy::NoProxy)
[0]
socketLayer waitForWrite()
socketLayer listen()