mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-01 18:50:34 +03:00
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.
This commit is contained in:
committed by
Hrushikesh Bhosale
parent
8f3d8b41c3
commit
6036ec961d
@@ -17,6 +17,7 @@
|
||||
|
||||
#include <esp_http_server.h>
|
||||
#include "osal.h"
|
||||
#include "sdkconfig.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -591,6 +592,8 @@ esp_err_t httpd_sess_close_lru_direct(struct httpd_data *hd);
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_HTTPD_ENABLE_EVENTS
|
||||
|
||||
#if CONFIG_HTTPD_SERVER_EVENT_POST_TIMEOUT == -1
|
||||
#define ESP_HTTP_SERVER_EVENT_POST_TIMEOUT portMAX_DELAY
|
||||
#else
|
||||
@@ -603,6 +606,14 @@ esp_err_t httpd_sess_close_lru_direct(struct httpd_data *hd);
|
||||
*/
|
||||
void esp_http_server_dispatch_event(int32_t event_id, const void* event_data, size_t event_data_size);
|
||||
|
||||
#else // CONFIG_HTTPD_ENABLE_EVENTS
|
||||
#define esp_http_server_dispatch_event(event_id, event_data, event_data_size) do {} while(0)
|
||||
#endif // CONFIG_HTTPD_ENABLE_EVENTS
|
||||
|
||||
|
||||
esp_err_t httpd_crypto_sha1(const uint8_t *data, size_t data_len, uint8_t *hash);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -38,6 +38,7 @@ typedef struct {
|
||||
|
||||
static const char *TAG = "httpd";
|
||||
|
||||
#ifdef CONFIG_HTTPD_ENABLE_EVENTS
|
||||
ESP_EVENT_DEFINE_BASE(ESP_HTTP_SERVER_EVENT);
|
||||
|
||||
void esp_http_server_dispatch_event(int32_t event_id, const void* event_data, size_t event_data_size)
|
||||
@@ -47,6 +48,7 @@ void esp_http_server_dispatch_event(int32_t event_id, const void* event_data, si
|
||||
ESP_LOGE(TAG, "Failed to post esp_http_server event: %s", esp_err_to_name(err));
|
||||
}
|
||||
}
|
||||
#endif // CONFIG_HTTPD_ENABLE_EVENTS
|
||||
|
||||
static esp_err_t httpd_accept_conn(struct httpd_data *hd, int listen_fd)
|
||||
{
|
||||
|
||||
@@ -330,12 +330,14 @@ esp_err_t httpd_resp_send(httpd_req_t *r, const char *buf, ssize_t buf_len)
|
||||
return ESP_ERR_HTTPD_RESP_SEND;
|
||||
}
|
||||
}
|
||||
hd->http_server_state = HTTP_SERVER_EVENT_SENT_DATA;
|
||||
#ifdef CONFIG_HTTPD_ENABLE_EVENTS
|
||||
esp_http_server_event_data evt_data = {
|
||||
.fd = ra->sd->fd,
|
||||
.data_len = buf_len,
|
||||
};
|
||||
hd->http_server_state = HTTP_SERVER_EVENT_SENT_DATA;
|
||||
esp_http_server_dispatch_event(HTTP_SERVER_EVENT_SENT_DATA, &evt_data, sizeof(esp_http_server_event_data));
|
||||
#endif // CONFIG_HTTPD_ENABLE_EVENTS
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
@@ -430,12 +432,14 @@ esp_err_t httpd_resp_send_chunk(httpd_req_t *r, const char *buf, ssize_t buf_len
|
||||
if (httpd_send_all(r, "\r\n", strlen("\r\n")) != ESP_OK) {
|
||||
return ESP_ERR_HTTPD_RESP_SEND;
|
||||
}
|
||||
hd->http_server_state = HTTP_SERVER_EVENT_SENT_DATA;
|
||||
#ifdef CONFIG_HTTPD_ENABLE_EVENTS
|
||||
esp_http_server_event_data evt_data = {
|
||||
.fd = ra->sd->fd,
|
||||
.data_len = buf_len,
|
||||
};
|
||||
hd->http_server_state = HTTP_SERVER_EVENT_SENT_DATA;
|
||||
esp_http_server_dispatch_event(HTTP_SERVER_EVENT_SENT_DATA, &evt_data, sizeof(esp_http_server_event_data));
|
||||
#endif // CONFIG_HTTPD_ENABLE_EVENTS
|
||||
|
||||
return ESP_OK;
|
||||
}
|
||||
@@ -646,11 +650,13 @@ int httpd_req_recv(httpd_req_t *r, char *buf, size_t buf_len)
|
||||
ESP_LOGD(TAG, LOG_FMT("received length = %d"), ret);
|
||||
struct httpd_data *hd = (struct httpd_data *) r->handle;
|
||||
hd->http_server_state = HTTP_SERVER_EVENT_ON_DATA;
|
||||
#ifdef CONFIG_HTTPD_ENABLE_EVENTS
|
||||
esp_http_server_event_data evt_data = {
|
||||
.fd = ra->sd->fd,
|
||||
.data_len = ret,
|
||||
};
|
||||
esp_http_server_dispatch_event(HTTP_SERVER_EVENT_ON_DATA, &evt_data, sizeof(esp_http_server_event_data));
|
||||
#endif // CONFIG_HTTPD_ENABLE_EVENTS
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user