mirror of
https://github.com/espressif/esp-idf.git
synced 2026-05-05 20:35:08 +02:00
feat(http_client): Add support for TLS session tickets
This commit is contained in:
@@ -211,6 +211,28 @@ void esp_transport_ssl_set_keep_alive(esp_transport_handle_t t, esp_transport_ke
|
||||
*/
|
||||
void esp_transport_ssl_set_interface_name(esp_transport_handle_t t, struct ifreq *if_name);
|
||||
|
||||
#ifdef CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS
|
||||
/**
|
||||
* @brief Session ticket operation
|
||||
*/
|
||||
typedef enum {
|
||||
ESP_TRANSPORT_SESSION_TICKET_INIT, /*!< Allocate and initialize a TLS session */
|
||||
ESP_TRANSPORT_SESSION_TICKET_SAVE, /*!< Save TLS session so it can be restored for the next handshake */
|
||||
ESP_TRANSPORT_SESSION_TICKET_USE, /*!< Use already saved session to reconnect faster */
|
||||
ESP_TRANSPORT_SESSION_TICKET_FREE /*!< Deallocate and deinit the TLS session */
|
||||
} esp_transport_session_ticket_operation_t;
|
||||
|
||||
/**
|
||||
* @brief Perform desired session ticket operation (init, save, use)
|
||||
*
|
||||
* @param[in] t The transport handle
|
||||
* @param[in] operation Operation to perform with TLS session
|
||||
*
|
||||
* @note This operation is only available if CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS=y
|
||||
*/
|
||||
esp_err_t esp_transport_ssl_session_ticket_operation(esp_transport_handle_t t, esp_transport_session_ticket_operation_t operation);
|
||||
#endif // CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -38,6 +38,9 @@ typedef struct transport_esp_tls {
|
||||
bool ssl_initialized;
|
||||
transport_ssl_conn_state_t conn_state;
|
||||
int sockfd;
|
||||
#ifdef CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS
|
||||
esp_tls_client_session_t *session_ticket;
|
||||
#endif
|
||||
} transport_esp_tls_t;
|
||||
|
||||
/**
|
||||
@@ -523,6 +526,9 @@ esp_transport_handle_t esp_transport_ssl_init(void)
|
||||
|
||||
void esp_transport_esp_tls_destroy(struct transport_esp_tls *transport_esp_tls)
|
||||
{
|
||||
#ifdef CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS
|
||||
esp_tls_free_client_session(transport_esp_tls->session_ticket);
|
||||
#endif
|
||||
free(transport_esp_tls);
|
||||
}
|
||||
|
||||
@@ -548,3 +554,32 @@ void esp_transport_tcp_set_interface_name(esp_transport_handle_t t, struct ifreq
|
||||
{
|
||||
return esp_transport_ssl_set_interface_name(t, if_name);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS
|
||||
esp_err_t esp_transport_ssl_session_ticket_operation(esp_transport_handle_t t, esp_transport_session_ticket_operation_t operation)
|
||||
{
|
||||
transport_esp_tls_t *ssl = ssl_get_context_data(t);
|
||||
if (!ssl) {
|
||||
return ESP_FAIL;
|
||||
}
|
||||
switch (operation) {
|
||||
case ESP_TRANSPORT_SESSION_TICKET_INIT:
|
||||
break;
|
||||
case ESP_TRANSPORT_SESSION_TICKET_SAVE:
|
||||
esp_tls_free_client_session(ssl->session_ticket);
|
||||
ssl->session_ticket = esp_tls_get_client_session(ssl->tls);
|
||||
break;
|
||||
case ESP_TRANSPORT_SESSION_TICKET_USE:
|
||||
if (ssl->session_ticket == NULL) {
|
||||
return ESP_ERR_INVALID_STATE;
|
||||
}
|
||||
ssl->cfg.client_session = ssl->session_ticket;
|
||||
break;
|
||||
case ESP_TRANSPORT_SESSION_TICKET_FREE:
|
||||
esp_tls_free_client_session(ssl->session_ticket);
|
||||
ssl->session_ticket = NULL;
|
||||
break;
|
||||
}
|
||||
return ESP_OK;
|
||||
}
|
||||
#endif // CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS
|
||||
|
||||
Reference in New Issue
Block a user