domain-rules: new feature, support set speed-check-mode

This commit is contained in:
Nick Peng
2020-02-05 23:20:29 +08:00
parent 80174d9da5
commit 4bd6c025db
6 changed files with 311 additions and 166 deletions

View File

@@ -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);