forked from espressif/esp-protocols
Merge pull request #515 from david-cermak/fix/ws_dyn_buffer
[ws-client]: Fix usage of the dynamic buffer
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -550,9 +550,13 @@ static int esp_websocket_client_send_with_exact_opcode(esp_websocket_client_hand
|
|||||||
int ret = -1;
|
int ret = -1;
|
||||||
int need_write = len;
|
int need_write = len;
|
||||||
int wlen = 0, widx = 0;
|
int wlen = 0, widx = 0;
|
||||||
|
|
||||||
bool contained_fin = opcode & WS_TRANSPORT_OPCODES_FIN;
|
bool contained_fin = opcode & WS_TRANSPORT_OPCODES_FIN;
|
||||||
|
|
||||||
|
if (esp_websocket_new_buf(client, true) != ESP_OK) {
|
||||||
|
ESP_LOGE(TAG, "Failed to setup tx buffer");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
while (widx < len || opcode) { // allow for sending "current_opcode" only message with len==0
|
while (widx < len || opcode) { // allow for sending "current_opcode" only message with len==0
|
||||||
if (need_write > client->buffer_size) {
|
if (need_write > client->buffer_size) {
|
||||||
need_write = client->buffer_size;
|
need_write = client->buffer_size;
|
||||||
@@ -1204,33 +1208,27 @@ int esp_websocket_client_send_fin(esp_websocket_client_handle_t client, TickType
|
|||||||
|
|
||||||
int esp_websocket_client_send_with_opcode(esp_websocket_client_handle_t client, ws_transport_opcodes_t opcode, const uint8_t *data, int len, TickType_t timeout)
|
int esp_websocket_client_send_with_opcode(esp_websocket_client_handle_t client, ws_transport_opcodes_t opcode, const uint8_t *data, int len, TickType_t timeout)
|
||||||
{
|
{
|
||||||
int ret = ESP_OK;
|
int ret = -1;
|
||||||
if (client == NULL || len < 0 || (data == NULL && len > 0)) {
|
if (client == NULL || len < 0 || (data == NULL && len > 0)) {
|
||||||
ESP_LOGE(TAG, "Invalid arguments");
|
ESP_LOGE(TAG, "Invalid arguments");
|
||||||
return ESP_FAIL;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xSemaphoreTakeRecursive(client->lock, timeout) != pdPASS) {
|
if (xSemaphoreTakeRecursive(client->lock, timeout) != pdPASS) {
|
||||||
ESP_LOGE(TAG, "Could not lock ws-client within %" PRIu32 " timeout", timeout);
|
ESP_LOGE(TAG, "Could not lock ws-client within %" PRIu32 " timeout", timeout);
|
||||||
return ESP_FAIL;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!esp_websocket_client_is_connected(client)) {
|
if (!esp_websocket_client_is_connected(client)) {
|
||||||
ESP_LOGE(TAG, "Websocket client is not connected");
|
ESP_LOGE(TAG, "Websocket client is not connected");
|
||||||
ret = ESP_FAIL;
|
|
||||||
goto unlock_and_return;
|
goto unlock_and_return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (client->transport == NULL) {
|
if (client->transport == NULL) {
|
||||||
ESP_LOGE(TAG, "Invalid transport");
|
ESP_LOGE(TAG, "Invalid transport");
|
||||||
ret = ESP_FAIL;
|
|
||||||
goto unlock_and_return;
|
|
||||||
}
|
|
||||||
if (esp_websocket_new_buf(client, true) != ESP_OK) {
|
|
||||||
ESP_LOGE(TAG, "Failed to setup tx buffer");
|
|
||||||
ret = ESP_FAIL;
|
|
||||||
goto unlock_and_return;
|
goto unlock_and_return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = esp_websocket_client_send_with_exact_opcode(client, opcode | WS_TRANSPORT_OPCODES_FIN, data, len, timeout);
|
ret = esp_websocket_client_send_with_exact_opcode(client, opcode | WS_TRANSPORT_OPCODES_FIN, data, len, timeout);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
ESP_LOGE(TAG, "Failed to send the buffer");
|
ESP_LOGE(TAG, "Failed to send the buffer");
|
||||||
|
Reference in New Issue
Block a user