1
1
#include " stdafx.h"
2
2
3
3
extern bool g_Log;
4
+ extern bool g_Skip_wpad;
5
+
4
6
std::ofstream Log_DNS;
5
7
6
- Adblock g_Adsblock;
8
+ Adsblock g_Adsblock;
7
9
8
- Adblock::Adblock () {
9
- SecureZeroMemory (dns_ipaddr, sizeof (dns_ipaddr));
10
- pSrvList = nullptr ;
11
- enable = false ;
10
+ Adsblock::Adsblock () {
11
+ isActive = false ;
12
+ pSrvList = (PIP4_ARRAY)LocalAlloc (LPTR, sizeof (IP4_ARRAY));
12
13
}
13
14
14
- void Adblock::activate () {
15
- enable = true ;
16
- }
17
- void Adblock::deactivate () {
18
- enable = false ;
19
- }
15
+ void Adsblock::setDNSIP (const char * ip) {
20
16
21
- bool Adblock::init (const char * configFile) {
22
- if (!isEnable ()) {
23
- return false ;
24
- }
25
- pSrvList = (PIP4_ARRAY)LocalAlloc (LPTR, sizeof (IP4_ARRAY));
26
17
if (nullptr != pSrvList) {
27
- GetPrivateProfileString (" Config" ,
28
- " AdGuardDNS_IP" ,
29
- " 176.103.130.134" ,
30
- dns_ipaddr,
31
- INET_ADDRSTRLEN,
32
- configFile);
18
+
33
19
// https://docs.microsoft.com/en-us/windows/win32/api/ws2tcpip/nf-ws2tcpip-inetptonw
34
20
if (1 == InetPton (AF_INET,
35
- dns_ipaddr , // dns server ip
21
+ ip , // dns server ip
36
22
&pSrvList->AddrArray [0 ])) {
37
23
pSrvList->AddrCount = 1 ;
38
24
if (g_Log)
39
- Log_DNS << " AdGuard DNS Server - " << dns_ipaddr << std::endl;
40
- return true ;
25
+ Log_DNS << " AdGuard DNS Server - " << ip << std::endl;
26
+ isActive = true ;
41
27
}
42
28
else {
43
29
if (g_Log)
44
30
Log_DNS << " AdGuard DNS Disable - InetPton "
45
- << dns_ipaddr << " failed!" << std::endl;
31
+ << ip << " failed!" << std::endl;
46
32
}
47
33
}
48
34
else {
49
35
if (g_Log)
50
- Log_DNS << " AdGuard DNS Disable - "
51
- << " pSrvList LocalAlloc failed!" << std::endl;
36
+ Log_DNS << __FUNCTION__
37
+ << " pSrvList LocalAlloc failed!" << std::endl;
52
38
}
53
- return false ;
54
39
}
55
40
56
- bool Adblock::isblock (const char * nodename) {
41
+ bool Adsblock::isblock (const char * nodename) {
42
+
43
+ // Web Proxy Auto-Discovery (WPAD)
44
+ if (0 == _stricmp (nodename, " wpad" ))
45
+ return g_Skip_wpad ? true : false ;
46
+
47
+ if (nullptr != strstr (nodename, " google" ))
48
+ return true ;
49
+
50
+ if (nullptr != strstr (nodename, " doubleclick." ))
51
+ return true ;
57
52
58
53
// AdGuard DNS
59
- if (isEnable () ) {
54
+ if (isActive ) {
60
55
for (auto allow : whitelist) {
61
56
if (0 == _stricmp (allow.c_str (), nodename))
62
57
return false ;
63
58
}
64
-
65
59
for (auto block : blacklist) {
66
60
if (0 == _stricmp (block.c_str (), nodename))
67
61
return true ;
68
62
}
69
-
70
- int result = adguardlookup (nodename);
63
+ int result = lookup (nodename);
71
64
if (1 == result) { // return 1 block
72
65
blacklist.push_back (nodename); // add to blacklist
73
66
return true ;
@@ -80,7 +73,7 @@ bool Adblock::isblock (const char* nodename) {
80
73
return false ;
81
74
}
82
75
83
- int Adblock::adguardlookup (const char * nodename) {
76
+ int Adsblock::lookup (const char * nodename) {
84
77
85
78
bool isBlock = false ;
86
79
DNS_STATUS dnsStatus = 0 ;
@@ -89,7 +82,7 @@ int Adblock::adguardlookup (const char* nodename) {
89
82
dnsStatus = DnsQuery (nodename,
90
83
DNS_TYPE_A,
91
84
DNS_QUERY_WIRE_ONLY,
92
- pSrvList,
85
+ Adsblock:: pSrvList,
93
86
&QueryResult,
94
87
NULL ); // Reserved
95
88
@@ -106,7 +99,7 @@ int Adblock::adguardlookup (const char* nodename) {
106
99
}
107
100
else {
108
101
if (g_Log)
109
- Log_DNS << " AdGuard DNS Error: " << dnsStatus
102
+ Log_DNS << __FUNCTION__ << " host: " << nodename << " status: " << dnsStatus
110
103
<< " GLE: " << GetLastError () << std::endl;
111
104
return -1 ;
112
105
}
@@ -117,10 +110,12 @@ int Adblock::adguardlookup (const char* nodename) {
117
110
return 0 ;
118
111
}
119
112
120
- void Adblock ::destroy () {
121
- if (nullptr != pSrvList)
113
+ void Adsblock ::destroy () {
114
+ if (nullptr != pSrvList) {
122
115
LocalFree (pSrvList);
116
+ pSrvList = nullptr ;
117
+ }
123
118
}
124
119
125
- Adblock ::~Adblock () {
120
+ Adsblock ::~Adsblock () {
126
121
}
0 commit comments