Skip to content

Commit f99517c

Browse files
committed
Correct endMessage return value, add check for TX state
1 parent 00cd68f commit f99517c

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

WebSocketClient.cpp

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,21 @@
77

88
WebSocketClient::WebSocketClient(Client& aClient, const char* aServerName, uint16_t aServerPort)
99
: HttpClient(aClient, aServerName, aServerPort),
10+
iTxStarted(false),
1011
iRxSize(0)
1112
{
1213
}
1314

1415
WebSocketClient::WebSocketClient(Client& aClient, const String& aServerName, uint16_t aServerPort)
1516
: HttpClient(aClient, aServerName, aServerPort),
17+
iTxStarted(false),
1618
iRxSize(0)
1719
{
1820
}
1921

2022
WebSocketClient::WebSocketClient(Client& aClient, const IPAddress& aServerAddress, uint16_t aServerPort)
2123
: HttpClient(aClient, aServerAddress, aServerPort),
24+
iTxStarted(false),
2225
iRxSize(0)
2326
{
2427
}
@@ -71,6 +74,13 @@ int WebSocketClient::begin(const String& aPath)
7174

7275
int WebSocketClient::beginMessage(int aType)
7376
{
77+
if (iTxStarted)
78+
{
79+
// fail TX already started
80+
return 1;
81+
}
82+
83+
iTxStarted = true;
7484
iTxMessageType = (aType & 0xf);
7585
iTxSize = 0;
7686

@@ -79,6 +89,12 @@ int WebSocketClient::beginMessage(int aType)
7989

8090
int WebSocketClient::endMessage()
8191
{
92+
if (!iTxStarted)
93+
{
94+
// fail TX not started
95+
return 1;
96+
}
97+
8298
// send FIN + the message type (opcode)
8399
HttpClient::write(0x80 | iTxMessageType);
84100

@@ -121,11 +137,12 @@ int WebSocketClient::endMessage()
121137
iTxBuffer[i] ^= maskKey[i % sizeof(maskKey)];
122138
}
123139

124-
int txSize = iTxSize;
140+
size_t txSize = iTxSize;
125141

142+
iTxStarted = false;
126143
iTxSize = 0;
127144

128-
return HttpClient::write(iTxBuffer, txSize);
145+
return (HttpClient::write(iTxBuffer, txSize) == txSize) ? 0 : 1;
129146
}
130147

131148
size_t WebSocketClient::write(uint8_t aByte)
@@ -141,6 +158,12 @@ size_t WebSocketClient::write(const uint8_t *aBuffer, size_t aSize)
141158
return HttpClient::write(aBuffer, aSize);
142159
}
143160

161+
if (!iTxStarted)
162+
{
163+
// fail TX not started
164+
return 0;
165+
}
166+
144167
// check if the write size, fits in the buffer
145168
if ((iTxSize + aSize) > sizeof(iTxBuffer))
146169
{

WebSocketClient.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ class WebSocketClient : public HttpClient
8484
void flushRx();
8585

8686
private:
87+
bool iTxStarted;
8788
uint8_t iTxMessageType;
8889
uint8_t iTxBuffer[128];
8990
uint64_t iTxSize;

0 commit comments

Comments
 (0)