add return value to all send functions

This commit is contained in:
Markus Sattler
2016-02-20 12:27:19 +01:00
parent c57a4c19ab
commit 450ca76a74
6 changed files with 99 additions and 72 deletions

View File

@ -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 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 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!) * @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()) { if(client->tcp && !client->tcp->connected()) {
DEBUG_WEBSOCKETS("[WS][%d][sendFrame] not Connected!?\n", client->num); DEBUG_WEBSOCKETS("[WS][%d][sendFrame] not Connected!?\n", client->num);
return; return false;
} }
if(client->status != WSC_CONNECTED) { if(client->status != WSC_CONNECTED) {
DEBUG_WEBSOCKETS("[WS][%d][sendFrame] not in WSC_CONNECTED state!?\n", client->num); 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); 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 * headerPtr;
uint8_t * payloadPtr = payload; uint8_t * payloadPtr = payload;
bool useInternBuffer = false; bool useInternBuffer = false;
bool ret = true;
// calculate header Size // calculate header Size
if(length < 126) { 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 // 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 // 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 // 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 { } else {
// send header // send header
client->tcp->write(&buffer[0], headerSize); if(client->tcp->write(&buffer[0], headerSize) != headerSize) {
ret = false;
}
if(payloadPtr && length > 0) { if(payloadPtr && length > 0) {
// send payload // 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 #endif
return ret;
} }
/** /**

View File

@ -204,7 +204,7 @@ class WebSockets {
virtual void messageRecived(WSclient_t * client, WSopcode_t opcode, uint8_t * payload, size_t length); 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 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); void headerDone(WSclient_t * client);

View File

@ -151,30 +151,32 @@ void WebSocketsClient::onEvent(WebSocketClientEvent cbEvent) {
* @param payload uint8_t * * @param payload uint8_t *
* @param length size_t * @param length size_t
* @param headerToPayload bool (see sendFrame for more details) * @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) { if(length == 0) {
length = strlen((const char *) payload); length = strlen((const char *) payload);
} }
if(clientIsConnected(&_client)) { 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) { bool WebSocketsClient::sendTXT(const uint8_t * payload, size_t length) {
sendTXT((uint8_t *) payload, length); return sendTXT((uint8_t *) payload, length);
} }
void WebSocketsClient::sendTXT(char * payload, size_t length, bool headerToPayload) { bool WebSocketsClient::sendTXT(char * payload, size_t length, bool headerToPayload) {
sendTXT((uint8_t *) payload, length, headerToPayload); return sendTXT((uint8_t *) payload, length, headerToPayload);
} }
void WebSocketsClient::sendTXT(const char * payload, size_t length) { bool WebSocketsClient::sendTXT(const char * payload, size_t length) {
sendTXT((uint8_t *) payload, length); return sendTXT((uint8_t *) payload, length);
} }
void WebSocketsClient::sendTXT(String & payload) { bool WebSocketsClient::sendTXT(String & payload) {
sendTXT((uint8_t *) payload.c_str(), payload.length()); return sendTXT((uint8_t *) payload.c_str(), payload.length());
} }
/** /**
@ -183,15 +185,17 @@ void WebSocketsClient::sendTXT(String & payload) {
* @param payload uint8_t * * @param payload uint8_t *
* @param length size_t * @param length size_t
* @param headerToPayload bool (see sendFrame for more details) * @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)) { 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) { bool WebSocketsClient::sendBIN(const uint8_t * payload, size_t length) {
sendBIN((uint8_t *) payload, length); return sendBIN((uint8_t *) payload, length);
} }
/** /**

View File

@ -57,14 +57,14 @@ class WebSocketsClient: private WebSockets {
void onEvent(WebSocketClientEvent cbEvent); void onEvent(WebSocketClientEvent cbEvent);
void sendTXT(uint8_t * payload, size_t length = 0, bool headerToPayload = false); bool sendTXT(uint8_t * payload, size_t length = 0, bool headerToPayload = false);
void sendTXT(const uint8_t * payload, size_t length = 0); bool sendTXT(const uint8_t * payload, size_t length = 0);
void sendTXT(char * payload, size_t length = 0, bool headerToPayload = false); bool sendTXT(char * payload, size_t length = 0, bool headerToPayload = false);
void sendTXT(const char * payload, size_t length = 0); bool sendTXT(const char * payload, size_t length = 0);
void sendTXT(String & payload); bool sendTXT(String & payload);
void sendBIN(uint8_t * payload, size_t length, bool headerToPayload = false); bool sendBIN(uint8_t * payload, size_t length, bool headerToPayload = false);
void sendBIN(const uint8_t * payload, size_t length); bool sendBIN(const uint8_t * payload, size_t length);
void disconnect(void); void disconnect(void);

View File

@ -124,34 +124,36 @@ void WebSocketsServer::onEvent(WebSocketServerEvent cbEvent) {
* @param payload uint8_t * * @param payload uint8_t *
* @param length size_t * @param length size_t
* @param headerToPayload bool (see sendFrame for more details) * @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) { if(num >= WEBSOCKETS_SERVER_CLIENT_MAX) {
return; return false;
} }
if(length == 0) { if(length == 0) {
length = strlen((const char *) payload); length = strlen((const char *) payload);
} }
WSclient_t * client = &_clients[num]; WSclient_t * client = &_clients[num];
if(clientIsConnected(client)) { 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) { bool WebSocketsServer::sendTXT(uint8_t num, const uint8_t * payload, size_t length) {
sendTXT(num, (uint8_t *) payload, length); return sendTXT(num, (uint8_t *) payload, length);
} }
void WebSocketsServer::sendTXT(uint8_t num, char * payload, size_t length, bool headerToPayload) { bool WebSocketsServer::sendTXT(uint8_t num, char * payload, size_t length, bool headerToPayload) {
sendTXT(num, (uint8_t *) payload, length, headerToPayload); return sendTXT(num, (uint8_t *) payload, length, headerToPayload);
} }
void WebSocketsServer::sendTXT(uint8_t num, const char * payload, size_t length) { bool WebSocketsServer::sendTXT(uint8_t num, const char * payload, size_t length) {
sendTXT(num, (uint8_t *) payload, length); return sendTXT(num, (uint8_t *) payload, length);
} }
void WebSocketsServer::sendTXT(uint8_t num, String & payload) { bool WebSocketsServer::sendTXT(uint8_t num, String & payload) {
sendTXT(num, (uint8_t *) payload.c_str(), payload.length()); 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 payload uint8_t *
* @param length size_t * @param length size_t
* @param headerToPayload bool (see sendFrame for more details) * @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; WSclient_t * client;
bool ret = true;
if(length == 0) { if(length == 0) {
length = strlen((const char *) payload); 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++) { for(uint8_t i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) {
client = &_clients[i]; client = &_clients[i];
if(clientIsConnected(client)) { 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) #if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
delay(0); delay(0);
#endif #endif
} }
return ret;
} }
void WebSocketsServer::broadcastTXT(const uint8_t * payload, size_t length) { bool WebSocketsServer::broadcastTXT(const uint8_t * payload, size_t length) {
broadcastTXT((uint8_t *) payload, length); return broadcastTXT((uint8_t *) payload, length);
} }
void WebSocketsServer::broadcastTXT(char * payload, size_t length, bool headerToPayload) { bool WebSocketsServer::broadcastTXT(char * payload, size_t length, bool headerToPayload) {
broadcastTXT((uint8_t *) payload, length, headerToPayload); return broadcastTXT((uint8_t *) payload, length, headerToPayload);
} }
void WebSocketsServer::broadcastTXT(const char * payload, size_t length) { bool WebSocketsServer::broadcastTXT(const char * payload, size_t length) {
broadcastTXT((uint8_t *) payload, length); return broadcastTXT((uint8_t *) payload, length);
} }
void WebSocketsServer::broadcastTXT(String & payload) { bool WebSocketsServer::broadcastTXT(String & payload) {
broadcastTXT((uint8_t *) payload.c_str(), payload.length()); return broadcastTXT((uint8_t *) payload.c_str(), payload.length());
} }
/** /**
@ -199,19 +206,21 @@ void WebSocketsServer::broadcastTXT(String & payload) {
* @param payload uint8_t * * @param payload uint8_t *
* @param length size_t * @param length size_t
* @param headerToPayload bool (see sendFrame for more details) * @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) { if(num >= WEBSOCKETS_SERVER_CLIENT_MAX) {
return; return false;
} }
WSclient_t * client = &_clients[num]; WSclient_t * client = &_clients[num];
if(clientIsConnected(client)) { 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) { bool WebSocketsServer::sendBIN(uint8_t num, const uint8_t * payload, size_t length) {
sendBIN(num, (uint8_t *) payload, 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 payload uint8_t *
* @param length size_t * @param length size_t
* @param headerToPayload bool (see sendFrame for more details) * @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; WSclient_t * client;
bool ret = true;
for(uint8_t i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) { for(uint8_t i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) {
client = &_clients[i]; client = &_clients[i];
if(clientIsConnected(client)) { 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) #if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
delay(0); delay(0);
#endif #endif
} }
return ret;
} }
void WebSocketsServer::broadcastBIN(const uint8_t * payload, size_t length) { bool WebSocketsServer::broadcastBIN(const uint8_t * payload, size_t length) {
broadcastBIN((uint8_t *) payload, length); return broadcastBIN((uint8_t *) payload, length);
} }
/** /**

View File

@ -57,23 +57,23 @@ public:
void onEvent(WebSocketServerEvent cbEvent); void onEvent(WebSocketServerEvent cbEvent);
void sendTXT(uint8_t num, uint8_t * payload, size_t length = 0, bool headerToPayload = false); bool 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); bool 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); bool 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); bool sendTXT(uint8_t num, const char * payload, size_t length = 0);
void sendTXT(uint8_t num, String & payload); bool sendTXT(uint8_t num, String & payload);
void broadcastTXT(uint8_t * payload, size_t length = 0, bool headerToPayload = false); bool broadcastTXT(uint8_t * payload, size_t length = 0, bool headerToPayload = false);
void broadcastTXT(const uint8_t * payload, size_t length = 0); bool broadcastTXT(const uint8_t * payload, size_t length = 0);
void broadcastTXT(char * payload, size_t length = 0, bool headerToPayload = false); bool broadcastTXT(char * payload, size_t length = 0, bool headerToPayload = false);
void broadcastTXT(const char * payload, size_t length = 0); bool broadcastTXT(const char * payload, size_t length = 0);
void broadcastTXT(String & payload); bool broadcastTXT(String & payload);
void sendBIN(uint8_t num, uint8_t * payload, size_t length, bool headerToPayload = false); bool 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, const uint8_t * payload, size_t length);
void broadcastBIN(uint8_t * payload, size_t length, bool headerToPayload = false); bool broadcastBIN(uint8_t * payload, size_t length, bool headerToPayload = false);
void broadcastBIN(const uint8_t * payload, size_t length); bool broadcastBIN(const uint8_t * payload, size_t length);
void disconnect(void); void disconnect(void);
void disconnect(uint8_t num); void disconnect(uint8_t num);