mirror of
https://github.com/eclipse/paho.mqtt-sn.embedded-c.git
synced 2025-12-13 23:46:51 +01:00
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:
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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_ */
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user