From 450ca76a7408a2d8c90256955ba4930df0f82456 Mon Sep 17 00:00:00 2001 From: Markus Sattler Date: Sat, 20 Feb 2016 12:27:19 +0100 Subject: [PATCH] add return value to all send functions --- src/WebSockets.cpp | 21 ++++++++---- src/WebSockets.h | 2 +- src/WebSocketsClient.cpp | 32 +++++++++-------- src/WebSocketsClient.h | 14 ++++---- src/WebSocketsServer.cpp | 74 ++++++++++++++++++++++++---------------- src/WebSocketsServer.h | 28 +++++++-------- 6 files changed, 99 insertions(+), 72 deletions(-) diff --git a/src/WebSockets.cpp b/src/WebSockets.cpp index 4e3aaab..3b18344 100644 --- a/src/WebSockets.cpp +++ b/src/WebSockets.cpp @@ -77,17 +77,18 @@ void WebSockets::clientDisconnect(WSclient_t * client, uint16_t code, char * rea * @param mask bool add dummy mask to the frame (needed for web browser) * @param fin bool can be used to send data in more then one frame (set fin on the last frame) * @param headerToPayload bool set true if the payload has reserved 14 Byte at the beginning to dynamically add the Header (payload neet to be in RAM!) + * @return true if ok */ -void WebSockets::sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * payload, size_t length, bool mask, bool fin, bool headerToPayload) { +bool WebSockets::sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * payload, size_t length, bool mask, bool fin, bool headerToPayload) { if(client->tcp && !client->tcp->connected()) { DEBUG_WEBSOCKETS("[WS][%d][sendFrame] not Connected!?\n", client->num); - return; + return false; } if(client->status != WSC_CONNECTED) { DEBUG_WEBSOCKETS("[WS][%d][sendFrame] not in WSC_CONNECTED state!?\n", client->num); - return; + return false; } DEBUG_WEBSOCKETS("[WS][%d][sendFrame] ------- send massage frame -------\n", client->num); @@ -104,6 +105,7 @@ void WebSockets::sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * pay uint8_t * headerPtr; uint8_t * payloadPtr = payload; bool useInternBuffer = false; + bool ret = true; // calculate header Size if(length < 126) { @@ -231,14 +233,20 @@ void WebSockets::sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * pay // header has be added to payload // payload is forced to reserved 14 Byte but we may not need all based on the length and mask settings // offset in payload is calculatetd 14 - headerSize - client->tcp->write(&payloadPtr[(WEBSOCKETS_MAX_HEADER_SIZE - headerSize)], (length + headerSize)); + if(client->tcp->write(&payloadPtr[(WEBSOCKETS_MAX_HEADER_SIZE - headerSize)], (length + headerSize)) != (length + headerSize)) { + ret = false; + } } else { // send header - client->tcp->write(&buffer[0], headerSize); + if(client->tcp->write(&buffer[0], headerSize) != headerSize) { + ret = false; + } if(payloadPtr && length > 0) { // send payload - client->tcp->write(&payloadPtr[0], length); + if(client->tcp->write(&payloadPtr[0], length) != length) { + ret = false; + } } } @@ -250,6 +258,7 @@ void WebSockets::sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * pay } #endif + return ret; } /** diff --git a/src/WebSockets.h b/src/WebSockets.h index df1211e..dbca2b3 100644 --- a/src/WebSockets.h +++ b/src/WebSockets.h @@ -204,7 +204,7 @@ class WebSockets { virtual void messageRecived(WSclient_t * client, WSopcode_t opcode, uint8_t * payload, size_t length); void clientDisconnect(WSclient_t * client, uint16_t code, char * reason = NULL, size_t reasonLen = 0); - void sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * payload = NULL, size_t length = 0, bool mask = false, bool fin = true, bool headerToPayload = false); + bool sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * payload = NULL, size_t length = 0, bool mask = false, bool fin = true, bool headerToPayload = false); void headerDone(WSclient_t * client); diff --git a/src/WebSocketsClient.cpp b/src/WebSocketsClient.cpp index 0999f49..fca918c 100644 --- a/src/WebSocketsClient.cpp +++ b/src/WebSocketsClient.cpp @@ -151,30 +151,32 @@ void WebSocketsClient::onEvent(WebSocketClientEvent cbEvent) { * @param payload uint8_t * * @param length size_t * @param headerToPayload bool (see sendFrame for more details) + * @return true if ok */ -void WebSocketsClient::sendTXT(uint8_t * payload, size_t length, bool headerToPayload) { +bool WebSocketsClient::sendTXT(uint8_t * payload, size_t length, bool headerToPayload) { if(length == 0) { length = strlen((const char *) payload); } if(clientIsConnected(&_client)) { - sendFrame(&_client, WSop_text, payload, length, true, true, headerToPayload); + return sendFrame(&_client, WSop_text, payload, length, true, true, headerToPayload); } + return false; } -void WebSocketsClient::sendTXT(const uint8_t * payload, size_t length) { - sendTXT((uint8_t *) payload, length); +bool WebSocketsClient::sendTXT(const uint8_t * payload, size_t length) { + return sendTXT((uint8_t *) payload, length); } -void WebSocketsClient::sendTXT(char * payload, size_t length, bool headerToPayload) { - sendTXT((uint8_t *) payload, length, headerToPayload); +bool WebSocketsClient::sendTXT(char * payload, size_t length, bool headerToPayload) { + return sendTXT((uint8_t *) payload, length, headerToPayload); } -void WebSocketsClient::sendTXT(const char * payload, size_t length) { - sendTXT((uint8_t *) payload, length); +bool WebSocketsClient::sendTXT(const char * payload, size_t length) { + return sendTXT((uint8_t *) payload, length); } -void WebSocketsClient::sendTXT(String & payload) { - sendTXT((uint8_t *) payload.c_str(), payload.length()); +bool WebSocketsClient::sendTXT(String & payload) { + return sendTXT((uint8_t *) payload.c_str(), payload.length()); } /** @@ -183,15 +185,17 @@ void WebSocketsClient::sendTXT(String & payload) { * @param payload uint8_t * * @param length size_t * @param headerToPayload bool (see sendFrame for more details) + * @return true if ok */ -void WebSocketsClient::sendBIN(uint8_t * payload, size_t length, bool headerToPayload) { +bool WebSocketsClient::sendBIN(uint8_t * payload, size_t length, bool headerToPayload) { if(clientIsConnected(&_client)) { - sendFrame(&_client, WSop_binary, payload, length, true, true, headerToPayload); + return sendFrame(&_client, WSop_binary, payload, length, true, true, headerToPayload); } + return false; } -void WebSocketsClient::sendBIN(const uint8_t * payload, size_t length) { - sendBIN((uint8_t *) payload, length); +bool WebSocketsClient::sendBIN(const uint8_t * payload, size_t length) { + return sendBIN((uint8_t *) payload, length); } /** diff --git a/src/WebSocketsClient.h b/src/WebSocketsClient.h index a263666..b029d07 100644 --- a/src/WebSocketsClient.h +++ b/src/WebSocketsClient.h @@ -57,14 +57,14 @@ class WebSocketsClient: private WebSockets { void onEvent(WebSocketClientEvent cbEvent); - void sendTXT(uint8_t * payload, size_t length = 0, bool headerToPayload = false); - void sendTXT(const uint8_t * payload, size_t length = 0); - void sendTXT(char * payload, size_t length = 0, bool headerToPayload = false); - void sendTXT(const char * payload, size_t length = 0); - void sendTXT(String & payload); + bool sendTXT(uint8_t * payload, size_t length = 0, bool headerToPayload = false); + bool sendTXT(const uint8_t * payload, size_t length = 0); + bool sendTXT(char * payload, size_t length = 0, bool headerToPayload = false); + bool sendTXT(const char * payload, size_t length = 0); + bool sendTXT(String & payload); - void sendBIN(uint8_t * payload, size_t length, bool headerToPayload = false); - void sendBIN(const uint8_t * payload, size_t length); + bool sendBIN(uint8_t * payload, size_t length, bool headerToPayload = false); + bool sendBIN(const uint8_t * payload, size_t length); void disconnect(void); diff --git a/src/WebSocketsServer.cpp b/src/WebSocketsServer.cpp index e1448b3..f4c9a55 100644 --- a/src/WebSocketsServer.cpp +++ b/src/WebSocketsServer.cpp @@ -124,34 +124,36 @@ void WebSocketsServer::onEvent(WebSocketServerEvent cbEvent) { * @param payload uint8_t * * @param length size_t * @param headerToPayload bool (see sendFrame for more details) + * @return true if ok */ -void WebSocketsServer::sendTXT(uint8_t num, uint8_t * payload, size_t length, bool headerToPayload) { +bool WebSocketsServer::sendTXT(uint8_t num, uint8_t * payload, size_t length, bool headerToPayload) { if(num >= WEBSOCKETS_SERVER_CLIENT_MAX) { - return; + return false; } if(length == 0) { length = strlen((const char *) payload); } WSclient_t * client = &_clients[num]; if(clientIsConnected(client)) { - sendFrame(client, WSop_text, payload, length, false, true, headerToPayload); + return sendFrame(client, WSop_text, payload, length, false, true, headerToPayload); } + return false; } -void WebSocketsServer::sendTXT(uint8_t num, const uint8_t * payload, size_t length) { - sendTXT(num, (uint8_t *) payload, length); +bool WebSocketsServer::sendTXT(uint8_t num, const uint8_t * payload, size_t length) { + return sendTXT(num, (uint8_t *) payload, length); } -void WebSocketsServer::sendTXT(uint8_t num, char * payload, size_t length, bool headerToPayload) { - sendTXT(num, (uint8_t *) payload, length, headerToPayload); +bool WebSocketsServer::sendTXT(uint8_t num, char * payload, size_t length, bool headerToPayload) { + return sendTXT(num, (uint8_t *) payload, length, headerToPayload); } -void WebSocketsServer::sendTXT(uint8_t num, const char * payload, size_t length) { - sendTXT(num, (uint8_t *) payload, length); +bool WebSocketsServer::sendTXT(uint8_t num, const char * payload, size_t length) { + return sendTXT(num, (uint8_t *) payload, length); } -void WebSocketsServer::sendTXT(uint8_t num, String & payload) { - sendTXT(num, (uint8_t *) payload.c_str(), payload.length()); +bool WebSocketsServer::sendTXT(uint8_t num, String & payload) { + return sendTXT(num, (uint8_t *) payload.c_str(), payload.length()); } /** @@ -159,9 +161,11 @@ void WebSocketsServer::sendTXT(uint8_t num, String & payload) { * @param payload uint8_t * * @param length size_t * @param headerToPayload bool (see sendFrame for more details) + * @return true if ok */ -void WebSocketsServer::broadcastTXT(uint8_t * payload, size_t length, bool headerToPayload) { +bool WebSocketsServer::broadcastTXT(uint8_t * payload, size_t length, bool headerToPayload) { WSclient_t * client; + bool ret = true; if(length == 0) { length = strlen((const char *) payload); } @@ -169,28 +173,31 @@ void WebSocketsServer::broadcastTXT(uint8_t * payload, size_t length, bool heade for(uint8_t i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) { client = &_clients[i]; if(clientIsConnected(client)) { - sendFrame(client, WSop_text, payload, length, false, true, headerToPayload); + if(!sendFrame(client, WSop_text, payload, length, false, true, headerToPayload)) { + ret = false; + } } #if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) delay(0); #endif } + return ret; } -void WebSocketsServer::broadcastTXT(const uint8_t * payload, size_t length) { - broadcastTXT((uint8_t *) payload, length); +bool WebSocketsServer::broadcastTXT(const uint8_t * payload, size_t length) { + return broadcastTXT((uint8_t *) payload, length); } -void WebSocketsServer::broadcastTXT(char * payload, size_t length, bool headerToPayload) { - broadcastTXT((uint8_t *) payload, length, headerToPayload); +bool WebSocketsServer::broadcastTXT(char * payload, size_t length, bool headerToPayload) { + return broadcastTXT((uint8_t *) payload, length, headerToPayload); } -void WebSocketsServer::broadcastTXT(const char * payload, size_t length) { - broadcastTXT((uint8_t *) payload, length); +bool WebSocketsServer::broadcastTXT(const char * payload, size_t length) { + return broadcastTXT((uint8_t *) payload, length); } -void WebSocketsServer::broadcastTXT(String & payload) { - broadcastTXT((uint8_t *) payload.c_str(), payload.length()); +bool WebSocketsServer::broadcastTXT(String & payload) { + return broadcastTXT((uint8_t *) payload.c_str(), payload.length()); } /** @@ -199,19 +206,21 @@ void WebSocketsServer::broadcastTXT(String & payload) { * @param payload uint8_t * * @param length size_t * @param headerToPayload bool (see sendFrame for more details) + * @return true if ok */ -void WebSocketsServer::sendBIN(uint8_t num, uint8_t * payload, size_t length, bool headerToPayload) { +bool WebSocketsServer::sendBIN(uint8_t num, uint8_t * payload, size_t length, bool headerToPayload) { if(num >= WEBSOCKETS_SERVER_CLIENT_MAX) { - return; + return false; } WSclient_t * client = &_clients[num]; if(clientIsConnected(client)) { - sendFrame(client, WSop_binary, payload, length, false, true, headerToPayload); + return sendFrame(client, WSop_binary, payload, length, false, true, headerToPayload); } + return false; } -void WebSocketsServer::sendBIN(uint8_t num, const uint8_t * payload, size_t length) { - sendBIN(num, (uint8_t *) payload, length); +bool WebSocketsServer::sendBIN(uint8_t num, const uint8_t * payload, size_t length) { + return sendBIN(num, (uint8_t *) payload, length); } /** @@ -219,22 +228,27 @@ void WebSocketsServer::sendBIN(uint8_t num, const uint8_t * payload, size_t leng * @param payload uint8_t * * @param length size_t * @param headerToPayload bool (see sendFrame for more details) + * @return true if ok */ -void WebSocketsServer::broadcastBIN(uint8_t * payload, size_t length, bool headerToPayload) { +bool WebSocketsServer::broadcastBIN(uint8_t * payload, size_t length, bool headerToPayload) { WSclient_t * client; + bool ret = true; for(uint8_t i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) { client = &_clients[i]; if(clientIsConnected(client)) { - sendFrame(client, WSop_binary, payload, length, false, true, headerToPayload); + if(!sendFrame(client, WSop_binary, payload, length, false, true, headerToPayload)) { + ret = false; + } } #if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) delay(0); #endif } + return ret; } -void WebSocketsServer::broadcastBIN(const uint8_t * payload, size_t length) { - broadcastBIN((uint8_t *) payload, length); +bool WebSocketsServer::broadcastBIN(const uint8_t * payload, size_t length) { + return broadcastBIN((uint8_t *) payload, length); } /** diff --git a/src/WebSocketsServer.h b/src/WebSocketsServer.h index 27d7f8b..8b75982 100644 --- a/src/WebSocketsServer.h +++ b/src/WebSocketsServer.h @@ -57,23 +57,23 @@ public: void onEvent(WebSocketServerEvent cbEvent); - void sendTXT(uint8_t num, uint8_t * payload, size_t length = 0, bool headerToPayload = false); - void sendTXT(uint8_t num, const uint8_t * payload, size_t length = 0); - void sendTXT(uint8_t num, char * payload, size_t length = 0, bool headerToPayload = false); - void sendTXT(uint8_t num, const char * payload, size_t length = 0); - void sendTXT(uint8_t num, String & payload); + bool sendTXT(uint8_t num, uint8_t * payload, size_t length = 0, bool headerToPayload = false); + bool sendTXT(uint8_t num, const uint8_t * payload, size_t length = 0); + bool sendTXT(uint8_t num, char * payload, size_t length = 0, bool headerToPayload = false); + bool sendTXT(uint8_t num, const char * payload, size_t length = 0); + bool sendTXT(uint8_t num, String & payload); - void broadcastTXT(uint8_t * payload, size_t length = 0, bool headerToPayload = false); - void broadcastTXT(const uint8_t * payload, size_t length = 0); - void broadcastTXT(char * payload, size_t length = 0, bool headerToPayload = false); - void broadcastTXT(const char * payload, size_t length = 0); - void broadcastTXT(String & payload); + bool broadcastTXT(uint8_t * payload, size_t length = 0, bool headerToPayload = false); + bool broadcastTXT(const uint8_t * payload, size_t length = 0); + bool broadcastTXT(char * payload, size_t length = 0, bool headerToPayload = false); + bool broadcastTXT(const char * payload, size_t length = 0); + bool broadcastTXT(String & payload); - void sendBIN(uint8_t num, uint8_t * payload, size_t length, bool headerToPayload = false); - void sendBIN(uint8_t num, const uint8_t * payload, size_t length); + bool sendBIN(uint8_t num, uint8_t * payload, size_t length, bool headerToPayload = false); + bool sendBIN(uint8_t num, const uint8_t * payload, size_t length); - void broadcastBIN(uint8_t * payload, size_t length, bool headerToPayload = false); - void broadcastBIN(const uint8_t * payload, size_t length); + bool broadcastBIN(uint8_t * payload, size_t length, bool headerToPayload = false); + bool broadcastBIN(const uint8_t * payload, size_t length); void disconnect(void); void disconnect(uint8_t num);