Signed-off-by: tomoaki <tomoaki@tomy-tech.com>
This commit is contained in:
tomoaki
2021-05-18 20:55:48 +09:00
parent 5fbd32151e
commit 15c527e073

View File

@@ -102,16 +102,18 @@ void MQTTGWPublishHandler::handlePublish(Client* client, MQTTGWPacket* packet)
topicId.type = tp->getType(); topicId.type = tp->getType();
topicId.data.long_.len = pub.topiclen; topicId.data.long_.len = pub.topiclen;
topicId.data.long_.name = pub.topic; topicId.data.long_.name = pub.topic;
topicId.data.id = tp->getTopicId();
} }
else else
{ {
/* This message might be subscribed with wild card. */ /* This message might be subscribed with wild card or not cleanSession*/
topicId.type = MQTTSN_TOPIC_TYPE_NORMAL; topicId.type = MQTTSN_TOPIC_TYPE_NORMAL;
Topic* topic = client->getTopics()->match(&topicId); Topic* topic = client->getTopics()->match(&topicId);
if (topic == nullptr)
if (topic == nullptr && client->isCleanSession())
{ {
WRITELOG(" Invalid Topic. PUBLISH message is canceled.\n"); WRITELOG(
"%sMQTTGWPublishHandler Invalid Topic. PUBLISH message is discarded.%s\n",
ERRMSG_HEADER, ERRMSG_FOOTER);
if (pub.header.bits.qos == 1) if (pub.header.bits.qos == 1)
{ {
replyACK(client, &pub, PUBACK); replyACK(client, &pub, PUBACK);
@@ -125,16 +127,24 @@ void MQTTGWPublishHandler::handlePublish(Client* client, MQTTGWPacket* packet)
return; return;
} }
if (topic == nullptr)
{
topicId.type = MQTTSN_TOPIC_TYPE_NORMAL;
topicId.data.long_.len = pub.topiclen;
topicId.data.long_.name = pub.topic;
topicId.data.id = 0;
}
/* add the Topic and get a TopicId */ /* add the Topic and get a TopicId */
topic = client->getTopics()->add(&topicId); topic = client->getTopics()->add(&topicId);
if (topic == nullptr) if (topic == nullptr)
{ {
WRITELOG("%sMQTTGWPublishHandler Can't Add a Topic. MAX_TOPIC_PAR_CLIENT is exceeded.%s\n", WRITELOG(
"%sMQTTGWPublishHandler Can't Add a Topic. MAX_TOPIC_PAR_CLIENT is exceeded. PUBLISH message is discarded.%s\n",
ERRMSG_HEADER, ERRMSG_FOOTER); ERRMSG_HEADER, ERRMSG_FOOTER);
delete snPacket; delete snPacket;
return; return;
} }
id = topic->getTopicId(); id = topic->getTopicId();
if (id > 0) if (id > 0)
{ {
@@ -165,7 +175,8 @@ void MQTTGWPublishHandler::handlePublish(Client* client, MQTTGWPacket* packet)
} }
else else
{ {
WRITELOG("%sMQTTGWPublishHandler Can't create a Topic.%s\n", WRITELOG(
"%sMQTTGWPublishHandler Can't create a Topic. PUBLISH message is discarded.%s\n",
ERRMSG_HEADER, ERRMSG_FOOTER); ERRMSG_HEADER, ERRMSG_FOOTER);
delete snPacket; delete snPacket;
return; return;