dns_server: optimize code
This commit is contained in:
10
Dockerfile
10
Dockerfile
@@ -1,15 +1,15 @@
|
||||
FROM ubuntu:latest as smartdns-builder
|
||||
|
||||
COPY . /smartdns/
|
||||
RUN apt update && \
|
||||
apt install -y make gcc libssl-dev && \
|
||||
cd smartdns && \
|
||||
sh ./package/build-pkg.sh --platform debian --arch `dpkg --print-architecture`
|
||||
RUN apt update && \
|
||||
apt install -y make gcc libssl-dev && \
|
||||
cd smartdns && \
|
||||
sh ./package/build-pkg.sh --platform debian --arch `dpkg --print-architecture`
|
||||
|
||||
FROM ubuntu:latest
|
||||
COPY --from=smartdns-builder /smartdns/package/*.deb /opt/
|
||||
RUN dpkg -i /opt/*.deb && \
|
||||
rm /opt/*deb -fr
|
||||
rm /opt/*.deb -fr
|
||||
|
||||
EXPOSE 53/udp
|
||||
VOLUME "/etc/smartdns/"
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
#define DNS_SERVER_TMOUT_TTL (5 * 60)
|
||||
#define DNS_SERVER_FAIL_TTL (60)
|
||||
#define DNS_CONN_BUFF_SIZE 4096
|
||||
#define DNS_REQUEST_MAX_TIMEOUT 900
|
||||
#define DNS_REQUEST_MAX_TIMEOUT 950
|
||||
#define DNS_PING_TIMEOUT (DNS_REQUEST_MAX_TIMEOUT)
|
||||
#define DNS_PING_CHECK_INTERVAL (250)
|
||||
#define DNS_PING_SECOND_TIMEOUT (DNS_REQUEST_MAX_TIMEOUT - DNS_PING_CHECK_INTERVAL)
|
||||
@@ -455,6 +455,7 @@ static void _dns_server_audit_log(struct dns_server_post_context *context)
|
||||
int total_len = 0;
|
||||
int ip_num = 0;
|
||||
struct dns_request *request = context->request;
|
||||
int has_soa = request->has_soa;
|
||||
|
||||
if (dns_audit == NULL || !dns_conf_audit_enable || context->do_audit == 0) {
|
||||
return;
|
||||
@@ -481,6 +482,8 @@ static void _dns_server_audit_log(struct dns_server_post_context *context)
|
||||
|
||||
len =
|
||||
snprintf(ip_msg + total_len, left_len, fmt, ipv4_addr[0], ipv4_addr[1], ipv4_addr[2], ipv4_addr[3]);
|
||||
ip_num++;
|
||||
has_soa = 0;
|
||||
} break;
|
||||
case DNS_T_AAAA: {
|
||||
unsigned char ipv6_addr[16];
|
||||
@@ -494,35 +497,38 @@ static void _dns_server_audit_log(struct dns_server_post_context *context)
|
||||
req_host[0] = '\0';
|
||||
inet_ntop(AF_INET6, ipv6_addr, req_host, sizeof(req_host));
|
||||
len = snprintf(ip_msg + total_len, left_len, fmt, req_host);
|
||||
ip_num++;
|
||||
has_soa = 0;
|
||||
} break;
|
||||
case DNS_T_SOA: {
|
||||
left_len = 0;
|
||||
request->has_soa = 1;
|
||||
break;
|
||||
}
|
||||
if (ip_num == 0) {
|
||||
has_soa = 1;
|
||||
}
|
||||
} break;
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
|
||||
if (len <= 0 || len >= left_len) {
|
||||
if (len < 0 || len >= left_len) {
|
||||
left_len = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
ip_num++;
|
||||
|
||||
request->has_soa = 0;
|
||||
left_len -= len;
|
||||
total_len += len;
|
||||
}
|
||||
}
|
||||
|
||||
if (request->has_soa || ip_num == 0) {
|
||||
if (has_soa && ip_num == 0) {
|
||||
if (!dns_conf_audit_log_SOA) {
|
||||
return;
|
||||
}
|
||||
|
||||
snprintf(req_result, left_len, "SOA");
|
||||
if (request->dualstack_selection_force_soa) {
|
||||
snprintf(req_result, left_len, "dualstack soa");
|
||||
} else {
|
||||
snprintf(req_result, left_len, "soa");
|
||||
}
|
||||
}
|
||||
|
||||
gethost_by_addr(req_host, sizeof(req_host), &request->addr);
|
||||
@@ -2051,8 +2057,8 @@ static int _dns_server_check_speed(struct dns_request *request, char *ip)
|
||||
ping_timeout = ping_timeout - (now - request->send_tick);
|
||||
if (ping_timeout > DNS_PING_TIMEOUT) {
|
||||
ping_timeout = DNS_PING_TIMEOUT;
|
||||
} else if (ping_timeout < 10) {
|
||||
ping_timeout = 10;
|
||||
} else if (ping_timeout < 200) {
|
||||
ping_timeout = 200;
|
||||
}
|
||||
|
||||
port = request->check_order_list->orders[order].tcp_port;
|
||||
@@ -4400,6 +4406,11 @@ static int _dns_server_process(struct dns_server_conn_head *conn, struct epoll_e
|
||||
} else if (conn->type == DNS_CONN_TYPE_TCP_CLIENT) {
|
||||
struct dns_server_conn_tcp_client *tcpclient = (struct dns_server_conn_tcp_client *)conn;
|
||||
ret = _dns_server_process_tcp(tcpclient, event, now);
|
||||
if (ret != 0) {
|
||||
char name[DNS_MAX_CNAME_LEN];
|
||||
tlog(TLOG_ERROR, "process TCP packet from %s failed.",
|
||||
gethost_by_addr(name, sizeof(name), (struct sockaddr *)&tcpclient->addr));
|
||||
}
|
||||
} else if (conn->type == DNS_CONN_TYPE_TLS_SERVER) {
|
||||
tlog(TLOG_ERROR, "unsupport dns server type %d", conn->type);
|
||||
ret = -1;
|
||||
|
||||
Reference in New Issue
Block a user