mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-02 12:14:32 +02:00
Merge branch 'bugfix/http_write_data' into 'master'
esp_http_client: Fix minor bugs in `esp_http_client_write` and `esp_http_client_open` APIs See merge request idf/esp-idf!2924
This commit is contained in:
@@ -932,11 +932,18 @@ esp_err_t esp_http_client_open(esp_http_client_handle_t client, int write_len)
|
|||||||
}
|
}
|
||||||
client->request->buffer->data[wlen] = 0;
|
client->request->buffer->data[wlen] = 0;
|
||||||
ESP_LOGD(TAG, "Write header[%d]: %s", header_index, client->request->buffer->data);
|
ESP_LOGD(TAG, "Write header[%d]: %s", header_index, client->request->buffer->data);
|
||||||
if (transport_write(client->transport, client->request->buffer->data, wlen, client->timeout_ms) <= 0) {
|
|
||||||
|
int widx = 0, wret = 0;
|
||||||
|
while (wlen > 0) {
|
||||||
|
wret = transport_write(client->transport, client->request->buffer->data + widx, wlen, client->timeout_ms);
|
||||||
|
if (wret <= 0) {
|
||||||
ESP_LOGE(TAG, "Error write request");
|
ESP_LOGE(TAG, "Error write request");
|
||||||
esp_http_client_close(client);
|
esp_http_client_close(client);
|
||||||
return ESP_ERR_HTTP_WRITE_DATA;
|
return ESP_ERR_HTTP_WRITE_DATA;
|
||||||
}
|
}
|
||||||
|
widx += wret;
|
||||||
|
wlen -= wret;
|
||||||
|
}
|
||||||
wlen = client->buffer_size;
|
wlen = client->buffer_size;
|
||||||
}
|
}
|
||||||
client->state = HTTP_STATE_REQ_COMPLETE_HEADER;
|
client->state = HTTP_STATE_REQ_COMPLETE_HEADER;
|
||||||
@@ -949,14 +956,10 @@ int esp_http_client_write(esp_http_client_handle_t client, const char *buffer, i
|
|||||||
if (client->state < HTTP_STATE_REQ_COMPLETE_HEADER) {
|
if (client->state < HTTP_STATE_REQ_COMPLETE_HEADER) {
|
||||||
return ESP_FAIL;
|
return ESP_FAIL;
|
||||||
}
|
}
|
||||||
int need_write;
|
|
||||||
int wlen = 0, widx = 0;
|
int wlen = 0, widx = 0;
|
||||||
while (len > 0) {
|
while (len > 0) {
|
||||||
need_write = len;
|
wlen = transport_write(client->transport, buffer + widx, len, client->timeout_ms);
|
||||||
if (need_write > client->buffer_size) {
|
|
||||||
need_write = client->buffer_size;
|
|
||||||
}
|
|
||||||
wlen = transport_write(client->transport, buffer + widx, need_write, client->timeout_ms);
|
|
||||||
if (wlen <= 0) {
|
if (wlen <= 0) {
|
||||||
return wlen;
|
return wlen;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user