BugFix: PINGREQ timeout of ClientProxy

reset PINGREQ timer of ClientProxy when QoS-1 PUBLISH is sent.

Signed-off-by: tomoaki <tomoaki@tomy-tech.com>
This commit is contained in:
tomoaki
2018-07-31 06:20:57 +09:00
parent 4932d2d0ee
commit 79f6aef8e4
6 changed files with 345 additions and 333 deletions

View File

@@ -586,6 +586,11 @@ uint16_t LGwProxy::getNextMsgId(void)
void LGwProxy::checkPingReq(void)
{
if ( _isQoSMinus1Mode )
{
return;
}
uint8_t msg[2];
msg[0] = 0x02;
msg[1] = MQTTSN_TYPE_PINGREQ;

View File

@@ -100,7 +100,7 @@ void LPublishManager::publish(uint16_t topicId, Payload* payload, uint8_t qos, b
void LPublishManager::publish(uint16_t topicId, uint8_t* payload, uint16_t len, uint8_t qos, bool retain)
{
uint16_t msgId = 0;
if ( qos > 0 )
if ( qos > 0 && qos < 3 )
{
msgId = theClient->getGwProxy()->getNextMsgId();
}
@@ -148,7 +148,7 @@ void LPublishManager::sendPublish(PubElement* elm)
theClient->getGwProxy()->writeMsg(msg);
theClient->getGwProxy()->setPingReqTimer();
if ((elm->flag & 0x60) == MQTTSN_FLAG_QOS_0)
if ( ((elm->flag & 0x60) == MQTTSN_FLAG_QOS_0 ) || ( (elm->flag & 0x60) == MQTTSN_FLAG_QOS_M1) )
{
DISPLAY("\033[0m\033[0;32m Topic \"%s\" was Published. \033[0m\033[0;37m\n\n", elm->topicName);
remove(elm); // PUBLISH Done

View File

@@ -25,7 +25,8 @@
using namespace MQTTSNGW;
#define RESPONSE_DURATION 900 // Secs
#define KEEPALIVE_DURATION 900 // Secs
#define RESPONSE_DURATION 10 // Secs
/*
* Class ClientProxyElement
@@ -198,7 +199,7 @@ void ClientProxy::checkConnection(void)
_responseTimer.start(RESPONSE_DURATION * 1000UL);
MQTTSNPacket_connectData options = MQTTSNPacket_connectData_initializer;
options.clientID.cstring = _client->getClientId();
options.duration = RESPONSE_DURATION;
options.duration = KEEPALIVE_DURATION;
MQTTSNPacket* packet = new MQTTSNPacket();
packet->setCONNECT(&options);
@@ -221,7 +222,7 @@ void ClientProxy::checkConnection(void)
void ClientProxy::resetPingTimer(void)
{
_keepAliveTimer.start(RESPONSE_DURATION * 1000UL);
_keepAliveTimer.start(KEEPALIVE_DURATION * 1000UL);
}
void ClientProxy::send(MQTTSNPacket* packet)

View File

@@ -89,7 +89,7 @@ void MQTTSNPublishHandler::handlePublish(Client* client, MQTTSNPacket* packet)
if( !topic && qos == 3 )
{
WRITELOG("%s Invali TopicId.%s\n", ERRMSG_HEADER, client->getClientId(), ERRMSG_FOOTER);
WRITELOG("%s Invali TopicId.%s %s\n", ERRMSG_HEADER, client->getClientId(), ERRMSG_FOOTER);
return;
}
@@ -123,6 +123,12 @@ void MQTTSNPublishHandler::handlePublish(Client* client, MQTTSNPacket* packet)
Event* ev1 = new Event();
ev1->setBrokerSendEvent(client, publish);
_gateway->getBrokerSendQue()->post(ev1);
/* reset PINGREQ of ClientProxy */
if ( qos == 3 )
{
_gateway->getClientProxy()->resetPingTimer();
}
}
void MQTTSNPublishHandler::handlePuback(Client* client, MQTTSNPacket* packet)

View File

@@ -17,6 +17,6 @@
#ifndef MQTTSNGWVERSION_H_IN_
#define MQTTSNGWVERSION_H_IN_
#define PAHO_GATEWAY_VERSION "1.2.0"
#define PAHO_GATEWAY_VERSION "1.2.1"
#endif /* MQTTSNGWVERSION_H_IN_ */

View File

@@ -329,7 +329,7 @@ void Gateway::run(void)
}
if ( _params.qosMinusClientListName )
{
WRITELOG(" QoS-1: %s\n", _params.qosMinusClientListName);
WRITELOG(" QoS-1File: %s\n", _params.qosMinusClientListName);
}
WRITELOG(" SensorN/W: %s\n", _sensorNetwork.getDescription());
WRITELOG(" Broker: %s : %s, %s\n", _params.brokerName, _params.port, _params.portSecure);