MythTV
master
|
Performs all the protocol-level work for a single websocket connection. More...
#include <libmythupnp/websocket.h>
Public Types | |
enum | ErrorCode : std::uint16_t { kCloseNormal = 1000, kCloseGoingAway = 1001, kCloseProtocolError = 1002, kCloseUnsupported = 1003, kCloseNoStatus = 1005, kCloseAbnormal = 1006, kCloseBadData = 1007, kClosePolicy = 1008, kCloseTooLarge = 1009, kCloseNoExtensions = 1010, kCloseUnexpectedErr = 1011, kCloseNoTLS = 1012 } |
Public Slots | |
void | doRead () |
void | CloseConnection () |
void | SendHeartBeat () |
bool | SendText (const QString &message) |
bool | SendText (const QByteArray &message) |
bool | SendBinary (const QByteArray &data) |
Public Member Functions | |
WebSocketWorker (WebSocketServer &webSocketServer, qintptr sock, PoolServerType type, const QSslConfiguration &sslConfig) | |
~WebSocketWorker () override | |
void | Exec () |
Protected Member Functions | |
bool | ProcessHandshake (QTcpSocket *socket) |
void | ProcessFrames (QTcpSocket *socket) |
Returns false if an error occurs. More... | |
void | HandleControlFrame (const WebSocketFrame &frame) |
Returns false if an error occurs. More... | |
void | HandleDataFrame (const WebSocketFrame &frame) |
void | HandleCloseConnection (const QByteArray &payload) |
bool | SendFrame (const QByteArray &frame) |
bool | SendPing (const QByteArray &payload) |
bool | SendPong (const QByteArray &payload) |
bool | SendClose (ErrorCode errCode, const QString &message=QString()) |
void | SetupSocket () |
void | CleanupSocket () |
void | RegisterExtension (WebSocketExtension *extension) |
void | DeregisterExtension (WebSocketExtension *extension) |
Static Protected Member Functions | |
static QByteArray | CreateFrame (WebSocketFrame::OpCode type, const QByteArray &payload) |
Protected Attributes | |
QEventLoop * | m_eventLoop {nullptr} |
WebSocketServer & | m_webSocketServer |
qintptr | m_socketFD |
QTcpSocket * | m_socket {nullptr} |
PoolServerType | m_connectionType |
bool | m_webSocketMode {false} |
WebSocketFrame | m_readFrame |
uint8_t | m_errorCount {0} |
bool | m_isRunning {false} |
QTimer * | m_heartBeat {nullptr} |
QSslConfiguration | m_sslConfig |
bool | m_fuzzTesting {false} |
QList< WebSocketExtension * > | m_extensions |
Performs all the protocol-level work for a single websocket connection.
The worker is created by WebSocketServer after a raw socket is opened. It runs in it's own thread, an instance of WebSocketServerThread.
The worker parses the initial HTTP connection and upgrades the connection to use the WebSocket protocol. It manages the heartbeat, parses and validates frames, reconstitutes payloads from fragmented frames and handles other basic protocol level tasks.
When complete data frames have been received, it checks whether any registered extensions wish to handle them. It is also responsible for creating properly formatted, valid frames and transmitting them to the client.
Definition at line 198 of file websocket.h.
Enumerator | |
---|---|
kCloseNormal | |
kCloseGoingAway | |
kCloseProtocolError | |
kCloseUnsupported | |
kCloseNoStatus | |
kCloseAbnormal | |
kCloseBadData | |
kClosePolicy | |
kCloseTooLarge | |
kCloseNoExtensions | |
kCloseUnexpectedErr | |
kCloseNoTLS |
Definition at line 220 of file websocket.h.
WebSocketWorker::WebSocketWorker | ( | WebSocketServer & | webSocketServer, |
qintptr | sock, | ||
PoolServerType | type, | ||
const QSslConfiguration & | sslConfig | ||
) |
webSocketServer | The parent server of this request |
sock | The socket |
type | The type of connection - Plain TCP or TLS? |
sslConfig | The TLS (ssl) configuration (for TLS sockets) |
Definition at line 105 of file websocket.cpp.
|
override |
Definition at line 132 of file websocket.cpp.
void WebSocketWorker::Exec | ( | ) |
Definition at line 150 of file websocket.cpp.
|
slot |
Definition at line 287 of file websocket.cpp.
Referenced by SetupSocket().
|
slot |
Definition at line 155 of file websocket.cpp.
Referenced by doRead(), SendClose(), and SetupSocket().
|
slot |
Definition at line 920 of file websocket.cpp.
Referenced by SetupSocket().
|
slot |
Definition at line 855 of file websocket.cpp.
Referenced by HandleDataFrame(), and RegisterExtension().
|
slot |
Definition at line 860 of file websocket.cpp.
|
slot |
Definition at line 875 of file websocket.cpp.
Referenced by HandleDataFrame(), and RegisterExtension().
|
protected |
Definition at line 315 of file websocket.cpp.
Referenced by doRead().
|
protected |
Returns false if an error occurs.
Definition at line 478 of file websocket.cpp.
Referenced by doRead().
|
protected |
Returns false if an error occurs.
Definition at line 667 of file websocket.cpp.
|
protected |
Definition at line 671 of file websocket.cpp.
Referenced by ProcessFrames().
|
protected |
Definition at line 719 of file websocket.cpp.
Referenced by ProcessFrames().
|
staticprotected |
Definition at line 764 of file websocket.cpp.
Referenced by SendBinary(), SendClose(), SendPing(), SendPong(), and SendText().
|
protected |
Definition at line 840 of file websocket.cpp.
Referenced by SendBinary(), SendClose(), SendPing(), SendPong(), and SendText().
|
protected |
Definition at line 882 of file websocket.cpp.
Referenced by SendHeartBeat().
|
protected |
Definition at line 889 of file websocket.cpp.
Referenced by ProcessFrames().
|
protected |
Definition at line 896 of file websocket.cpp.
Referenced by doRead(), HandleCloseConnection(), HandleDataFrame(), ProcessFrames(), and SendFrame().
|
protected |
Definition at line 164 of file websocket.cpp.
Referenced by WebSocketWorker().
|
protected |
Definition at line 226 of file websocket.cpp.
Referenced by ~WebSocketWorker().
|
protected |
Definition at line 925 of file websocket.cpp.
Referenced by WebSocketWorker().
|
protected |
Definition at line 938 of file websocket.cpp.
|
protected |
Definition at line 274 of file websocket.h.
Referenced by CloseConnection(), Exec(), and ~WebSocketWorker().
|
protected |
Definition at line 275 of file websocket.h.
Referenced by CleanupSocket(), and doRead().
|
protected |
Definition at line 276 of file websocket.h.
Referenced by CleanupSocket(), SetupSocket(), and WebSocketWorker().
|
protected |
Definition at line 277 of file websocket.h.
Referenced by CleanupSocket(), doRead(), SendFrame(), and SetupSocket().
|
protected |
Definition at line 278 of file websocket.h.
Referenced by SetupSocket().
Definition at line 281 of file websocket.h.
Referenced by doRead(), and ProcessHandshake().
|
protected |
Definition at line 282 of file websocket.h.
Referenced by HandleDataFrame(), and ProcessFrames().
|
protected |
Definition at line 284 of file websocket.h.
Referenced by ProcessFrames().
Definition at line 285 of file websocket.h.
Referenced by CloseConnection(), doRead(), ProcessFrames(), and WebSocketWorker().
|
protected |
Definition at line 287 of file websocket.h.
Referenced by ProcessHandshake(), SetupSocket(), and ~WebSocketWorker().
|
protected |
Definition at line 290 of file websocket.h.
Referenced by SetupSocket().
Definition at line 293 of file websocket.h.
Referenced by HandleDataFrame(), ProcessFrames(), and ProcessHandshake().
|
protected |
Definition at line 295 of file websocket.h.
Referenced by DeregisterExtension(), HandleDataFrame(), RegisterExtension(), and ~WebSocketWorker().