mirror of
https://github.com/espressif/esp-protocols.git
synced 2025-11-06 01:21:37 +01:00
156 lines
4.9 KiB
C
156 lines
4.9 KiB
C
|
|
/*
|
||
|
|
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
|
||
|
|
*
|
||
|
|
* SPDX-License-Identifier: Apache-2.0
|
||
|
|
*/
|
||
|
|
#pragma once
|
||
|
|
|
||
|
|
#include "sdkconfig.h"
|
||
|
|
#include "esp_err.h"
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
extern "C" {
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#define ESP_DNS_DEFAULT_TCP_PORT 53 /* Default TCP port for DNS */
|
||
|
|
#define ESP_DNS_DEFAULT_DOT_PORT 853 /* Default TLS port for DNS over TLS */
|
||
|
|
#define ESP_DNS_DEFAULT_DOH_PORT 443 /* Default HTTPS port for DNS over HTTPS */
|
||
|
|
|
||
|
|
#define ESP_DNS_DEFAULT_TIMEOUT_MS 10000 /* Default timeout for DNS queries in milliseconds */
|
||
|
|
|
||
|
|
typedef enum {
|
||
|
|
ESP_DNS_PROTOCOL_UDP, /* Traditional UDP DNS (Port 53) */
|
||
|
|
ESP_DNS_PROTOCOL_TCP, /* TCP DNS (Port 53) */
|
||
|
|
ESP_DNS_PROTOCOL_DOT, /* DNS over TLS (Port 853) */
|
||
|
|
ESP_DNS_PROTOCOL_DOH, /* DNS over HTTPS (Port 443) */
|
||
|
|
} esp_dns_protocol_type_t;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief DNS configuration structure
|
||
|
|
*/
|
||
|
|
typedef struct {
|
||
|
|
/* Basic protocol selection */
|
||
|
|
esp_dns_protocol_type_t protocol; /* DNS protocol type */
|
||
|
|
|
||
|
|
/* Common settings */
|
||
|
|
const char *dns_server; /* DNS server IP address or hostname */
|
||
|
|
uint16_t port; /* Custom port number (if not using default) */
|
||
|
|
uint32_t timeout_ms; /* Query timeout in milliseconds */
|
||
|
|
|
||
|
|
/* Secure protocol options */
|
||
|
|
struct {
|
||
|
|
const char *cert_pem; /* SSL server certification in PEM format as string */
|
||
|
|
esp_err_t (*crt_bundle_attach)(void *conf); /* Function pointer to attach cert bundle */
|
||
|
|
} tls_config; /* Used for DoT, DoH, DoH3, DNSCrypt, DoQ */
|
||
|
|
|
||
|
|
/* Protocol-specific options */
|
||
|
|
union {
|
||
|
|
/* DoH options */
|
||
|
|
struct {
|
||
|
|
const char *url_path; /* URL path for DoH service (e.g., "/dns-query") */
|
||
|
|
} doh_config; /* DNS over HTTPS configuration */
|
||
|
|
} protocol_config; /* Protocol-specific configuration */
|
||
|
|
} esp_dns_config_t;
|
||
|
|
|
||
|
|
typedef struct esp_dns_handle* esp_dns_handle_t;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Initialize DNS over HTTPS (DoH) module
|
||
|
|
*
|
||
|
|
* Sets up the DoH service using the provided configuration. Validates the parameters,
|
||
|
|
* sets the protocol, and initializes the DNS module.
|
||
|
|
*
|
||
|
|
* @param config Pointer to the DNS configuration structure
|
||
|
|
*
|
||
|
|
* @return Handle to the initialized DoH module on success, NULL on failure
|
||
|
|
*/
|
||
|
|
esp_dns_handle_t esp_dns_init_doh(esp_dns_config_t *config);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Initialize DNS over TLS (DoT) module
|
||
|
|
*
|
||
|
|
* Sets up the DoT service using the provided configuration. Validates the parameters,
|
||
|
|
* sets the protocol, and initializes the DNS module.
|
||
|
|
*
|
||
|
|
* @param config Pointer to the DNS configuration structure
|
||
|
|
*
|
||
|
|
* @return Handle to the initialized DoT module on success, NULL on failure
|
||
|
|
*/
|
||
|
|
esp_dns_handle_t esp_dns_init_dot(esp_dns_config_t *config);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Initialize TCP DNS module
|
||
|
|
*
|
||
|
|
* Sets up the TCP DNS service using the provided configuration. Validates the parameters,
|
||
|
|
* sets the protocol, and initializes the DNS module.
|
||
|
|
*
|
||
|
|
* @param config Pointer to the DNS configuration structure
|
||
|
|
*
|
||
|
|
* @return Handle to the initialized TCP module on success, NULL on failure
|
||
|
|
*/
|
||
|
|
esp_dns_handle_t esp_dns_init_tcp(esp_dns_config_t *config);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Initialize UDP DNS module
|
||
|
|
*
|
||
|
|
* Sets up the UDP DNS service using the provided configuration. Validates the parameters,
|
||
|
|
* sets the protocol, and initializes the DNS module.
|
||
|
|
*
|
||
|
|
* @param config Pointer to the DNS configuration structure
|
||
|
|
*
|
||
|
|
* @return Handle to the initialized UDP module on success, NULL on failure
|
||
|
|
*/
|
||
|
|
esp_dns_handle_t esp_dns_init_udp(esp_dns_config_t *config);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Clean up DNS over HTTPS (DoH) module
|
||
|
|
*
|
||
|
|
* Releases resources allocated for the DoH service. Validates the parameters,
|
||
|
|
* checks the protocol, and cleans up the DNS module.
|
||
|
|
*
|
||
|
|
* @param handle Pointer to the DNS handle to be cleaned up
|
||
|
|
*
|
||
|
|
* @return 0 on success, -1 on failure
|
||
|
|
*/
|
||
|
|
int esp_dns_cleanup_doh(esp_dns_handle_t handle);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Clean up DNS over TLS (DoT) module
|
||
|
|
*
|
||
|
|
* Releases resources allocated for the DoT service. Validates the parameters,
|
||
|
|
* checks the protocol, and cleans up the DNS module.
|
||
|
|
*
|
||
|
|
* @param handle Pointer to the DNS handle to be cleaned up
|
||
|
|
*
|
||
|
|
* @return 0 on success, -1 on failure
|
||
|
|
*/
|
||
|
|
int esp_dns_cleanup_dot(esp_dns_handle_t handle);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Clean up TCP DNS module
|
||
|
|
*
|
||
|
|
* Releases resources allocated for the TCP DNS service. Validates the parameters,
|
||
|
|
* checks the protocol, and cleans up the DNS module.
|
||
|
|
*
|
||
|
|
* @param handle Pointer to the DNS handle to be cleaned up
|
||
|
|
*
|
||
|
|
* @return 0 on success, -1 on failure
|
||
|
|
*/
|
||
|
|
int esp_dns_cleanup_tcp(esp_dns_handle_t handle);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Clean up UDP DNS module
|
||
|
|
*
|
||
|
|
* Releases resources allocated for the UDP DNS service. Validates the parameters,
|
||
|
|
* checks the protocol, and cleans up the DNS module.
|
||
|
|
*
|
||
|
|
* @param handle Pointer to the DNS handle to be cleaned up
|
||
|
|
*
|
||
|
|
* @return 0 on success, -1 on failure
|
||
|
|
*/
|
||
|
|
int esp_dns_cleanup_udp(esp_dns_handle_t handle);
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
}
|
||
|
|
#endif
|