2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
42#include "core/socket/stream/SocketConnection.h"
43#include "iot/mqtt/SubProtocol.h"
44#include "log/Logger.h"
45#include "utils/system/signal.h"
46#include "web/websocket/SubProtocolContext.h"
48#ifndef DOXYGEN_SHOULD_SKIP_THIS
50#include "utils/hexdump.h"
58 template <
typename WSSubProtocolRole>
60 const std::string& name,
61 iot::mqtt::
Mqtt* mqtt)
62 : WSSubProtocolRole(subProtocolContext, name, 0)
76 template <
typename WSSubProtocolRole>
77 std::size_t
SubProtocol<WSSubProtocolRole>::
recv(
char* chunk, std::size_t chunklen) {
78 std::size_t maxReturn = std::min(chunklen,
size);
88 template <
typename WSSubProtocolRole>
89 void SubProtocol<WSSubProtocolRole>::
send(
const char* chunk, std::size_t chunklen) {
90 WSSubProtocolRole::sendMessage(chunk, chunklen);
93 template <
typename WSSubProtocolRole>
95 WSSubProtocolRole::sendClose();
98 template <
typename WSSubProtocolRole>
100 WSSubProtocolRole::sendClose();
103 template <
typename WSSubProtocolRole>
109 template <
typename WSSubProtocolRole>
119 template <
typename WSSubProtocolRole>
121 data.append(std::string(chunk, chunkLen));
124 << std::string(32,
' ').append(utils
::hexDump(std::vector<
char>(chunk, chunk + chunkLen)
, 32
));
127 template <
typename WSSubProtocolRole>
145 template <
typename WSSubProtocolRole>
150 template <
typename WSSubProtocolRole>
156 template <
typename WSSubProtocolRole>
159 LOG(INFO) <<
getSocketConnection()->getConnectionName() <<
" WSMQTT: exit due to '" << strsignal(sig) <<
"' (SIG"
167 template <
typename WSSubProtocolRole>
169 return WSSubProtocolRole::subProtocolContext->getSocketConnection();
virtual std::size_t recv(char *chunk, std::size_t chunklen)=0
std::size_t onReceivedFromPeer()
MqttContext(const MqttContext &)=default
MqttContext & operator=(const MqttContext &)=default
virtual void send(const char *chunk, std::size_t chunklen)=0
virtual core::socket::stream::SocketConnection * getSocketConnection() const =0
virtual void end(bool fatal=false)=0
void onEvent(const utils::Timeval ¤tTime) override
OnReceivedFromPeerEvent(const std::function< void(const utils::Timeval &)> &onReceivedFromPeer)
std::function< void(const utils::Timeval &)> onReceivedFromPeer
void onMessageError(uint16_t errnum) override
bool onSignal(int sig) override
void send(const char *chunk, std::size_t chunklen) override
void onDisconnected() override
void onConnected() override
void end(bool fatal=false) override
core::socket::stream::SocketConnection * getSocketConnection() const override
std::size_t recv(char *chunk, std::size_t chunklen) override
std::vector< char > buffer
OnReceivedFromPeerEvent onReceivedFromPeerEvent
void onMessageData(const char *chunk, std::size_t chunkLen) override
SubProtocol(web::websocket::SubProtocolContext *subProtocolContext, const std::string &name, iot::mqtt::Mqtt *mqtt)
void onMessageEnd() override
void onMessageStart(int opCode) override
~SubProtocol() override=default
std::string sigabbrev_np(int sig)
std::string hexDump(const std::vector< char > &bytes, int prefixLength, bool prefixAtFirstLine)