mirror of
https://github.com/Links2004/arduinoWebSockets.git
synced 2025-07-13 15:26:31 +02:00
first steps to allow sending continuation frame
This commit is contained in:
@ -61,10 +61,10 @@ void WebSockets::clientDisconnect(WSclient_t * client, uint16_t code, char * rea
|
|||||||
* @param payload uint8_t *
|
* @param payload uint8_t *
|
||||||
* @param length size_t
|
* @param length size_t
|
||||||
*/
|
*/
|
||||||
void WebSockets::sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * payload, size_t length, bool mask) {
|
void WebSockets::sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * payload, size_t length, bool mask, bool fin) {
|
||||||
|
|
||||||
DEBUG_WEBSOCKETS("[WS][%d][sendFrame] ------- send massage frame -------\n", client->num);
|
DEBUG_WEBSOCKETS("[WS][%d][sendFrame] ------- send massage frame -------\n", client->num);
|
||||||
DEBUG_WEBSOCKETS("[WS][%d][sendFrame] opCode: %u mask: %u length: %u\n", client->num, opcode, mask, length);
|
DEBUG_WEBSOCKETS("[WS][%d][sendFrame] fin: %u opCode: %u mask: %u length: %u\n", client->num, fin, opcode, mask, length);
|
||||||
|
|
||||||
if(opcode == WSop_text) {
|
if(opcode == WSop_text) {
|
||||||
DEBUG_WEBSOCKETS("[WS][%d][sendFrame] text: %s\n", client->num, payload);
|
DEBUG_WEBSOCKETS("[WS][%d][sendFrame] text: %s\n", client->num, payload);
|
||||||
@ -80,25 +80,30 @@ void WebSockets::sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * pay
|
|||||||
uint8_t i = 0;
|
uint8_t i = 0;
|
||||||
|
|
||||||
//create header
|
//create header
|
||||||
buffer[i] = bit(7); // set Fin
|
|
||||||
buffer[i++] |= opcode; // set opcode
|
|
||||||
|
|
||||||
|
// byte 0
|
||||||
buffer[i] = 0x00;
|
buffer[i] = 0x00;
|
||||||
|
if(fin) {
|
||||||
|
buffer[i] |= bit(7); ///< set Fin
|
||||||
|
}
|
||||||
|
buffer[i++] |= opcode; ///< set opcode
|
||||||
|
|
||||||
|
// byte 1
|
||||||
|
buffer[i] = 0x00;
|
||||||
if(mask) {
|
if(mask) {
|
||||||
buffer[i] |= bit(7); // set mask
|
buffer[i] |= bit(7); ///< set mask
|
||||||
}
|
}
|
||||||
|
|
||||||
if(length < 126) {
|
if(length < 126) {
|
||||||
buffer[i++] |= length;
|
buffer[i++] |= length;
|
||||||
|
|
||||||
} else if(length < 0xFFFF) {
|
} else if(length < 0xFFFF) {
|
||||||
buffer[i++] = 126;
|
buffer[i++] |= 126;
|
||||||
buffer[i++] = ((length >> 8) & 0xFF);
|
buffer[i++] = ((length >> 8) & 0xFF);
|
||||||
buffer[i++] = (length & 0xFF);
|
buffer[i++] = (length & 0xFF);
|
||||||
} else {
|
} else {
|
||||||
// normaly we never get here (to less memory)
|
// normaly we never get here (to less memory)
|
||||||
buffer[i++] = 127;
|
buffer[i++] |= 127;
|
||||||
buffer[i++] = 0x00;
|
buffer[i++] = 0x00;
|
||||||
buffer[i++] = 0x00;
|
buffer[i++] = 0x00;
|
||||||
buffer[i++] = 0x00;
|
buffer[i++] = 0x00;
|
||||||
|
@ -106,7 +106,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);
|
void sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * payload = NULL, size_t length = 0, bool mask = false, bool fin = true);
|
||||||
|
|
||||||
|
|
||||||
void handleWebsocket(WSclient_t * client);
|
void handleWebsocket(WSclient_t * client);
|
||||||
|
Reference in New Issue
Block a user