-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathDnsOverHttpsCache.pas
173 lines (110 loc) · 4.63 KB
/
DnsOverHttpsCache.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------
unit
DnsOverHttpsCache;
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------
interface
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------
uses
IPUtils;
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------
type
TDnsOverHttpsCache = class
public
class procedure Initialize;
class procedure AddIPv4Item(const HostName: String; var IPv4Address: TIPv4Address);
class procedure AddIPv6Item(const HostName: String; var IPv6Address: TIPv6Address);
class function FindIPv4Item(const HostName: String; var IPv4Address: TIPv4Address): Boolean;
class function FindIPv6Item(const HostName: String; var IPv6Address: TIPv6Address): Boolean;
class procedure Finalize;
end;
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------
implementation
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------
uses
Classes,
SysUtils;
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------
var
TDnsOverHttpsCache_IPv4List: TStringList;
TDnsOverHttpsCache_IPv6List: TStringList;
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------
class procedure TDnsOverHttpsCache.Initialize;
begin
// Nothing to do.
end;
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------
class procedure TDnsOverHttpsCache.AddIPv4Item(const HostName: String; var IPv4Address: TIPv4Address);
begin
if (TDnsOverHttpsCache_IPv4List = nil) then TDnsOverHttpsCache_IPv4List := TStringList.Create;
TDnsOverHttpsCache_IPv4List.AddObject(HostName, TObject(IPv4Address));
end;
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------
class procedure TDnsOverHttpsCache.AddIPv6Item(const HostName: String; var IPv6Address: TIPv6Address);
begin
if (TDnsOverHttpsCache_IPv6List = nil) then TDnsOverHttpsCache_IPv6List := TStringList.Create;
TDnsOverHttpsCache_IPv6List.AddObject(HostName, TObject(@IPv6Address));
end;
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------
class function TDnsOverHttpsCache.FindIPv4Item(const HostName: String; var IPv4Address: TIPv4Address): Boolean;
var
ListIndex: Integer;
begin
if (TDnsOverHttpsCache_IPv4List <> nil) then begin
ListIndex := TDnsOverHttpsCache_IPv4List.IndexOf(HostName); if (ListIndex >= 0) then begin
IPv4Address := TIPv4Address(TDnsOverHttpsCache_IPv4List.Objects[ListIndex]);
Result := True;
Exit;
end;
end;
Result := False;
end;
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------
class function TDnsOverHttpsCache.FindIPv6Item(const HostName: String; var IPv6Address: TIPv6Address): Boolean;
var
ListIndex: Integer;
begin
if (TDnsOverHttpsCache_IPv6List <> nil) then begin
ListIndex := TDnsOverHttpsCache_IPv6List.IndexOf(HostName); if (ListIndex >= 0) then begin
IPv6Address := PIPv6Address(TDnsOverHttpsCache_IPv6List.Objects[ListIndex])^;
Result := True;
Exit;
end;
end;
Result := False;
end;
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------
class procedure TDnsOverHttpsCache.Finalize;
begin
if (TDnsOverHttpsCache_IPv6List <> nil) then TDnsOverHttpsCache_IPv6List.Free;
if (TDnsOverHttpsCache_IPv4List <> nil) then TDnsOverHttpsCache_IPv4List.Free;
end;
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------
end.