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) void LGwProxy::checkPingReq(void)
{ {
if ( _isQoSMinus1Mode )
{
return;
}
uint8_t msg[2]; uint8_t msg[2];
msg[0] = 0x02; msg[0] = 0x02;
msg[1] = MQTTSN_TYPE_PINGREQ; 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) void LPublishManager::publish(uint16_t topicId, uint8_t* payload, uint16_t len, uint8_t qos, bool retain)
{ {
uint16_t msgId = 0; uint16_t msgId = 0;
if ( qos > 0 ) if ( qos > 0 && qos < 3 )
{ {
msgId = theClient->getGwProxy()->getNextMsgId(); msgId = theClient->getGwProxy()->getNextMsgId();
} }
@@ -148,7 +148,7 @@ void LPublishManager::sendPublish(PubElement* elm)
theClient->getGwProxy()->writeMsg(msg); theClient->getGwProxy()->writeMsg(msg);
theClient->getGwProxy()->setPingReqTimer(); 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); DISPLAY("\033[0m\033[0;32m Topic \"%s\" was Published. \033[0m\033[0;37m\n\n", elm->topicName);
remove(elm); // PUBLISH Done remove(elm); // PUBLISH Done

View File

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

View File

@@ -89,7 +89,7 @@ void MQTTSNPublishHandler::handlePublish(Client* client, MQTTSNPacket* packet)
if( !topic && qos == 3 ) 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; return;
} }
@@ -123,6 +123,12 @@ void MQTTSNPublishHandler::handlePublish(Client* client, MQTTSNPacket* packet)
Event* ev1 = new Event(); Event* ev1 = new Event();
ev1->setBrokerSendEvent(client, publish); ev1->setBrokerSendEvent(client, publish);
_gateway->getBrokerSendQue()->post(ev1); _gateway->getBrokerSendQue()->post(ev1);
/* reset PINGREQ of ClientProxy */
if ( qos == 3 )
{
_gateway->getClientProxy()->resetPingTimer();
}
} }
void MQTTSNPublishHandler::handlePuback(Client* client, MQTTSNPacket* packet) void MQTTSNPublishHandler::handlePuback(Client* client, MQTTSNPacket* packet)

View File

@@ -17,6 +17,6 @@
#ifndef MQTTSNGWVERSION_H_IN_ #ifndef MQTTSNGWVERSION_H_IN_
#define 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_ */ #endif /* MQTTSNGWVERSION_H_IN_ */

View File

@@ -329,7 +329,7 @@ void Gateway::run(void)
} }
if ( _params.qosMinusClientListName ) 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(" SensorN/W: %s\n", _sensorNetwork.getDescription());
WRITELOG(" Broker: %s : %s, %s\n", _params.brokerName, _params.port, _params.portSecure); WRITELOG(" Broker: %s : %s, %s\n", _params.brokerName, _params.port, _params.portSecure);