VSF Documented
esp_http_client.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2026 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18/*
19 * Clean-room re-implementation of ESP-IDF public API "esp_http_client.h".
20 *
21 * This file is authored from the ESP-IDF public API reference only. No
22 * code is copied or derived from the ESP-IDF source tree. Names, enum
23 * values and function signatures are kept compatible so that unmodified
24 * ESP-IDF applications can compile against this header.
25 *
26 * Baseline: ESP-IDF v5.x public API surface (42 public functions).
27 *
28 * Scope:
29 * Full Tier 1 + Tier 2 (config-macro gated) + Tier 3. A small number of
30 * Tier 3 APIs whose semantics cannot be mapped onto the current
31 * vsf_http_client transport contract are compiled as stubs returning
32 * ESP_ERR_NOT_SUPPORTED; this is documented per-function in the port.
33 */
34
35#ifndef __VSF_ESPIDF_ESP_HTTP_CLIENT_H__
36#define __VSF_ESPIDF_ESP_HTTP_CLIENT_H__
37
38/*============================ INCLUDES ======================================*/
39
40#include <stdint.h>
41#include <stddef.h>
42#include <stdbool.h>
43
44#include "esp_err.h"
45
46#ifdef __cplusplus
47extern "C" {
48#endif
49
50/*============================ MACROS ========================================*/
51
52#define DEFAULT_HTTP_BUF_SIZE (512)
53
54// ESP-IDF esp_http_client error code range (0x7000 + n)
55#define ESP_ERR_HTTP_BASE (0x7000)
56#define ESP_ERR_HTTP_MAX_REDIRECT (ESP_ERR_HTTP_BASE + 1)
57#define ESP_ERR_HTTP_CONNECT (ESP_ERR_HTTP_BASE + 2)
58#define ESP_ERR_HTTP_WRITE_DATA (ESP_ERR_HTTP_BASE + 3)
59#define ESP_ERR_HTTP_FETCH_HEADER (ESP_ERR_HTTP_BASE + 4)
60#define ESP_ERR_HTTP_INVALID_TRANSPORT (ESP_ERR_HTTP_BASE + 5)
61#define ESP_ERR_HTTP_CONNECTING (ESP_ERR_HTTP_BASE + 6)
62#define ESP_ERR_HTTP_EAGAIN (ESP_ERR_HTTP_BASE + 7)
63#define ESP_ERR_HTTP_CONNECTION_CLOSED (ESP_ERR_HTTP_BASE + 8)
64#define ESP_ERR_HTTP_NOT_MODIFIED (ESP_ERR_HTTP_BASE + 9)
65#define ESP_ERR_HTTP_RANGE_NOT_SATISFIABLE (ESP_ERR_HTTP_BASE + 10)
66#define ESP_ERR_HTTP_READ_TIMEOUT (ESP_ERR_HTTP_BASE + 11)
67#define ESP_ERR_HTTP_INCOMPLETE_DATA (ESP_ERR_HTTP_BASE + 12)
68
69/*============================ TYPES =========================================*/
70
73
74// Event ids delivered to http_event_handle_cb.
75// HEADER_SENT kept as alias for legacy code (same value as HEADERS_SENT).
76typedef enum {
89
90typedef struct esp_http_client_event {
93 void *data;
95 void *user_data;
99
104
105// Transport selection (auto-selected from scheme when url is given).
106typedef enum {
111
112// TLS preferred protocol version. Forwarded to mbedtls_session when the
113// underlying layer supports it; ignored otherwise.
114typedef enum {
120
122
123typedef enum {
144
145typedef enum {
150
151// Socket address family. AF_UNSPEC=0, AF_INET=2, AF_INET6=10 on most
152// POSIX systems including VSF linux layer; values replicated here so
153// users do not need <sys/socket.h>.
154typedef enum {
159
160typedef enum {
172
173// Subset of HTTP status codes that ESP-IDF applications typically switch on.
174typedef enum {
191
192// esp_http_client_config_t: superset of fields used by ESP-IDF examples.
193// Fields guarded by CONFIG_* on upstream are always present here; ones
194// the shim does not honour are accepted and silently ignored so that
195// unmodified example code still compiles and runs.
196typedef struct {
197 const char *url;
198 const char *host;
199 int port;
200 const char *username;
201 const char *password;
203 const char *path;
204 const char *query;
205 union {
206 const char *cert_pem;
207 const char *cert_der;
208 };
209 size_t cert_len;
210 union {
211 const char *client_cert_pem;
212 const char *client_cert_der;
213 };
215 const char *client_key_pem;
220 const char *user_agent;
234 const char *common_name;
235 esp_err_t (*crt_bundle_attach)(void *conf);
240 // if_name intentionally omitted (requires struct ifreq from lwip);
241 // callers relying on it must bind at their own transport layer.
242 const char **alpn_protos;
245
246/*============================ PROTOTYPES ====================================*/
247
248// ----- lifecycle ---------------------------------------------------------
251
252// ----- request/response driving -----------------------------------------
255extern esp_err_t esp_http_client_open(esp_http_client_handle_t client, int write_len);
256extern int esp_http_client_write(esp_http_client_handle_t client, const char *buffer, int len);
258extern int esp_http_client_chunk_write_begin(esp_http_client_handle_t client, const int len);
259extern int esp_http_client_chunk_write_end(esp_http_client_handle_t client, bool last_chunk);
261extern int esp_http_client_read(esp_http_client_handle_t client, char *buffer, int len);
262extern int esp_http_client_read_response(esp_http_client_handle_t client, char *buffer, int len);
267
268// ----- URL / method / headers / post body --------------------------------
269extern esp_err_t esp_http_client_set_url(esp_http_client_handle_t client, const char *url);
270extern esp_err_t esp_http_client_get_url(esp_http_client_handle_t client, char *url, const int len);
272extern esp_err_t esp_http_client_set_header(esp_http_client_handle_t client, const char *key, const char *value);
273extern esp_err_t esp_http_client_get_header(esp_http_client_handle_t client, const char *key, char **value);
277extern esp_err_t esp_http_client_set_post_field(esp_http_client_handle_t client, const char *data, int len);
279
280// ----- auth --------------------------------------------------------------
281extern esp_err_t esp_http_client_set_username(esp_http_client_handle_t client, const char *username);
283extern esp_err_t esp_http_client_set_password(esp_http_client_handle_t client, const char *password);
287extern esp_err_t esp_http_client_set_auth_data(esp_http_client_handle_t client, const char *auth_data, int len);
288
289// ----- redirection -------------------------------------------------------
292
293// ----- misc getters ------------------------------------------------------
305extern esp_err_t esp_http_client_get_and_clear_last_tls_error(esp_http_client_handle_t client, int *esp_tls_error_code, int *esp_tls_flags);
306
307// ----- runtime setters ---------------------------------------------------
311
312#ifdef __cplusplus
313}
314#endif
315
316#endif // __VSF_ESPIDF_ESP_HTTP_CLIENT_H__
int esp_err_t
Definition esp_err.h:41
int esp_http_client_write(esp_http_client_handle_t client, const char *buffer, int len)
Definition esp_http_client_port.c:1052
esp_err_t esp_http_client_perform(esp_http_client_handle_t client)
Definition esp_http_client_port.c:1155
esp_err_t esp_http_client_get_response_header(esp_http_client_handle_t client, const char *key, char **value)
Definition esp_http_client_port.c:1346
bool esp_http_client_is_persistent_connection(esp_http_client_handle_t client)
Definition esp_http_client_port.c:1593
esp_http_client_addr_type_t
Definition esp_http_client.h:154
@ HTTP_ADDR_TYPE_INET
Definition esp_http_client.h:156
@ HTTP_ADDR_TYPE_UNSPEC
Definition esp_http_client.h:155
@ HTTP_ADDR_TYPE_INET6
Definition esp_http_client.h:157
int esp_http_client_get_status_code(esp_http_client_handle_t client)
Definition esp_http_client_port.c:1537
struct esp_http_client * esp_http_client_handle_t
Definition esp_http_client.h:71
esp_err_t esp_http_client_set_header(esp_http_client_handle_t client, const char *key, const char *value)
Definition esp_http_client_port.c:1298
esp_http_state_t esp_http_client_get_state(esp_http_client_handle_t client)
Definition esp_http_client_port.c:1564
esp_err_t esp_http_client_set_post_field(esp_http_client_handle_t client, const char *data, int len)
Definition esp_http_client_port.c:1353
esp_http_client_transport_t esp_http_client_get_transport_type(esp_http_client_handle_t client)
Definition esp_http_client_port.c:1559
esp_http_client_method_t
Definition esp_http_client.h:123
@ HTTP_METHOD_NOTIFY
Definition esp_http_client.h:130
@ HTTP_METHOD_COPY
Definition esp_http_client.h:134
@ HTTP_METHOD_POST
Definition esp_http_client.h:125
@ HTTP_METHOD_HEAD
Definition esp_http_client.h:129
@ HTTP_METHOD_UNSUBSCRIBE
Definition esp_http_client.h:132
@ HTTP_METHOD_REPORT
Definition esp_http_client.h:141
@ HTTP_METHOD_MOVE
Definition esp_http_client.h:135
@ HTTP_METHOD_LOCK
Definition esp_http_client.h:136
@ HTTP_METHOD_DELETE
Definition esp_http_client.h:128
@ HTTP_METHOD_GET
Definition esp_http_client.h:124
@ HTTP_METHOD_UNLOCK
Definition esp_http_client.h:137
@ HTTP_METHOD_MAX
Definition esp_http_client.h:142
@ HTTP_METHOD_PROPPATCH
Definition esp_http_client.h:139
@ HTTP_METHOD_PROPFIND
Definition esp_http_client.h:138
@ HTTP_METHOD_PATCH
Definition esp_http_client.h:127
@ HTTP_METHOD_SUBSCRIBE
Definition esp_http_client.h:131
@ HTTP_METHOD_MKCOL
Definition esp_http_client.h:140
@ HTTP_METHOD_OPTIONS
Definition esp_http_client.h:133
@ HTTP_METHOD_PUT
Definition esp_http_client.h:126
bool esp_http_client_is_complete_data_received(esp_http_client_handle_t client)
Definition esp_http_client_port.c:1134
int esp_http_client_get_socket(esp_http_client_handle_t client)
Definition esp_http_client_port.c:1569
esp_err_t esp_http_client_set_username(esp_http_client_handle_t client, const char *username)
Definition esp_http_client_port.c:1408
esp_err_t esp_http_client_cleanup(esp_http_client_handle_t client)
Definition esp_http_client_port.c:820
esp_err_t esp_http_client_add_auth(esp_http_client_handle_t client)
Definition esp_http_client_port.c:1451
esp_http_client_transport_t
Definition esp_http_client.h:106
@ HTTP_TRANSPORT_OVER_SSL
Definition esp_http_client.h:109
@ HTTP_TRANSPORT_OVER_TCP
Definition esp_http_client.h:108
@ HTTP_TRANSPORT_UNKNOWN
Definition esp_http_client.h:107
esp_err_t esp_http_client_get_url(esp_http_client_handle_t client, char *url, const int len)
Definition esp_http_client_port.c:1272
esp_err_t esp_http_client_cancel_request(esp_http_client_handle_t client)
Definition esp_http_client_port.c:1521
int esp_http_client_read_response(esp_http_client_handle_t client, char *buffer, int len)
Definition esp_http_client_port.c:1122
int esp_http_client_get_post_field(esp_http_client_handle_t client, char **data)
Definition esp_http_client_port.c:1375
struct esp_http_client_event esp_http_client_event_t
esp_http_client_handle_t esp_http_client_init(const esp_http_client_config_t *config)
Definition esp_http_client_port.c:702
esp_err_t esp_http_client_get_password(esp_http_client_handle_t client, char **value)
Definition esp_http_client_port.c:1429
esp_err_t esp_http_client_get_username(esp_http_client_handle_t client, char **value)
Definition esp_http_client_port.c:1415
esp_err_t esp_http_client_prepare(esp_http_client_handle_t client)
Definition esp_http_client_port.c:1617
bool esp_http_client_is_chunked_response(esp_http_client_handle_t client)
Definition esp_http_client_port.c:1148
struct esp_http_client_redirect_event_data esp_http_client_redirect_event_data_t
esp_err_t esp_http_client_set_redirection(esp_http_client_handle_t client)
Definition esp_http_client_port.c:1491
esp_err_t esp_http_client_set_user_data(esp_http_client_handle_t client, void *data)
Definition esp_http_client_port.c:1392
int64_t esp_http_client_get_content_range(esp_http_client_handle_t client)
Definition esp_http_client_port.c:1549
esp_err_t esp_http_client_reset_redirect_counter(esp_http_client_handle_t client)
Definition esp_http_client_port.c:1507
esp_err_t esp_http_client_set_url(esp_http_client_handle_t client, const char *url)
Definition esp_http_client_port.c:1229
esp_err_t esp_http_client_get_chunk_length(esp_http_client_handle_t client, int *len)
Definition esp_http_client_port.c:1581
esp_err_t esp_http_client_delete_all_headers(esp_http_client_handle_t client)
Definition esp_http_client_port.c:1330
esp_err_t esp_http_client_set_authtype(esp_http_client_handle_t client, esp_http_client_auth_type_t auth_type)
Definition esp_http_client_port.c:1436
esp_err_t esp_http_client_get_user_data(esp_http_client_handle_t client, void **data)
Definition esp_http_client_port.c:1399
esp_err_t esp_http_client_get_header(esp_http_client_handle_t client, const char *key, char **value)
Definition esp_http_client_port.c:1304
esp_err_t esp_http_client_flush_response(esp_http_client_handle_t client, int *len)
Definition esp_http_client_port.c:1638
esp_err_t esp_http_client_set_auth_data(esp_http_client_handle_t client, const char *auth_data, int len)
Definition esp_http_client_port.c:1469
esp_err_t esp_http_client_close(esp_http_client_handle_t client)
Definition esp_http_client_port.c:963
HttpStatus_Code
Definition esp_http_client.h:174
@ HttpStatus_Unauthorized
Definition esp_http_client.h:185
@ HttpStatus_PartialContent
Definition esp_http_client.h:176
@ HttpStatus_SeeOther
Definition esp_http_client.h:180
@ HttpStatus_PermanentRedirect
Definition esp_http_client.h:183
@ HttpStatus_MultipleChoices
Definition esp_http_client.h:177
@ HttpStatus_Found
Definition esp_http_client.h:179
@ HttpStatus_InternalError
Definition esp_http_client.h:189
@ HttpStatus_NotFound
Definition esp_http_client.h:187
@ HttpStatus_Ok
Definition esp_http_client.h:175
@ HttpStatus_BadRequest
Definition esp_http_client.h:184
@ HttpStatus_RangeNotSatisfiable
Definition esp_http_client.h:188
@ HttpStatus_TemporaryRedirect
Definition esp_http_client.h:182
@ HttpStatus_MovedPermanently
Definition esp_http_client.h:178
@ HttpStatus_Forbidden
Definition esp_http_client.h:186
@ HttpStatus_NotModified
Definition esp_http_client.h:181
esp_err_t esp_http_client_delete_header(esp_http_client_handle_t client, const char *key)
Definition esp_http_client_port.c:1313
esp_http_client_proto_ver_t
Definition esp_http_client.h:114
@ ESP_HTTP_CLIENT_TLS_VER_TLS_1_2
Definition esp_http_client.h:116
@ ESP_HTTP_CLIENT_TLS_VER_MAX
Definition esp_http_client.h:118
@ ESP_HTTP_CLIENT_TLS_VER_ANY
Definition esp_http_client.h:115
@ ESP_HTTP_CLIENT_TLS_VER_TLS_1_3
Definition esp_http_client.h:117
int esp_http_client_read(esp_http_client_handle_t client, char *buffer, int len)
Definition esp_http_client_port.c:1105
esp_err_t esp_http_client_get_and_clear_last_tls_error(esp_http_client_handle_t client, int *esp_tls_error_code, int *esp_tls_flags)
Definition esp_http_client_port.c:1605
int64_t esp_http_client_fetch_headers(esp_http_client_handle_t client)
Definition esp_http_client_port.c:1063
esp_err_t esp_http_client_clear_response_buffer(esp_http_client_handle_t client)
Definition esp_http_client_port.c:1652
int esp_http_client_get_errno(esp_http_client_handle_t client)
Definition esp_http_client_port.c:1575
esp_http_client_auth_type_t
Definition esp_http_client.h:145
@ HTTP_AUTH_TYPE_NONE
Definition esp_http_client.h:146
@ HTTP_AUTH_TYPE_DIGEST
Definition esp_http_client.h:148
@ HTTP_AUTH_TYPE_BASIC
Definition esp_http_client.h:147
esp_err_t esp_http_client_set_password(esp_http_client_handle_t client, const char *password)
Definition esp_http_client_port.c:1422
esp_err_t esp_http_client_request_send(esp_http_client_handle_t client, int write_len)
Definition esp_http_client_port.c:1632
esp_err_t esp_http_client_set_method(esp_http_client_handle_t client, esp_http_client_method_t method)
Definition esp_http_client_port.c:1291
int64_t esp_http_client_get_content_length(esp_http_client_handle_t client)
Definition esp_http_client_port.c:1542
struct esp_http_client_event * esp_http_client_event_handle_t
Definition esp_http_client.h:72
esp_err_t esp_http_client_set_timeout_ms(esp_http_client_handle_t client, int timeout_ms)
Definition esp_http_client_port.c:1382
int esp_http_client_chunk_write_end(esp_http_client_handle_t client, bool last_chunk)
Definition esp_http_client_port.c:1636
esp_http_state_t
Definition esp_http_client.h:160
@ HTTP_STATE_UNINIT
Definition esp_http_client.h:161
@ HTTP_STATE_REQ_COMPLETE_DATA
Definition esp_http_client.h:166
@ HTTP_STATE_CLOSE
Definition esp_http_client.h:170
@ HTTP_STATE_CONNECTING
Definition esp_http_client.h:163
@ HTTP_STATE_REQ_COMPLETE_HEADER
Definition esp_http_client.h:165
@ HTTP_STATE_CONNECTED
Definition esp_http_client.h:164
@ HTTP_STATE_RES_COMPLETE_HEADER
Definition esp_http_client.h:167
@ HTTP_STATE_RES_COMPLETE_DATA
Definition esp_http_client.h:169
@ HTTP_STATE_RES_ON_DATA_START
Definition esp_http_client.h:168
@ HTTP_STATE_INIT
Definition esp_http_client.h:162
esp_err_t esp_http_client_open(esp_http_client_handle_t client, int write_len)
Definition esp_http_client_port.c:974
esp_err_t(* http_event_handle_cb)(esp_http_client_event_t *evt)
Definition esp_http_client.h:121
int esp_http_client_chunk_write_begin(esp_http_client_handle_t client, const int len)
Definition esp_http_client_port.c:1634
esp_http_client_event_id_t
Definition esp_http_client.h:76
@ HTTP_EVENT_HEADERS_SENT
Definition esp_http_client.h:79
@ HTTP_EVENT_REDIRECT
Definition esp_http_client.h:87
@ HTTP_EVENT_ON_HEADER
Definition esp_http_client.h:81
@ HTTP_EVENT_ON_HEADERS_COMPLETE
Definition esp_http_client.h:82
@ HTTP_EVENT_ON_CONNECTED
Definition esp_http_client.h:78
@ HTTP_EVENT_DISCONNECTED
Definition esp_http_client.h:86
@ HTTP_EVENT_ON_STATUS_CODE
Definition esp_http_client.h:83
@ HTTP_EVENT_ON_FINISH
Definition esp_http_client.h:85
@ HTTP_EVENT_HEADER_SENT
Definition esp_http_client.h:80
@ HTTP_EVENT_ERROR
Definition esp_http_client.h:77
@ HTTP_EVENT_ON_DATA
Definition esp_http_client.h:84
struct ieee80211_ext_chansw_ie data
Definition ieee80211.h:80
long long int64_t
Definition stdint.h:10
Definition esp_http_client.h:196
esp_http_client_transport_t transport_type
Definition esp_http_client.h:227
int timeout_ms
Definition esp_http_client.h:222
size_t client_cert_len
Definition esp_http_client.h:214
bool is_async
Definition esp_http_client.h:231
int buffer_size_tx
Definition esp_http_client.h:229
void * user_data
Definition esp_http_client.h:230
int max_authorization_retries
Definition esp_http_client.h:225
const char ** alpn_protos
Definition esp_http_client.h:242
int max_redirection_count
Definition esp_http_client.h:224
const char * username
Definition esp_http_client.h:200
const char * cert_pem
Definition esp_http_client.h:206
const char * client_cert_pem
Definition esp_http_client.h:211
const char * client_key_password
Definition esp_http_client.h:217
bool use_global_ca_store
Definition esp_http_client.h:232
const char * user_agent
Definition esp_http_client.h:220
const char * client_key_pem
Definition esp_http_client.h:215
int keep_alive_idle
Definition esp_http_client.h:237
size_t client_key_password_len
Definition esp_http_client.h:218
const char * password
Definition esp_http_client.h:201
esp_http_client_method_t method
Definition esp_http_client.h:221
http_event_handle_cb event_handler
Definition esp_http_client.h:226
const char * common_name
Definition esp_http_client.h:234
const char * query
Definition esp_http_client.h:204
const char * path
Definition esp_http_client.h:203
size_t cert_len
Definition esp_http_client.h:209
bool disable_auto_redirect
Definition esp_http_client.h:223
bool keep_alive_enable
Definition esp_http_client.h:236
int keep_alive_count
Definition esp_http_client.h:239
esp_http_client_auth_type_t auth_type
Definition esp_http_client.h:202
const char * client_cert_der
Definition esp_http_client.h:212
bool skip_cert_common_name_check
Definition esp_http_client.h:233
size_t client_key_len
Definition esp_http_client.h:216
int buffer_size
Definition esp_http_client.h:228
esp_http_client_proto_ver_t tls_version
Definition esp_http_client.h:219
int keep_alive_interval
Definition esp_http_client.h:238
const char * url
Definition esp_http_client.h:197
const char * cert_der
Definition esp_http_client.h:207
const char * host
Definition esp_http_client.h:198
esp_http_client_addr_type_t addr_type
Definition esp_http_client.h:243
int port
Definition esp_http_client.h:199
Definition esp_http_client.h:90
esp_http_client_event_id_t event_id
Definition esp_http_client.h:91
esp_http_client_handle_t client
Definition esp_http_client.h:92
void * data
Definition esp_http_client.h:93
char * header_key
Definition esp_http_client.h:96
char * header_value
Definition esp_http_client.h:97
int data_len
Definition esp_http_client.h:94
void * user_data
Definition esp_http_client.h:95
Definition esp_http_client.h:100
esp_http_client_handle_t client
Definition esp_http_client.h:101
int status_code
Definition esp_http_client.h:102
Definition esp_http_client_port.c:166
vk_av_control_value_t value
Definition vsf_audio.h:171
Generated from commit: vsfteam/vsf@015f4d1