domain-rules: new feature, support set speed-check-mode
This commit is contained in:
@@ -1935,6 +1935,19 @@ errout:
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void _dns_server_prolcess_speed_check_rule(struct dns_request *request)
|
||||
{
|
||||
struct dns_domain_check_order *check_order = NULL;
|
||||
|
||||
/* get domain rule flag */
|
||||
check_order = request->domain_rule.rules[DOMAIN_RULE_CHECKSPEED];
|
||||
if (check_order == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
request->check_order_list = check_order;
|
||||
}
|
||||
|
||||
static int _dns_server_process_cache(struct dns_request *request)
|
||||
{
|
||||
struct dns_cache *dns_cache = NULL;
|
||||
@@ -2109,6 +2122,17 @@ static const char *_dns_server_get_request_groupname(struct dns_request *request
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void _dns_server_check_set_passthrough(struct dns_request *request)
|
||||
{
|
||||
if (request->check_order_list->order[0] == DOMAIN_CHECK_NONE) {
|
||||
request->passthrough = 1;
|
||||
}
|
||||
|
||||
if (_dns_server_has_bind_flag(request, BIND_FLAG_NO_SPEED_CHECK) == 0) {
|
||||
request->passthrough = 1;
|
||||
}
|
||||
}
|
||||
|
||||
static int _dns_server_do_query(struct dns_request *request, const char *domain, int qtype)
|
||||
{
|
||||
int ret = -1;
|
||||
@@ -2143,6 +2167,12 @@ static int _dns_server_do_query(struct dns_request *request, const char *domain,
|
||||
goto clean_exit;
|
||||
}
|
||||
|
||||
/* process speed check rule */
|
||||
_dns_server_prolcess_speed_check_rule(request);
|
||||
|
||||
/* check and set passthrough */
|
||||
_dns_server_check_set_passthrough(request);
|
||||
|
||||
/* process cache */
|
||||
if (request->prefetch == 0) {
|
||||
if (_dns_server_process_cache(request) == 0) {
|
||||
@@ -2186,17 +2216,6 @@ errout:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void _dns_server_check_set_passthrough(struct dns_request *request, struct dns_server_conn_head *conn)
|
||||
{
|
||||
if (request->check_order_list->order[0] == DOMAIN_CHECK_NONE) {
|
||||
request->passthrough = 1;
|
||||
}
|
||||
|
||||
if (_dns_server_has_bind_flag(request, BIND_FLAG_NO_SPEED_CHECK) == 0) {
|
||||
request->passthrough = 1;
|
||||
}
|
||||
}
|
||||
|
||||
static int _dns_server_recv(struct dns_server_conn_head *conn, unsigned char *inpacket, int inpacket_len, struct sockaddr_storage *local, socklen_t local_len,
|
||||
struct sockaddr_storage *from, socklen_t from_len)
|
||||
{
|
||||
@@ -2254,7 +2273,6 @@ static int _dns_server_recv(struct dns_server_conn_head *conn, unsigned char *in
|
||||
|
||||
memcpy(&request->localaddr, local, local_len);
|
||||
_dns_server_request_set_client(request, conn);
|
||||
_dns_server_check_set_passthrough(request, conn);
|
||||
_dns_server_request_set_client_addr(request, from, from_len);
|
||||
_dns_server_request_set_id(request, packet->head.id);
|
||||
_dns_server_set_dualstack_selection(request);
|
||||
|
||||
Reference in New Issue
Block a user