Skip to content

Commit c0cd2d7

Browse files
author
Miaoren Xia
committed
add OnlyForLocal for ipv6First Option
1 parent f8476b2 commit c0cd2d7

File tree

3 files changed

+20
-15
lines changed

3 files changed

+20
-15
lines changed

src/Config.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,9 @@ Config *Config::load_json_config(const std::string &filename) {
283283
case 2:
284284
config->ipv6First = IPv6Mode::Full;
285285
break;
286+
case 3:
287+
config->ipv6First = IPv6Mode::OnlyForLocal;
288+
break;
286289
default:
287290
std::cerr << "err type number of ipv6First mode" << std::endl;
288291
return nullptr;

src/Config.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ class Config {
2323
enum class IPv6Mode {
2424
Off = 0,
2525
OnlyForRemote = 1,
26-
Full = 2
26+
Full = 2,
27+
OnlyForLocal = 3
2728
};
2829

2930
struct Local {

src/DnsHandler.cpp

+15-14
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,9 @@ bool add_upstream(char * /* buf */, ssize_t /* n */, Upstream *upstream) {
8888

8989
bool use_ipv6_lookup(const Upstream *upstream) {
9090
return (Config::IPv6Mode::Full == config->ipv6First or
91-
(!upstream->dns1.use_localnet_dns_server ? Config::IPv6Mode::OnlyForRemote ==
92-
config->ipv6First : false));
91+
(upstream->dns1.use_localnet_dns_server ?
92+
config->ipv6First == Config::IPv6Mode::OnlyForLocal
93+
: config->ipv6First == Config::IPv6Mode::OnlyForRemote));
9394
}
9495

9596
Upstream *check(char *buf, ssize_t &n, bool tcp = false, int epollfd = 0) {
@@ -181,7 +182,7 @@ Upstream *check(char *buf, ssize_t &n, bool tcp = false, int epollfd = 0) {
181182
struct epoll_event ev{};
182183
ev.events = EPOLLET | EPOLLOUT | EPOLLRDHUP;
183184
ev.data.fd = upfd;
184-
int ret = connect(upfd, (sockaddr *) &upserver_addr, sizeof(upserver_addr));
185+
int ret = connect(upfd, (sockaddr * ) & upserver_addr, sizeof(upserver_addr));
185186
if (ret < 0 and errno != EINPROGRESS) {
186187
BOOST_LOG_TRIVIAL(error) << boost::format("connect failed %d : %s ") % __LINE__ % strerror(errno);
187188
return nullptr;
@@ -192,12 +193,12 @@ Upstream *check(char *buf, ssize_t &n, bool tcp = false, int epollfd = 0) {
192193
server_tcp_con[upfd] = upstream;
193194
} else {
194195
if (upstream->dns1.use_localnet_dns_server) {
195-
if (sendto(localnet_server_sock, buf, n, 0, (sockaddr *) &localnet_server_addr,
196+
if (sendto(localnet_server_sock, buf, n, 0, (sockaddr * ) & localnet_server_addr,
196197
sizeof(localnet_server_addr)) < 0) {
197198
BOOST_LOG_TRIVIAL(warning)
198199
<< boost::format("sendto up stream error %d : %s") % __LINE__ % strerror(errno);
199200
}
200-
} else if (sendto(upserver_sock, buf, n, 0, (sockaddr *) &upserver_addr, sizeof(upserver_addr)) <
201+
} else if (sendto(upserver_sock, buf, n, 0, (sockaddr * ) & upserver_addr, sizeof(upserver_addr)) <
201202
0) {
202203
BOOST_LOG_TRIVIAL(warning) << boost::format("sendto up stream error %d : %s") % __LINE__ % strerror(errno);
203204
}
@@ -292,7 +293,7 @@ void read_buf(int fd, char *buf, Upstream *up) {
292293
void acceptTcpIncome(int server_sock_tcp, int epollfd, sockaddr_storage &cliaddr, socklen_t &socklen, epoll_event &ev) {
293294
for (;;) {
294295
socklen = sizeof(cliaddr);
295-
int newcon = accept4(server_sock_tcp, (sockaddr *) &cliaddr, &socklen, SOCK_NONBLOCK);
296+
int newcon = accept4(server_sock_tcp, (sockaddr * ) & cliaddr, &socklen, SOCK_NONBLOCK);
296297
if (newcon < 0) {
297298
if (errno != EAGAIN or errno != EWOULDBLOCK)
298299
BOOST_LOG_TRIVIAL(error) << boost::format("accept error %d : %s") % __LINE__ % strerror(errno);
@@ -349,7 +350,7 @@ void readServerResponse(int server_sock, char *buf) {
349350

350351
*(uint16_t *) buf = htons(upstream->cli_id);
351352
BOOST_LOG_TRIVIAL(debug) << "send udp response to client";
352-
sendto(upstream->s->socket, buf, n, 0, (sockaddr *) &upstream->cliaddr, upstream->socklen);
353+
sendto(upstream->s->socket, buf, n, 0, (sockaddr * ) & upstream->cliaddr, upstream->socklen);
353354
id_map.erase(upstream->up_id);
354355
boost::checked_delete(upstream);
355356
upstream = nullptr;
@@ -362,7 +363,7 @@ void readIncomeQuery(int server_sock, char *buf, sockaddr_storage &cliaddr, sock
362363
ssize_t n;
363364
socklen = sizeof(struct sockaddr_storage);
364365
while (1) {
365-
n = recvfrom(server_sock, buf, 65536, 0, (sockaddr *) &cliaddr, &socklen);
366+
n = recvfrom(server_sock, buf, 65536, 0, (sockaddr * ) & cliaddr, &socklen);
366367
if (n == -1) {
367368
if (errno == EAGAIN or errno == EWOULDBLOCK) return;
368369
// if (errno == EINTR) continue;
@@ -405,7 +406,7 @@ void readIncomeQuery(int server_sock, char *buf, sockaddr_storage &cliaddr, sock
405406
BOOST_LOG_TRIVIAL(warning) << "Memory Access Error : " << err.what();
406407
}
407408
BOOST_LOG_TRIVIAL(debug) << "send response to client from cache";
408-
sendto(server_sock, buf, n, 0, (sockaddr *) &cliaddr, socklen);
409+
sendto(server_sock, buf, n, 0, (sockaddr * ) & cliaddr, socklen);
409410
boost::checked_delete(response);
410411
boost::checked_delete(up);
411412
} else {
@@ -426,12 +427,12 @@ void readIncomeQuery(int server_sock, char *buf, sockaddr_storage &cliaddr, sock
426427
}
427428
BOOST_LOG_TRIVIAL(debug) << "send udp request to server";
428429
if (up->dns1.use_localnet_dns_server) {
429-
if (sendto(localnet_server_sock, buf, n, 0, (sockaddr *) &localnet_server_addr,
430+
if (sendto(localnet_server_sock, buf, n, 0, (sockaddr * ) & localnet_server_addr,
430431
sizeof(localnet_server_addr)) <
431432
0) {
432433
BOOST_LOG_TRIVIAL(warning) << "send error : " << __LINE__ << std::endl;
433434
}
434-
} else if (sendto(upserver_sock, buf, n, 0, (sockaddr *) &upserver_addr,
435+
} else if (sendto(upserver_sock, buf, n, 0, (sockaddr * ) & upserver_addr,
435436
sizeof(upserver_addr)) < 0) {
436437
BOOST_LOG_TRIVIAL(warning) << "send error : " << __LINE__ << std::endl;
437438
}
@@ -512,10 +513,10 @@ void readIncomeTcpQuery(int epollfd, char *buf, struct epoll_event event, DnsQue
512513
BOOST_LOG_TRIVIAL(debug) << "new tcp connnect to server";
513514
int ret;
514515
if (up->dns1.use_localnet_dns_server) {
515-
ret = connect(upfd, (sockaddr *) &localnet_server_addr, sizeof(localnet_server_addr));
516+
ret = connect(upfd, (sockaddr * ) & localnet_server_addr, sizeof(localnet_server_addr));
516517
BOOST_LOG_TRIVIAL(debug) << "Tcp connect to localnet dns server ...";
517518
} else {
518-
ret = connect(upfd, (sockaddr *) &upserver_addr, sizeof(upserver_addr));
519+
ret = connect(upfd, (sockaddr * ) & upserver_addr, sizeof(upserver_addr));
519520
BOOST_LOG_TRIVIAL(debug) << "Tcp connect to remote dns server ...";
520521
}
521522
if (ret < 0 and errno != EINPROGRESS) {
@@ -570,7 +571,7 @@ void HandleServerSideTcp(int epollfd, char *buf, struct epoll_event event) {
570571
if (upstream == nullptr)
571572
return;
572573
*(uint16_t *) buf = htons(up->data_len);
573-
*(uint16_t *) (buf + 2) = htons(upstream->cli_id);
574+
*(uint16_t * )(buf + 2) = htons(upstream->cli_id);
574575
BOOST_LOG_TRIVIAL(debug) << "send tcp response to client";
575576
write(upstream->cli_fd, buf, up->data_len + 2);
576577
close(upstream->cli_fd);

0 commit comments

Comments
 (0)