mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-03 22:08:28 +00:00 
			
		
		
		
	Previous implementation violated the RFC by having both the actual opcode and WS_FIN flag set for all fragments of a message. Fixed by setting the opcode only for the first fragment and WS_FIN for the last one Closes IDFGH-2938 Closes https://github.com/espressif/esp-idf/issues/4974
		
			
				
	
	
		
			102 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * This file is subject to the terms and conditions defined in
 | 
						|
 * file 'LICENSE', which is part of this source code package.
 | 
						|
 * Tuan PM <tuanpm at live dot com>
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef _ESP_TRANSPORT_WS_H_
 | 
						|
#define _ESP_TRANSPORT_WS_H_
 | 
						|
 | 
						|
#include "esp_transport.h"
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
typedef enum ws_transport_opcodes {
 | 
						|
    WS_TRANSPORT_OPCODES_CONT =  0x00,
 | 
						|
    WS_TRANSPORT_OPCODES_TEXT =  0x01,
 | 
						|
    WS_TRANSPORT_OPCODES_BINARY = 0x02,
 | 
						|
    WS_TRANSPORT_OPCODES_CLOSE = 0x08,
 | 
						|
    WS_TRANSPORT_OPCODES_PING = 0x09,
 | 
						|
    WS_TRANSPORT_OPCODES_PONG = 0x0a,
 | 
						|
    WS_TRANSPORT_OPCODES_FIN = 0x80,
 | 
						|
} ws_transport_opcodes_t;
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief      Create web socket transport
 | 
						|
 *
 | 
						|
 * @return
 | 
						|
 *  - transport
 | 
						|
 *  - NULL
 | 
						|
 */
 | 
						|
esp_transport_handle_t esp_transport_ws_init(esp_transport_handle_t parent_handle);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief       Set HTTP path to update protocol to websocket
 | 
						|
 *
 | 
						|
 * @param t     websocket transport handle
 | 
						|
 * @param path  The HTTP Path
 | 
						|
 */
 | 
						|
void esp_transport_ws_set_path(esp_transport_handle_t t, const char *path);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief               Set websocket sub protocol header
 | 
						|
 *
 | 
						|
 * @param t             websocket transport handle
 | 
						|
 * @param sub_protocol  Sub protocol string
 | 
						|
 *
 | 
						|
 * @return
 | 
						|
 *      - ESP_OK on success
 | 
						|
 *      - One of the error codes
 | 
						|
 */
 | 
						|
esp_err_t esp_transport_ws_set_subprotocol(esp_transport_handle_t t, const char *sub_protocol);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief               Sends websocket raw message with custom opcode and payload
 | 
						|
 *
 | 
						|
 * Note that generic esp_transport_write for ws handle sends
 | 
						|
 * binary massages by default if size is > 0 and
 | 
						|
 * ping message if message size is set to 0.
 | 
						|
 * This API is provided to support explicit messages with arbitrary opcode,
 | 
						|
 * should it be PING, PONG or TEXT message with arbitrary data.
 | 
						|
 *
 | 
						|
 * @param[in]  t           Websocket transport handle
 | 
						|
 * @param[in]  opcode      ws operation code
 | 
						|
 * @param[in]  buffer      The buffer
 | 
						|
 * @param[in]  len         The length
 | 
						|
 * @param[in]  timeout_ms  The timeout milliseconds
 | 
						|
 *
 | 
						|
 * @return
 | 
						|
 *  - Number of bytes was written
 | 
						|
 *  - (-1) if there are any errors, should check errno
 | 
						|
 */
 | 
						|
int esp_transport_ws_send_raw(esp_transport_handle_t t, ws_transport_opcodes_t opcode, const char *b, int len, int timeout_ms);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief               Returns websocket op-code for last received data
 | 
						|
 *
 | 
						|
 * @param t             websocket transport handle
 | 
						|
 *
 | 
						|
 * @return
 | 
						|
 *      - Received op-code as enum
 | 
						|
 */
 | 
						|
ws_transport_opcodes_t esp_transport_ws_get_read_opcode(esp_transport_handle_t t);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief               Returns payload length of the last received data
 | 
						|
 *
 | 
						|
 * @param t             websocket transport handle
 | 
						|
 *
 | 
						|
 * @return
 | 
						|
 *      - Number of bytes in the payload
 | 
						|
 */
 | 
						|
int esp_transport_ws_get_read_payload_len(esp_transport_handle_t t);
 | 
						|
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif /* _ESP_TRANSPORT_WS_H_ */
 |