mirror of
https://github.com/espressif/esp-protocols.git
synced 2025-11-06 17:41:39 +01:00
111 lines
2.9 KiB
C
111 lines
2.9 KiB
C
|
|
/*
|
||
|
|
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
|
||
|
|
*
|
||
|
|
* SPDX-License-Identifier: Apache-2.0
|
||
|
|
*/
|
||
|
|
#include "esp_dns_priv.h"
|
||
|
|
#include "esp_dns.h"
|
||
|
|
|
||
|
|
|
||
|
|
#define TAG "ESP_DNS_UDP"
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Initializes the 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)
|
||
|
|
{
|
||
|
|
ESP_LOGD(TAG, "Initializing UDP DNS");
|
||
|
|
|
||
|
|
/* Validate parameters */
|
||
|
|
if (config == NULL) {
|
||
|
|
ESP_LOGE(TAG, "Invalid configuration (NULL)");
|
||
|
|
return NULL;
|
||
|
|
}
|
||
|
|
|
||
|
|
config->protocol = ESP_DNS_PROTOCOL_UDP;
|
||
|
|
|
||
|
|
esp_dns_handle_t handle = esp_dns_init(config);
|
||
|
|
if (handle == NULL) {
|
||
|
|
ESP_LOGE(TAG, "Failed to initialize DNS");
|
||
|
|
return NULL;
|
||
|
|
}
|
||
|
|
|
||
|
|
ESP_LOGD(TAG, "DNS module initialized successfully with protocol DNS Over UDP(%d)", config->protocol);
|
||
|
|
return handle;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Cleans up the 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)
|
||
|
|
{
|
||
|
|
ESP_LOGD(TAG, "Cleaning up UDP DNS");
|
||
|
|
|
||
|
|
/* Validate parameters */
|
||
|
|
if (handle == NULL) {
|
||
|
|
ESP_LOGE(TAG, "Invalid handle (NULL)");
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (handle->config.protocol != ESP_DNS_PROTOCOL_UDP) {
|
||
|
|
ESP_LOGW(TAG, "Unknown protocol during cleanup: %d", handle->config.protocol);
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
|
||
|
|
int ret = esp_dns_cleanup(handle);
|
||
|
|
if (ret != 0) {
|
||
|
|
ESP_LOGE(TAG, "Failed to cleanup DNS");
|
||
|
|
return ret;
|
||
|
|
}
|
||
|
|
|
||
|
|
/* Empty the handle */
|
||
|
|
memset(handle, 0, sizeof(*handle));
|
||
|
|
|
||
|
|
ESP_LOGD(TAG, "DNS module cleaned up DNS Over UDP successfully");
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Resolves a hostname using UDP DNS
|
||
|
|
*
|
||
|
|
* Performs DNS resolution over UDP for the given hostname. Creates a UDP connection,
|
||
|
|
* sends the DNS query, and processes the response.
|
||
|
|
*
|
||
|
|
* @note This function is a placeholder and does not contain the actual implementation
|
||
|
|
* for UDP DNS resolution. The implementation needs to be added.
|
||
|
|
* As of now the resolution is performed by lwip dns module.
|
||
|
|
*
|
||
|
|
* @param handle DNS handle
|
||
|
|
* @param name Hostname to resolve
|
||
|
|
* @param addr Pointer to store the resolved IP address
|
||
|
|
* @param rrtype DNS record type
|
||
|
|
*
|
||
|
|
* @return ERR_OK on success, error code on failure
|
||
|
|
*/
|
||
|
|
err_t dns_resolve_udp(const esp_dns_handle_t handle, const char *name, ip_addr_t *addr, u8_t rrtype)
|
||
|
|
{
|
||
|
|
// TBD: Implement UDP DNS resolution
|
||
|
|
if (addr == NULL) {
|
||
|
|
return ERR_ARG;
|
||
|
|
}
|
||
|
|
|
||
|
|
return ERR_OK;
|
||
|
|
}
|