mirror of
https://github.com/arduino-libraries/ArduinoHttpClient.git
synced 2025-04-19 21:22:15 +03:00
Correct endMessage return value, add check for TX state
This commit is contained in:
parent
00cd68f52f
commit
f99517c3e5
@ -7,18 +7,21 @@
|
|||||||
|
|
||||||
WebSocketClient::WebSocketClient(Client& aClient, const char* aServerName, uint16_t aServerPort)
|
WebSocketClient::WebSocketClient(Client& aClient, const char* aServerName, uint16_t aServerPort)
|
||||||
: HttpClient(aClient, aServerName, aServerPort),
|
: HttpClient(aClient, aServerName, aServerPort),
|
||||||
|
iTxStarted(false),
|
||||||
iRxSize(0)
|
iRxSize(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
WebSocketClient::WebSocketClient(Client& aClient, const String& aServerName, uint16_t aServerPort)
|
WebSocketClient::WebSocketClient(Client& aClient, const String& aServerName, uint16_t aServerPort)
|
||||||
: HttpClient(aClient, aServerName, aServerPort),
|
: HttpClient(aClient, aServerName, aServerPort),
|
||||||
|
iTxStarted(false),
|
||||||
iRxSize(0)
|
iRxSize(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
WebSocketClient::WebSocketClient(Client& aClient, const IPAddress& aServerAddress, uint16_t aServerPort)
|
WebSocketClient::WebSocketClient(Client& aClient, const IPAddress& aServerAddress, uint16_t aServerPort)
|
||||||
: HttpClient(aClient, aServerAddress, aServerPort),
|
: HttpClient(aClient, aServerAddress, aServerPort),
|
||||||
|
iTxStarted(false),
|
||||||
iRxSize(0)
|
iRxSize(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -71,6 +74,13 @@ int WebSocketClient::begin(const String& aPath)
|
|||||||
|
|
||||||
int WebSocketClient::beginMessage(int aType)
|
int WebSocketClient::beginMessage(int aType)
|
||||||
{
|
{
|
||||||
|
if (iTxStarted)
|
||||||
|
{
|
||||||
|
// fail TX already started
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
iTxStarted = true;
|
||||||
iTxMessageType = (aType & 0xf);
|
iTxMessageType = (aType & 0xf);
|
||||||
iTxSize = 0;
|
iTxSize = 0;
|
||||||
|
|
||||||
@ -79,6 +89,12 @@ int WebSocketClient::beginMessage(int aType)
|
|||||||
|
|
||||||
int WebSocketClient::endMessage()
|
int WebSocketClient::endMessage()
|
||||||
{
|
{
|
||||||
|
if (!iTxStarted)
|
||||||
|
{
|
||||||
|
// fail TX not started
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
// send FIN + the message type (opcode)
|
// send FIN + the message type (opcode)
|
||||||
HttpClient::write(0x80 | iTxMessageType);
|
HttpClient::write(0x80 | iTxMessageType);
|
||||||
|
|
||||||
@ -121,11 +137,12 @@ int WebSocketClient::endMessage()
|
|||||||
iTxBuffer[i] ^= maskKey[i % sizeof(maskKey)];
|
iTxBuffer[i] ^= maskKey[i % sizeof(maskKey)];
|
||||||
}
|
}
|
||||||
|
|
||||||
int txSize = iTxSize;
|
size_t txSize = iTxSize;
|
||||||
|
|
||||||
|
iTxStarted = false;
|
||||||
iTxSize = 0;
|
iTxSize = 0;
|
||||||
|
|
||||||
return HttpClient::write(iTxBuffer, txSize);
|
return (HttpClient::write(iTxBuffer, txSize) == txSize) ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t WebSocketClient::write(uint8_t aByte)
|
size_t WebSocketClient::write(uint8_t aByte)
|
||||||
@ -141,6 +158,12 @@ size_t WebSocketClient::write(const uint8_t *aBuffer, size_t aSize)
|
|||||||
return HttpClient::write(aBuffer, aSize);
|
return HttpClient::write(aBuffer, aSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!iTxStarted)
|
||||||
|
{
|
||||||
|
// fail TX not started
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// check if the write size, fits in the buffer
|
// check if the write size, fits in the buffer
|
||||||
if ((iTxSize + aSize) > sizeof(iTxBuffer))
|
if ((iTxSize + aSize) > sizeof(iTxBuffer))
|
||||||
{
|
{
|
||||||
|
@ -84,6 +84,7 @@ private:
|
|||||||
void flushRx();
|
void flushRx();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool iTxStarted;
|
||||||
uint8_t iTxMessageType;
|
uint8_t iTxMessageType;
|
||||||
uint8_t iTxBuffer[128];
|
uint8_t iTxBuffer[128];
|
||||||
uint64_t iTxSize;
|
uint64_t iTxSize;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user