mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-03 22:08:28 +00:00 
			
		
		
		
	esp_http_server: Fix examples parse ws keep-alive packet fail.
This commit is contained in:
		
				
					committed by
					
						
						Aditya Patwardhan
					
				
			
			
				
	
			
			
			
						parent
						
							54b2b88e9e
						
					
				
				
					commit
					3874c20b5d
				
			@@ -38,6 +38,7 @@ static esp_err_t ws_handler(httpd_req_t *req)
 | 
			
		||||
        return ESP_OK;
 | 
			
		||||
    }
 | 
			
		||||
    httpd_ws_frame_t ws_pkt;
 | 
			
		||||
    uint8_t *buf = NULL;
 | 
			
		||||
    memset(&ws_pkt, 0, sizeof(httpd_ws_frame_t));
 | 
			
		||||
 | 
			
		||||
    // First receive the full ws message
 | 
			
		||||
@@ -48,25 +49,26 @@ static esp_err_t ws_handler(httpd_req_t *req)
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
    ESP_LOGI(TAG, "frame len is %d", ws_pkt.len);
 | 
			
		||||
    /* ws_pkt.len + 1 is for NULL termination as we are expecting a string */
 | 
			
		||||
    uint8_t *buf = calloc(1, ws_pkt.len + 1);
 | 
			
		||||
    if (buf == NULL) {
 | 
			
		||||
        ESP_LOGE(TAG, "Failed to calloc memory for buf");
 | 
			
		||||
        return ESP_ERR_NO_MEM;
 | 
			
		||||
    if (ws_pkt.len) {
 | 
			
		||||
        /* ws_pkt.len + 1 is for NULL termination as we are expecting a string */
 | 
			
		||||
        buf = calloc(1, ws_pkt.len + 1);
 | 
			
		||||
        if (buf == NULL) {
 | 
			
		||||
            ESP_LOGE(TAG, "Failed to calloc memory for buf");
 | 
			
		||||
            return ESP_ERR_NO_MEM;
 | 
			
		||||
        }
 | 
			
		||||
        ws_pkt.payload = buf;
 | 
			
		||||
        /* Set max_len = ws_pkt.len to get the frame payload */
 | 
			
		||||
        ret = httpd_ws_recv_frame(req, &ws_pkt, ws_pkt.len);
 | 
			
		||||
        if (ret != ESP_OK) {
 | 
			
		||||
            ESP_LOGE(TAG, "httpd_ws_recv_frame failed with %d", ret);
 | 
			
		||||
            free(buf);
 | 
			
		||||
            return ret;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    ws_pkt.payload = buf;
 | 
			
		||||
    /* Set max_len = ws_pkt.len to get the frame payload */
 | 
			
		||||
    ret = httpd_ws_recv_frame(req, &ws_pkt, ws_pkt.len);
 | 
			
		||||
    if (ret != ESP_OK) {
 | 
			
		||||
        ESP_LOGE(TAG, "httpd_ws_recv_frame failed with %d", ret);
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // If it was a PONG, update the keep-alive
 | 
			
		||||
    if (ws_pkt.type == HTTPD_WS_TYPE_PONG) {
 | 
			
		||||
        ESP_LOGD(TAG, "Received PONG message");
 | 
			
		||||
        free(buf);
 | 
			
		||||
        buf = NULL;
 | 
			
		||||
        return wss_keep_alive_client_is_active(httpd_get_global_user_ctx(req->handle),
 | 
			
		||||
                httpd_req_to_sockfd(req));
 | 
			
		||||
 | 
			
		||||
@@ -80,11 +82,9 @@ static esp_err_t ws_handler(httpd_req_t *req)
 | 
			
		||||
        ESP_LOGI(TAG, "ws_handler: httpd_handle_t=%p, sockfd=%d, client_info:%d", req->handle,
 | 
			
		||||
                 httpd_req_to_sockfd(req), httpd_ws_get_fd_info(req->handle, httpd_req_to_sockfd(req)));
 | 
			
		||||
        free(buf);
 | 
			
		||||
        buf = NULL;
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
    free(buf);
 | 
			
		||||
    buf = NULL;
 | 
			
		||||
    return ESP_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user