Skip to content

Commit 6a7ecfb

Browse files
committed
Adding API to check if a pong has not been received since last ping
1 parent 4045c85 commit 6a7ecfb

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

src/WebSocketClient.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ int WebSocketClient::begin(const char* aPath)
6161
}
6262
}
6363

64+
awaitingPong = false;
65+
6466
iRxSize = 0;
6567

6668
// status code of 101 means success
@@ -257,6 +259,7 @@ int WebSocketClient::parseMessage()
257259
}
258260
else if (TYPE_PONG == messageType())
259261
{
262+
awaitingPong = false;
260263
flushRx();
261264
iRxSize = 0;
262265
}
@@ -302,11 +305,18 @@ int WebSocketClient::ping()
302305
pingData[i] = random(0xff);
303306
}
304307

308+
awaitingPong = true;
309+
305310
beginMessage(TYPE_PING);
306311
write(pingData, sizeof(pingData));
307312
return endMessage();
308313
}
309314

315+
bool WebSocketClient::isAwaitingPong()
316+
{
317+
return awaitingPong;
318+
}
319+
310320
int WebSocketClient::available()
311321
{
312322
if (iState < eReadingBody)

src/WebSocketClient.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,11 @@ class WebSocketClient : public HttpClient
6868
*/
6969
int ping();
7070

71+
/** Check if a pong has not yet been seen since last ping
72+
@return true if awaiting a pong, otherwise false
73+
*/
74+
bool isAwaitingPong();
75+
7176
// Inherited from Print
7277
virtual size_t write(uint8_t aByte);
7378
virtual size_t write(const uint8_t *aBuffer, size_t aSize);
@@ -94,6 +99,8 @@ class WebSocketClient : public HttpClient
9499
bool iRxMasked;
95100
int iRxMaskIndex;
96101
uint8_t iRxMaskKey[4];
102+
103+
bool awaitingPong;
97104
};
98105

99106
#endif

0 commit comments

Comments
 (0)