Rewrite comments and added hudge payload test
This commit is contained in:
@@ -1,14 +1,6 @@
|
||||
#include "TinyMqtt.h"
|
||||
#include <sstream>
|
||||
|
||||
void outstring(const char* prefix, const char*p, uint16_t len)
|
||||
{
|
||||
return;
|
||||
Serial << prefix << "='";
|
||||
while(len--) Serial << (char)*p++;
|
||||
Serial << '\'' << endl;
|
||||
}
|
||||
|
||||
MqttBroker::MqttBroker(uint16_t port)
|
||||
{
|
||||
server = new TcpServer(port);
|
||||
@@ -447,11 +439,9 @@ if (mesg->type() != MqttMessage::Type::PingReq && mesg->type() != MqttMessage::T
|
||||
if (mqtt_flags & FlagWill) // Will topic
|
||||
{
|
||||
mesg->getString(payload, len); // Will Topic
|
||||
outstring("WillTopic", payload, len);
|
||||
payload += len;
|
||||
|
||||
mesg->getString(payload, len); // Will Message
|
||||
outstring("WillMessage", payload, len);
|
||||
payload += len;
|
||||
}
|
||||
// FIXME forgetting credential is allowed (security hole)
|
||||
@@ -468,7 +458,9 @@ if (mesg->type() != MqttMessage::Type::PingReq && mesg->type() != MqttMessage::T
|
||||
payload += len;
|
||||
}
|
||||
|
||||
Serial << "Connected client:" << clientId.c_str() << ", keep alive=" << keep_alive << '.' << endl;
|
||||
#ifdef TINY_MQTT_DEBUG
|
||||
Serial << "Connected client:" << clientId.c_str() << ", keep alive=" << keep_alive << '.' << endl;
|
||||
#endif
|
||||
bclose = false;
|
||||
mqtt_connected=true;
|
||||
{
|
||||
@@ -522,7 +514,6 @@ if (mesg->type() != MqttMessage::Type::PingReq && mesg->type() != MqttMessage::T
|
||||
{
|
||||
mesg->getString(payload, len); // Topic
|
||||
debug( " topic (" << std::string(payload, len) << ')');
|
||||
outstring(" un/subscribes", payload, len);
|
||||
// subscribe(Topic(payload, len));
|
||||
Topic topic(payload, len);
|
||||
payload += len;
|
||||
@@ -602,10 +593,12 @@ if (mesg->type() != MqttMessage::Type::PingReq && mesg->type() != MqttMessage::T
|
||||
};
|
||||
if (bclose)
|
||||
{
|
||||
Serial << "*************** Error msg 0x" << _HEX(mesg->type());
|
||||
mesg->hexdump("-------ERROR ------");
|
||||
dump();
|
||||
Serial << endl;
|
||||
#ifdef TINY_MQTT_DEBUG
|
||||
Serial << "*************** Error msg 0x" << _HEX(mesg->type());
|
||||
mesg->hexdump("-------ERROR ------");
|
||||
dump();
|
||||
Serial << endl;
|
||||
#endif
|
||||
close();
|
||||
}
|
||||
else
|
||||
@@ -722,8 +715,10 @@ void MqttMessage::incoming(char in_byte)
|
||||
break;
|
||||
case Complete:
|
||||
default:
|
||||
Serial << "Spurious " << _HEX(in_byte) << endl;
|
||||
hexdump("spurious");
|
||||
#ifdef TINY_MQTT_DEBUG
|
||||
Serial << "Spurious " << _HEX(in_byte) << endl;
|
||||
hexdump("spurious");
|
||||
#endif
|
||||
reset();
|
||||
break;
|
||||
}
|
||||
@@ -778,6 +773,8 @@ MqttError MqttMessage::sendTo(MqttClient* client)
|
||||
|
||||
void MqttMessage::hexdump(const char* prefix) const
|
||||
{
|
||||
(void)prefix;
|
||||
#ifdef TINY_MQTT_DEBUG
|
||||
uint16_t addr=0;
|
||||
const int bytes_per_row = 8;
|
||||
const char* hex_to_str = " | ";
|
||||
@@ -813,4 +810,5 @@ void MqttMessage::hexdump(const char* prefix) const
|
||||
}
|
||||
|
||||
Serial << endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
// #define TINY_MQTT_DEBUG
|
||||
|
||||
#ifdef TINY_MQTT_DEBUG
|
||||
#define debug(what) { Serial << __LINE__ << ' ' << what << endl; delay(100); }
|
||||
#define debug(what) { Serial << (int)__LINE__ << ' ' << what << endl; delay(100); }
|
||||
#else
|
||||
#define debug(what) {}
|
||||
#endif
|
||||
@@ -160,6 +160,8 @@ class MqttClient
|
||||
void connect(MqttBroker* parent);
|
||||
void connect(std::string broker, uint16_t port, uint16_t keep_alive = 10);
|
||||
|
||||
// TODO it seems that connected returns true in tcp mode even if
|
||||
// no negociation occured (only if tcp link is established)
|
||||
bool connected() { return
|
||||
(parent!=nullptr and client==nullptr) or
|
||||
(client and client->connected()); }
|
||||
@@ -198,23 +200,27 @@ class MqttClient
|
||||
|
||||
void dump(std::string indent="")
|
||||
{
|
||||
uint32_t ms=millis();
|
||||
Serial << indent << "+-- " << '\'' << clientId.c_str() << "' " << (connected() ? " ON " : " OFF");
|
||||
Serial << ", alive=" << alive << '/' << ms << ", ka=" << keep_alive << ' ';
|
||||
Serial << (client && client->connected() ? "" : "dis") << "connected";
|
||||
if (subscriptions.size())
|
||||
{
|
||||
bool c = false;
|
||||
Serial << " [";
|
||||
for(auto s: subscriptions)
|
||||
{
|
||||
if (c) Serial << ", ";
|
||||
Serial << s.str().c_str();
|
||||
c=true;
|
||||
}
|
||||
Serial << ']';
|
||||
}
|
||||
Serial << endl;
|
||||
(void)indent;
|
||||
#ifdef TINY_MQTT_DEBUG
|
||||
uint32_t ms=millis();
|
||||
Serial << indent << "+-- " << '\'' << clientId.c_str() << "' " << (connected() ? " ON " : " OFF");
|
||||
Serial << ", alive=" << alive << '/' << ms << ", ka=" << keep_alive << ' ';
|
||||
Serial << (client && client->connected() ? "" : "dis") << "connected";
|
||||
if (subscriptions.size())
|
||||
{
|
||||
bool c = false;
|
||||
Serial << " [";
|
||||
for(auto s: subscriptions)
|
||||
(void)indent;
|
||||
{
|
||||
if (c) Serial << ", ";
|
||||
Serial << s.str().c_str();
|
||||
c=true;
|
||||
}
|
||||
Serial << ']';
|
||||
}
|
||||
Serial << endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
static long counter; // Number of processed messages
|
||||
@@ -235,7 +241,7 @@ class MqttClient
|
||||
MqttError publishIfSubscribed(const Topic& topic, MqttMessage& msg);
|
||||
|
||||
void clientAlive(uint32_t more_seconds);
|
||||
void processMessage(const MqttMessage* message);
|
||||
void processMessage(MqttMessage* message);
|
||||
|
||||
bool mqtt_connected = false;
|
||||
char mqtt_flags;
|
||||
|
||||
Reference in New Issue
Block a user