77
88WebSocketClient::WebSocketClient (Client& aClient, const char * aServerName, uint16_t aServerPort)
99 : HttpClient(aClient, aServerName, aServerPort),
10+ iTxStarted(false ),
1011 iRxSize(0 )
1112{
1213}
1314
1415WebSocketClient::WebSocketClient (Client& aClient, const String& aServerName, uint16_t aServerPort)
1516 : HttpClient(aClient, aServerName, aServerPort),
17+ iTxStarted(false ),
1618 iRxSize(0 )
1719{
1820}
1921
2022WebSocketClient::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
7275int 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
8090int 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
131148size_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 {
0 commit comments