dns_client: ipv4, ipv6 ecs, use either
This commit is contained in:
@@ -908,7 +908,7 @@ SSL_CTX *_ssl_ctx_get(void)
|
|||||||
pthread_mutex_unlock(&client.server_list_lock);
|
pthread_mutex_unlock(&client.server_list_lock);
|
||||||
return client.ssl_ctx;
|
return client.ssl_ctx;
|
||||||
errout:
|
errout:
|
||||||
|
|
||||||
pthread_mutex_unlock(&client.server_list_lock);
|
pthread_mutex_unlock(&client.server_list_lock);
|
||||||
if (ssl_ctx) {
|
if (ssl_ctx) {
|
||||||
SSL_CTX_free(ssl_ctx);
|
SSL_CTX_free(ssl_ctx);
|
||||||
@@ -2875,14 +2875,31 @@ static int _dns_client_send_packet(struct dns_query_struct *query, void *packet,
|
|||||||
|
|
||||||
static int _dns_client_dns_add_ecs(struct dns_packet *packet, int qtype)
|
static int _dns_client_dns_add_ecs(struct dns_packet *packet, int qtype)
|
||||||
{
|
{
|
||||||
|
int add_ipv4_ecs = 0;
|
||||||
|
int add_ipv6_ecs = 0;
|
||||||
|
|
||||||
if (qtype == DNS_T_A && client.ecs_ipv4.enable) {
|
if (qtype == DNS_T_A && client.ecs_ipv4.enable) {
|
||||||
|
add_ipv4_ecs = 1;
|
||||||
|
} else if (qtype == DNS_T_AAAA && client.ecs_ipv6.enable) {
|
||||||
|
add_ipv6_ecs = 1;
|
||||||
|
} else {
|
||||||
|
if (client.ecs_ipv4.enable) {
|
||||||
|
add_ipv4_ecs = 1;
|
||||||
|
} else if (client.ecs_ipv6.enable) {
|
||||||
|
add_ipv4_ecs = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (add_ipv4_ecs) {
|
||||||
struct dns_opt_ecs ecs;
|
struct dns_opt_ecs ecs;
|
||||||
ecs.family = DNS_ADDR_FAMILY_IP;
|
ecs.family = DNS_ADDR_FAMILY_IP;
|
||||||
ecs.source_prefix = client.ecs_ipv4.bitlen;
|
ecs.source_prefix = client.ecs_ipv4.bitlen;
|
||||||
ecs.scope_prefix = 0;
|
ecs.scope_prefix = 0;
|
||||||
memcpy(ecs.addr, client.ecs_ipv4.ipv4_addr, DNS_RR_A_LEN);
|
memcpy(ecs.addr, client.ecs_ipv4.ipv4_addr, DNS_RR_A_LEN);
|
||||||
return dns_add_OPT_ECS(packet, &ecs);
|
return dns_add_OPT_ECS(packet, &ecs);
|
||||||
} else if (qtype == DNS_T_AAAA && client.ecs_ipv6.enable) {
|
}
|
||||||
|
|
||||||
|
if (add_ipv6_ecs) {
|
||||||
struct dns_opt_ecs ecs;
|
struct dns_opt_ecs ecs;
|
||||||
ecs.family = DNS_ADDR_FAMILY_IPV6;
|
ecs.family = DNS_ADDR_FAMILY_IPV6;
|
||||||
ecs.source_prefix = client.ecs_ipv6.bitlen;
|
ecs.source_prefix = client.ecs_ipv6.bitlen;
|
||||||
@@ -2890,6 +2907,7 @@ static int _dns_client_dns_add_ecs(struct dns_packet *packet, int qtype)
|
|||||||
memcpy(ecs.addr, client.ecs_ipv6.ipv6_addr, DNS_RR_AAAA_LEN);
|
memcpy(ecs.addr, client.ecs_ipv6.ipv6_addr, DNS_RR_AAAA_LEN);
|
||||||
return dns_add_OPT_ECS(packet, &ecs);
|
return dns_add_OPT_ECS(packet, &ecs);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -44,6 +44,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#define DNS_MAX_EVENTS 256
|
#define DNS_MAX_EVENTS 256
|
||||||
|
#define DNS_SERVER_MAX_REPONSE_IPNUM 10
|
||||||
#define IPV6_READY_CHECK_TIME 180
|
#define IPV6_READY_CHECK_TIME 180
|
||||||
#define DNS_SERVER_TMOUT_TTL (5 * 60)
|
#define DNS_SERVER_TMOUT_TTL (5 * 60)
|
||||||
#define DNS_CONN_BUFF_SIZE 4096
|
#define DNS_CONN_BUFF_SIZE 4096
|
||||||
@@ -549,10 +550,14 @@ static int _dns_rrs_add_all_best_ip(struct dns_server_post_context *context)
|
|||||||
added_ipv6_addr = _dns_ip_address_get(request, request->ipv6_addr, DNS_T_AAAA);
|
added_ipv6_addr = _dns_ip_address_get(request, request->ipv6_addr, DNS_T_AAAA);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (true && context->ip_num < 10) {
|
while (true) {
|
||||||
pthread_mutex_lock(&request->ip_map_lock);
|
pthread_mutex_lock(&request->ip_map_lock);
|
||||||
hash_for_each_safe(request->ip_map, bucket, tmp, addr_map, node)
|
hash_for_each_safe(request->ip_map, bucket, tmp, addr_map, node)
|
||||||
{
|
{
|
||||||
|
if (context->ip_num >= DNS_SERVER_MAX_REPONSE_IPNUM) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (context->qtype != addr_map->addr_type) {
|
if (context->qtype != addr_map->addr_type) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user