mirror of
https://github.com/eclipse/paho.mqtt-sn.embedded-c.git
synced 2025-12-13 07:26:52 +01:00
BugFix: Wild card of Topic + and # handling.
Signed-off-by: tomoaki <tomoaki@tomy-tech.com>
This commit is contained in:
@@ -49,6 +49,7 @@ void MQTTGWPublishHandler::handlePublish(Client* client, MQTTGWPacket* packet)
|
||||
|
||||
/* create MQTTSN_topicid */
|
||||
MQTTSN_topicid topicId;
|
||||
uint16_t id = 0;
|
||||
|
||||
if (pub.topiclen == 2)
|
||||
{
|
||||
@@ -61,11 +62,14 @@ void MQTTGWPublishHandler::handlePublish(Client* client, MQTTGWPacket* packet)
|
||||
topicId.type = MQTTSN_TOPIC_TYPE_NORMAL;
|
||||
topicId.data.long_.len = pub.topiclen;
|
||||
topicId.data.long_.name = pub.topic;
|
||||
unsigned short id = client->getTopics()->getTopicId(&topicId);
|
||||
topicId.data.id = id;
|
||||
id = client->getTopics()->getTopicId(&topicId);
|
||||
}
|
||||
|
||||
if (topicId.data.id == 0)
|
||||
if (id > 0)
|
||||
{
|
||||
topicId.data.id = id;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* This message might be subscribed with wild card. */
|
||||
Topic* topic = client->getTopics()->match(&topicId);
|
||||
@@ -85,7 +89,7 @@ void MQTTGWPublishHandler::handlePublish(Client* client, MQTTGWPacket* packet)
|
||||
|
||||
/* add the Topic and get a TopicId */
|
||||
topic = client->getTopics()->add(&topicId);
|
||||
uint16_t id = topic->getTopicId();
|
||||
id = topic->getTopicId();
|
||||
|
||||
if (id > 0)
|
||||
{
|
||||
|
||||
@@ -136,7 +136,7 @@ void BrokerRecvTask::run(void)
|
||||
client->getNetwork()->close();
|
||||
delete packet;
|
||||
|
||||
/* delete client when the client is not authorized on & session is clean */
|
||||
/* delete client when the client is not authorized & session is clean */
|
||||
_gateway->getClientList()->erase(client);
|
||||
|
||||
if ( client )
|
||||
|
||||
@@ -830,7 +830,7 @@ Topics::~Topics()
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t Topics::getTopicId(MQTTSN_topicid* topicid)
|
||||
uint16_t Topics::getTopicId(const MQTTSN_topicid* topicid)
|
||||
{
|
||||
if (topicid->type != MQTTSN_TOPIC_TYPE_NORMAL)
|
||||
{
|
||||
@@ -863,7 +863,7 @@ Topic* Topics::getTopic(uint16_t id)
|
||||
return 0;
|
||||
}
|
||||
|
||||
Topic* Topics::getTopic(MQTTSN_topicid* topicid)
|
||||
Topic* Topics::getTopic(const MQTTSN_topicid* topicid)
|
||||
{
|
||||
Topic* p = _first;
|
||||
while (p)
|
||||
@@ -877,7 +877,7 @@ Topic* Topics::getTopic(MQTTSN_topicid* topicid)
|
||||
return 0;
|
||||
}
|
||||
|
||||
Topic* Topics::add(MQTTSN_topicid* topicid)
|
||||
Topic* Topics::add(const MQTTSN_topicid* topicid)
|
||||
{
|
||||
Topic* topic;
|
||||
uint16_t id = 0;
|
||||
@@ -901,7 +901,7 @@ Topic* Topics::add(MQTTSN_topicid* topicid)
|
||||
}
|
||||
|
||||
|
||||
Topic* Topics::add(string* topicName)
|
||||
Topic* Topics::add(const string* topicName)
|
||||
{
|
||||
Topic* topic = 0;
|
||||
|
||||
@@ -942,7 +942,7 @@ uint16_t Topics::getNextTopicId()
|
||||
return ++_nextTopicId == 0xffff ? _nextTopicId += 2 : _nextTopicId;
|
||||
}
|
||||
|
||||
Topic* Topics::match(MQTTSN_topicid* topicid)
|
||||
Topic* Topics::match(const MQTTSN_topicid* topicid)
|
||||
{
|
||||
if (topicid->type != MQTTSN_TOPIC_TYPE_NORMAL)
|
||||
{
|
||||
|
||||
@@ -127,13 +127,13 @@ class Topics
|
||||
public:
|
||||
Topics();
|
||||
~Topics();
|
||||
Topic* add(MQTTSN_topicid* topicid);
|
||||
Topic* add(string* topic);
|
||||
uint16_t getTopicId(MQTTSN_topicid* topic);
|
||||
Topic* add(const MQTTSN_topicid* topicid);
|
||||
Topic* add(const string* topic);
|
||||
uint16_t getTopicId(const MQTTSN_topicid* topic);
|
||||
uint16_t getNextTopicId();
|
||||
Topic* getTopic(uint16_t topicId);
|
||||
Topic* getTopic(MQTTSN_topicid* topicid);
|
||||
Topic* match(MQTTSN_topicid* topicid);
|
||||
Topic* getTopic(const MQTTSN_topicid* topicid);
|
||||
Topic* match(const MQTTSN_topicid* topicid);
|
||||
|
||||
private:
|
||||
uint16_t _nextTopicId;
|
||||
|
||||
Reference in New Issue
Block a user