Commit 01167291 authored by Justin Brzozoski's avatar Justin Brzozoski Committed by Jukka Rissanen
Browse files

net: mqtt: Maintain count of PINGREQ awaiting response



Maintain a simple count of how many PINGREQ have been sent for the
current connection that have not had a corresponding PINGRESP.  Nothing
is done with this information internal to the MQTT driver, but it is
exposed to the application layer to monitor as desired.

Signed-off-by: default avatarJustin Brzozoski <justin.brzozoski@signal-fire.com>
parent 2d5c6b4a
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -499,6 +499,9 @@ struct mqtt_client {
	/** MQTT protocol version. */
	u8_t protocol_version;

	/** Unanswered PINGREQ count on this connection. */
	s8_t unacked_ping;

	/** Will retain flag, 1 if will message shall be retained persistently.
	 */
	u8_t will_retain : 1;
+9 −0
Original line number Diff line number Diff line
@@ -111,6 +111,9 @@ static int client_connect(struct mqtt_client *client)

	client->internal.last_activity = mqtt_sys_tick_in_ms_get();

	/* Reset the unanswered ping count for a new connection */
	client->unacked_ping = 0;

	MQTT_TRC("Connect completed");

	return 0;
@@ -548,6 +551,12 @@ int mqtt_ping(struct mqtt_client *client)

	err_code = client_write(client, packet.cur, packet.end - packet.cur);

	if (client->unacked_ping >= INT8_MAX) {
		MQTT_TRC("PING count overflow!");
	} else {
		client->unacked_ping++;
	}

error:
	mqtt_mutex_unlock(client);

+7 −0
Original line number Diff line number Diff line
@@ -120,6 +120,13 @@ static int mqtt_handle_packet(struct mqtt_client *client,
	case MQTT_PKT_TYPE_PINGRSP:
		MQTT_TRC("[CID %p]: Received MQTT_PKT_TYPE_PINGRSP!", client);

		if (client->unacked_ping <= 0) {
			MQTT_TRC("Unexpected PINGRSP");
			client->unacked_ping = 0;
		} else {
			client->unacked_ping--;
		}

		/* No notification of Ping response to application. */
		notify_event = false;
		break;