192 Commits

Author SHA1 Message Date
Ashish Sharma
3282de557e fix(esp_http_server): take ctrl_sock_semaphore on shutdown and async wake
httpd_stop() and httpd_req_async_handler_complete() both pushed
messages onto the control mbox via cs_send_to_ctrl_sock() without
reserving a slot in ctrl_sock_semaphore. Once the silent-drop fix
made the semaphore unconditional, the bypass became a real bug:
when the mbox is saturated by pending httpd_queue_work() items the
unguarded sendto() can return ENOBUFS, and even when it succeeds it
leaves the semaphore overstating free slots until the consumer
drains the message — a window during which a concurrent
httpd_queue_work() can take a slot but still find the mbox full.

Acquire the semaphore (portMAX_DELAY) before both sends and give it
back on send failure so the take/give invariant is preserved. The
httpd task is the consumer in both paths, so blocking is bounded
and deadlock-free. Reword the stale "no-op give on full" comment in
httpd_process_ctrl_msg() to reflect that only the recv-error path
relies on the cap behavior now.
2026-05-26 17:21:24 +08:00
Ashish Sharma
c911c781ae fix(esp_http_server): prevent silent message drop in httpd_queue_work
Closes https://github.com/espressif/esp-idf/issues/18563
2026-05-26 17:21:23 +08:00
Ashish Sharma
0fb8ad002a fix(esp_http_server): fixes websocket recv error handling
Closes https://github.com/espressif/esp-idf/issues/18483
2026-05-06 14:26:31 +08:00
Ashish Sharma
3c2f81c6a8 feat(esp_http_server): adds check for crlf in response creation 2026-04-08 10:59:56 +08:00
Ashish Sharma
7e2e09c15c feat(esp_http_server): Adds support to bind an interface to server
Closes https://github.com/espressif/esp-idf/issues/17859
2026-03-24 17:38:01 +08:00
Ashish Sharma
b64c70acda fix: fixes memory leak with subprotocols 2026-03-23 18:37:21 +08:00
Ashish Sharma
9fc0ca13b3 fix: fixes websocket server possible null dereference 2026-03-23 18:37:21 +08:00
Peter Backeris
5dbab1d395 fix(esp_http_server): Dispatch PONG frames to WebSocket handler
PONG frames (opcode 0xA) were never dispatched to the user's WebSocket
handler despite an existing comment stating they should be. The dispatch
condition `ra->ws_type < HTTPD_WS_TYPE_CLOSE` excluded PONG (0xA)
since CLOSE is 0x8.

This caused a critical secondary bug: when the server sends PING frames
and the client responds with PONG, httpd_ws_recv_frame() is never
called for the PONG, leaving the remaining frame bytes (second_byte
plus 4-byte mask_key) unconsumed in the TCP buffer. On the next
WebSocket read, these orphaned bytes are misinterpreted as a new frame
header, causing either "WS frame is not properly masked" errors or
EAGAIN timeouts with garbage length values, effectively destroying
the connection.

Add `ra->ws_type == HTTPD_WS_TYPE_PONG` to the dispatch condition so
PONG frames reach the user handler, which calls httpd_ws_recv_frame()
to properly consume the frame bytes from the socket.

Closes https://github.com/espressif/esp-idf/issues/18227
2026-03-13 17:42:10 +08:00
Ashish Sharma
56d2fd6757 fix(esp_http_server): remove http server unused psa migration 2026-03-02 14:48:41 +08:00
Ashish Sharma
7aa56f8d68 fix(esp_http_server): fix ws server subprotocol match 2026-03-02 14:47:27 +08:00
Ashish Sharma
5028b6230f feat(http_server): improve websocket server handling
1. Adds post handshake callback
2. Removes requirement to handle HTTP_GET message in websocket handler

Closes https://github.com/espressif/esp-idf/issues/18215
2026-02-27 09:59:05 +08:00
Mahavir Jain
2f68594185 Merge branch 'contrib/github_pr_15622' into 'master'
Add support for partial websocket frame payload reads (GitHub PR)

Closes IDFGH-14913

See merge request espressif/esp-idf!44044
2026-01-30 18:22:06 +05:30
Mahavir Jain
b2507c3a82 Merge branch 'fix/stop_receive_on_ws_socket_close' into 'master'
fix: stop reading ws data when peer closes the connection

Closes IDFGH-16735

See merge request espressif/esp-idf!45078
2026-01-22 11:29:06 +05:30
Ashish Sharma
1a0da0c8b5 fix: stop reading ws data when peer closes the connection
Closes https://github.com/espressif/esp-idf/issues/17822
2026-01-19 13:29:41 +08:00
Ashish Sharma
ba25e86b82 fix: fixes potential ws server deadlock with blocking work queue
Closes https://github.com/espressif/esp-idf/issues/17591
2026-01-14 11:17:33 +08:00
nilesh.kale
93fcdda9f4 feat: add demo to receive websocket frame in chunks
This commit added demo to receive websocket single frame in chunks
using newly added API httpd_ws_recv_frame_part() with optimized memory.

closes https://github.com/espressif/esp-idf/pull/15622
2026-01-07 15:25:19 +05:30
mrsobakin
67339c5f4a feat(websocket): Support partial frame payload reads 2026-01-07 15:12:41 +05:30
Mahavir Jain
354e9ed64a feat(esp_http_server): Make httpd_handle_err API as public
This makes sense because httpd_register_err_handler API is
already public. So the above API complements this API.

Closes https://github.com/espressif/esp-idf/issues/17755
2025-12-31 10:23:07 +05:30
Ashish Sharma
fdd5ef561d feat: migrates esp_http_client and esp_http_server to PSA APIs 2025-12-30 09:31:49 +05:30
C.S.M
e3eaee53e2 Merge branch 'ci/esp32s31_build_ena' into 'master'
ci(esp32s31): Add ci build test for esp32s31

See merge request espressif/esp-idf!44045
2025-12-12 14:59:42 +08:00
Mahavir Jain
92c76fc280 Merge branch 'contrib/github_pr_17799' into 'master'
feat(esp_http_server): Make HTTP(S)_SERVER_EVENT events optional (GitHub PR)

Closes IDFGH-16707

See merge request espressif/esp-idf!43637
2025-12-11 18:10:52 +05:30
C.S.M
f405e51784 ci(esp32s31): Add ci build test for esp32s31 2025-12-11 15:17:15 +08:00
hrushikesh.bhosale
bdf438f0aa fix(http_server): Removed the build failure due to unused variables
There were build failure due the unused variable last_error when
ESP_HTTPS_SERVER_EVENTS and HTTPD_ENABLE_EVENTS are disabled
2025-12-11 12:33:03 +05:30
Ashish Sharma
69ea28c886 feat: add Kconfig option for mbedTLS 4.x 2025-12-01 14:05:05 +08:00
Jimmy Wennlund
bd85dad2cf feat(esp_http_server): Make HTTP(S)_SERVER_EVENT events optional
Make it possible to disable http(s) server events. This improves
performance of the server, as http server creates events on every signle
read or write to the socket.
2025-11-22 21:30:58 +01:00
Ashish Sharma
acf89924c8 feat(esp_http): migrate esp_http to PSA API 2025-10-26 10:13:14 +08:00
hrushikesh.bhosale
cfc056018c fix(esp_http_server): Fix async requests on same socket blocking issue
1. In async requests, if the two or more requests are made on same
socket then it used to block the second request.
2. The main thread is used to block on select call. And there done
no FD_SET for particular fd.

Closes https://github.com/espressif/esp-idf/issues/16998
2025-09-16 15:02:05 +05:30
Joonline
9e7074dd35 fix(http_server): Corrected initialization value for lru_counter at http session creation
Closes https://github.com/espressif/esp-idf/pull/17470
2025-09-12 15:31:27 +08:00
Mahavir Jain
b789445a67 Merge branch 'contrib/github_pr_17501' into 'master'
fix(esp_http_server): fix memory leak in httpd_req_async_handler_begin (GitHub PR)

Closes IDFGH-16361

See merge request espressif/esp-idf!41748
2025-09-10 13:15:36 +05:30
Salvatore Mesoraca
fd33d02563 fix(esp_http_server): fix memory leak in httpd_req_async_handler_begin
Free scratch memory when response headers allocation fails
2025-08-29 02:11:13 +02:00
Alexey Lapshin
28ced4efad fix(config): actualize newlib Kconfig options 2025-08-28 12:25:09 +08:00
Marek Fiala
9d35d63651 feat(cmake): Update minimum cmake version to 3.22 (whole repository) 2025-08-19 14:44:32 +02:00
Marius Vikhammer
4065fb20f3 Merge branch 'feature/esp_test_utils_component' into 'master'
change(test_utils): moved test_utils out of unit-test-app project

See merge request espressif/esp-idf!40678
2025-08-01 11:04:37 +08:00
Aditya Patwardhan
a783974d00 Merge branch 'feat/support_authentication_feature_for_ws' into 'master'
Added pre handshake callback for websocket

Closes IDF-13605

See merge request espressif/esp-idf!40706
2025-07-31 15:04:07 +05:30
hrushikesh.bhosale
a40ceffb19 feat(esp_http_server): Added pre handshake callback for websocket
1. If the user wants authenticate the request, then user needs to do
this before upgrading the protocol to websocket.
2. To achieve this, added pre_handshake_callack, which will execute
before handshake, i.e. before switching protocol.
2025-07-31 11:06:18 +05:30
Ashish Sharma
6b02906822 fix(security): improve memory allocation handling in multiple components 2025-07-28 10:05:50 +08:00
Marius Vikhammer
bf84ab652a change(test_utils): moved test_utils component to tools/test_apps/components/ 2025-07-21 14:05:50 +08:00
Mahavir Jain
464d03f999 Merge branch 'contrib/github_pr_15767' into 'master'
fix(esp_http_server): WebSocket frame parsing errors (GitHub PR)

Closes IDFGH-15086 and IDFGH-14461

See merge request espressif/esp-idf!40076
2025-07-16 13:58:37 +05:30
Vincent Hamp
ab07377b11 fix(esp_http_server): WebSocket frame parsing errors
Fixes the Websocket frame pasring error, by making sure
that two bytes are read compulsary for length bytes 126.

Closes https://github.com/espressif/esp-idf/pull/15767
Closes https://github.com/espressif/esp-idf/issues/15235
2025-07-15 11:26:35 +05:30
hrushikesh.bhosale
9f6ab55a5b feat(http_server): Added API to get scratch buffer data
1. Added the API in esp_http_server to get the raw headers data
from the scratch buffer.
2. This data will be unparsed.

Closes https://github.com/espressif/esp-idf/issues/15857
2025-07-09 18:36:52 +05:30
iranl
42704821d2 fix(esp_http_server): Fix regression in httpd_cookie_key_value
Fix regression in httpd_cookie_key_value introduced by commit 4a47cf8
2025-07-02 08:39:20 +02:00
hrushikesh.bhosale
542d07d34a feat(http_server): httpd register handler strdup failure case check
In httpd_register_uri_handler api, for the strdup function failure case was not
checked and not returned any error by freeing previously allocated memory, if the memory
allocation for strdup function did not gets successful.

Closes https://github.com/espressif/esp-idf/issues/15878
2025-05-13 11:27:02 +05:30
hrushikesh.bhosale
b6d4fa2c2e fix(async_handler): Async handler example scratch buffer fix
1. In httpd_req_async_handler_begin, the httpd_req_aux is locally malloced
and data is  done memcpy to local httpd_req_aux from request'ss httpd_req_aux for
async request use-case, this causes scartch pointer from these two structs
pointing to same memory address.
2. In current workflow, the request's sratch buffer is freed in httpd_parse.c
httpd_req_cleanup api. Therefore if the user try to fetch the data (like headers)
from the scratch buffer, data will be not available.
3. Each request should have the deep copy of the scratch buffer. To retrive
the data later.

Closes https://github.com/espressif/esp-idf/issues/15587
2025-04-28 14:57:21 +08:00
Aditya Patwardhan
bb9f73a786 Merge branch 'contrib/github_pr_15821' into 'master'
fix(esp_http_server): Fix incorrect spelling in the comments (GitHub PR)

Closes IDFGH-15144

See merge request espressif/esp-idf!38569
2025-04-23 20:42:03 +08:00
harshal.patil
e738ec5ccd fix(esp-tls): Fix build failure when CONFIG_MBEDTLS_SHA1_C is disabled 2025-04-21 13:38:29 +05:30
WangLei1993
a2ce331ef9 fix(esp_http_server): Fix incorrect spelling in the comments 2025-04-20 15:57:03 +08:00
Mahavir Jain
c263a3f9c5 Merge branch 'contrib/github_pr_15288' into 'master'
Improve httpd string value fetching efficiency (GitHub PR)

Closes IDFGH-14524

See merge request espressif/esp-idf!37301
2025-04-06 19:17:28 +08:00
hrushikesh.bhosale
4a47cf803c feat(esp_http_server/httpd_parse): Cosmetic changes in httpd_parse.c
Removed the unused variable buf_len
2025-04-04 16:45:11 +05:30
Chen Jichang
c34b4eb882 feat(esp32h4): enable ESP32H4 ci build 2025-03-28 14:41:28 +08:00
Mahavir Jain
884c85536d Merge branch 'bugfix/http_ws_api_reference' into 'master'
fix(esp_http_server): enable doxygen build for websocket API reference

Closes IDFGH-14785

See merge request espressif/esp-idf!37529
2025-03-11 19:12:36 +08:00