7
7
8
8
WebSocketClient::WebSocketClient (Client& aClient, const char * aServerName, uint16_t aServerPort)
9
9
: HttpClient(aClient, aServerName, aServerPort),
10
+ iTxStarted(false ),
10
11
iRxSize(0 )
11
12
{
12
13
}
13
14
14
15
WebSocketClient::WebSocketClient (Client& aClient, const String& aServerName, uint16_t aServerPort)
15
16
: HttpClient(aClient, aServerName, aServerPort),
17
+ iTxStarted(false ),
16
18
iRxSize(0 )
17
19
{
18
20
}
19
21
20
22
WebSocketClient::WebSocketClient (Client& aClient, const IPAddress& aServerAddress, uint16_t aServerPort)
21
23
: HttpClient(aClient, aServerAddress, aServerPort),
24
+ iTxStarted(false ),
22
25
iRxSize(0 )
23
26
{
24
27
}
@@ -71,6 +74,13 @@ int WebSocketClient::begin(const String& aPath)
71
74
72
75
int WebSocketClient::beginMessage (int aType)
73
76
{
77
+ if (iTxStarted)
78
+ {
79
+ // fail TX already started
80
+ return 1 ;
81
+ }
82
+
83
+ iTxStarted = true ;
74
84
iTxMessageType = (aType & 0xf );
75
85
iTxSize = 0 ;
76
86
@@ -79,6 +89,12 @@ int WebSocketClient::beginMessage(int aType)
79
89
80
90
int WebSocketClient::endMessage ()
81
91
{
92
+ if (!iTxStarted)
93
+ {
94
+ // fail TX not started
95
+ return 1 ;
96
+ }
97
+
82
98
// send FIN + the message type (opcode)
83
99
HttpClient::write (0x80 | iTxMessageType);
84
100
@@ -121,11 +137,12 @@ int WebSocketClient::endMessage()
121
137
iTxBuffer[i] ^= maskKey[i % sizeof (maskKey)];
122
138
}
123
139
124
- int txSize = iTxSize;
140
+ size_t txSize = iTxSize;
125
141
142
+ iTxStarted = false ;
126
143
iTxSize = 0 ;
127
144
128
- return HttpClient::write (iTxBuffer, txSize);
145
+ return ( HttpClient::write (iTxBuffer, txSize) == txSize) ? 0 : 1 ;
129
146
}
130
147
131
148
size_t WebSocketClient::write (uint8_t aByte)
@@ -141,6 +158,12 @@ size_t WebSocketClient::write(const uint8_t *aBuffer, size_t aSize)
141
158
return HttpClient::write (aBuffer, aSize);
142
159
}
143
160
161
+ if (!iTxStarted)
162
+ {
163
+ // fail TX not started
164
+ return 0 ;
165
+ }
166
+
144
167
// check if the write size, fits in the buffer
145
168
if ((iTxSize + aSize) > sizeof (iTxBuffer))
146
169
{
0 commit comments