Skip to content

Commit 1a93e6f

Browse files
authored
Refactoring: Removing code duplication on the DPS Solvers (#675)
1 parent 78ab999 commit 1a93e6f

File tree

99 files changed

+1144
-727
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

99 files changed

+1144
-727
lines changed

RELEASE-NOTES.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 5.8.2
2+
* Refactoring: Removing code duplication on the Local Solvers.
3+
* Optimizing logs
4+
15
## 5.8.1
26
* DNS over HTTPS, see #138
37
* Option to disable a specific container to be resolved from DPS, see #596.

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version=5.8.1-snapshot
1+
version=5.8.2-snapshot

src/main/java/com/mageddo/dns/utils/Messages.java

Lines changed: 37 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212
import com.mageddo.dnsproxyserver.solver.HostnameQuery;
1313
import com.mageddo.dnsproxyserver.solver.Response;
1414
import com.mageddo.dnsproxyserver.utils.Ips;
15-
import com.mageddo.net.IP;
1615

1716
import org.apache.commons.lang3.StringUtils;
17+
import org.apache.commons.lang3.Validate;
1818
import org.xbill.DNS.AAAARecord;
1919
import org.xbill.DNS.ARecord;
2020
import org.xbill.DNS.CNAMERecord;
@@ -58,7 +58,7 @@ public static String simplePrint(Message reqOrRes) {
5858
return null;
5959
}
6060
try {
61-
final var answer = findFirstAnswerRecord(reqOrRes);
61+
final var answer = getFirstAnswer(reqOrRes);
6262
final var rcode = reqOrRes.getRcode();
6363
if (answer != null) {
6464
return String.format("rc=%d, res=%s", rcode, simplePrint(answer));
@@ -135,14 +135,10 @@ public static Message aAnswer(Message query, String ip, long ttl) {
135135
}
136136

137137
public static String findFirstAnswerRecordStr(Message msg) {
138-
final var v = findFirstAnswerRecord(msg);
138+
final var v = getFirstAnswer(msg);
139139
return v == null ? null : v.toString();
140140
}
141141

142-
public static Record findFirstAnswerRecord(Message msg) {
143-
return getFirstRecord(msg, Section.ANSWER);
144-
}
145-
146142
public static Record findFirstAuthorityRecord(Message msg) {
147143
return getFirstRecord(msg, Section.AUTHORITY);
148144
}
@@ -152,7 +148,7 @@ public static Record getFirstRecord(Message msg, final int sectionType) {
152148
if (section.isEmpty()) {
153149
return null;
154150
}
155-
return section.get(0);
151+
return section.getFirst();
156152
}
157153

158154
public static Message aQuestion(String host) {
@@ -214,7 +210,7 @@ public static Message copyQuestionForNowHostname(Message msg, String hostname) {
214210

215211
public static Duration findTTL(Message m) {
216212
final var answer = Optional
217-
.ofNullable(Messages.findFirstAnswerRecord(m))
213+
.ofNullable(Messages.getFirstAnswer(m))
218214
.orElseGet(() -> Messages.findFirstAuthorityRecord(m));
219215
if (answer == null) {
220216
return Duration.ZERO;
@@ -239,7 +235,7 @@ public static Message nxDomain(Message query) {
239235

240236
@SneakyThrows
241237
public static Message cnameResponse(Message query, Integer ttl, String hostname) {
242-
final var res = withNoErrorResponse(query.clone());
238+
final var res = withNoErrorResponse(copy(query));
243239
final var answer = new CNAMERecord(
244240
res.getQuestion()
245241
.getName(),
@@ -273,15 +269,17 @@ public static Message answer(Message query, String ip) {
273269
return Messages.aAnswer(query, ip);
274270
}
275271

276-
public static Message answer(Message query, String ip, IP.Version version) {
277-
return answer(query, ip, version, DEFAULT_TTL);
272+
public static Message answer(Message query, String ip, Entry.Type type) {
273+
return answer(query, ip, type, DEFAULT_TTL);
278274
}
279275

280-
public static Message answer(Message query, String ip, IP.Version version, long ttl) {
281-
if (version.isIpv6()) {
282-
return Messages.quadAnswer(query, ip, ttl);
283-
}
284-
return Messages.aAnswer(query, ip, ttl);
276+
public static Message answer(Message query, String ip, Entry.Type type, long ttl) {
277+
Validate.notNull(type, "type must not be null, query=%s", toHostnameQuery(query));
278+
return switch (type) {
279+
case A -> Messages.aAnswer(query, ip, ttl);
280+
case AAAA -> Messages.quadAnswer(query, ip, ttl);
281+
default -> throw new UnsupportedOperationException(String.valueOf(type));
282+
};
285283
}
286284

287285
static Message withNoErrorResponse(Message res) {
@@ -342,7 +340,7 @@ public static boolean isSuccess(Message res) {
342340
}
343341

344342
public static String findAnswerRawIP(Message res) {
345-
return findFirstAnswerRecord(res).rdataToString();
343+
return getFirstAnswer(res).rdataToString();
346344
}
347345

348346
public static boolean isNxDomain(Message m) {
@@ -365,14 +363,14 @@ public static Message unsetAuthoritative(Message m) {
365363
return unsetFlag(m, Flags.AA);
366364
}
367365

368-
public static Message authoritativeAnswer(Message query, String ip, IP.Version version) {
369-
return authoritative(answer(query, ip, version));
366+
public static Message authoritativeAnswer(Message query, String ip, Entry.Type type) {
367+
return authoritative(answer(query, ip, type));
370368
}
371369

372370
public static Message authoritativeAnswer(
373-
Message query, String ip, IP.Version version, long ttl
371+
Message query, String ip, Entry.Type type, long ttl
374372
) {
375-
return authoritative(answer(query, ip, version, ttl));
373+
return authoritative(answer(query, ip, type, ttl));
376374
}
377375

378376
public static boolean isAuthoritative(Message m) {
@@ -395,4 +393,21 @@ public static Message notSupportedHttps(Message m) {
395393
public static List<Record> getAnswers(Message m) {
396394
return m.getSection(Section.ANSWER);
397395
}
396+
397+
public static long getFirstAnswerTTL(Response res) {
398+
return getFirstAnswerTTL(res.getMessage());
399+
}
400+
401+
public static long getFirstAnswerTTL(Message message) {
402+
return Objects.mapOrNull(getFirstAnswer(message), Record::getTTL);
403+
}
404+
405+
public static Record getFirstAnswer(Message message) {
406+
return getFirstRecord(message, Section.ANSWER);
407+
}
408+
409+
public static Duration getFirstAnswerTTLDuration(Response response) {
410+
final var ttl = getFirstAnswerTTL(response);
411+
return Objects.mapOrNull(ttl, Duration::ofSeconds);
412+
}
398413
}

src/main/java/com/mageddo/dnsproxyserver/config/Config.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,7 @@ public static class Entry {
362362
Integer ttl;
363363

364364
@NonNull
365-
Config.Entry.Type type;
365+
Type type;
366366

367367
public String requireTextIp() {
368368
Validate.isTrue(this.type.isAddressSolving() && this.ip != null, "IP is required");
@@ -373,6 +373,17 @@ public String getIpAsText() {
373373
return mapOrNull(this.ip, IP::toText);
374374
}
375375

376+
public boolean isCname() {
377+
return this.type.isCname();
378+
}
379+
380+
public IP getIp(IP.Version version) {
381+
if (version == null || this.ip.versionIs(version)) {
382+
return this.ip;
383+
}
384+
return null;
385+
}
386+
376387
public static class EntryBuilder {
377388
public Entry build() {
378389
if (this.id == null) {
@@ -397,10 +408,6 @@ public enum Type {
397408
*/
398409
final int type;
399410

400-
public boolean isNot(Type... types) {
401-
return ConfigEntryTypes.isNot(this.type, types);
402-
}
403-
404411
public static Type of(Integer code) {
405412
for (final var t : values()) {
406413
if (Objects.equals(t.type, code)) {
@@ -433,12 +440,16 @@ public IP.Version toVersion() {
433440
}
434441

435442
public boolean isAddressSolving() {
436-
return ConfigEntryTypes.is(this, Config.Entry.Type.A, Config.Entry.Type.AAAA);
443+
return ConfigEntryTypes.isAddressSolving(this);
437444
}
438445

439446
public boolean isHttps() {
440447
return this == HTTPS;
441448
}
449+
450+
public boolean isCname() {
451+
return this == CNAME;
452+
}
442453
}
443454
}
444455

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,17 @@
11
package com.mageddo.dnsproxyserver.config;
22

3-
import java.util.stream.Collectors;
4-
import java.util.stream.Stream;
3+
import java.util.EnumSet;
4+
import java.util.Set;
55

66
import com.mageddo.dnsproxyserver.config.Config.Entry.Type;
77

88
public class ConfigEntryTypes {
99

10-
public static boolean isNot(Type current, Type... possible) {
11-
return !is(current, possible);
12-
}
13-
14-
public static boolean is(Type current, Type... possible) {
15-
if (current == null) {
16-
return false;
17-
}
18-
return Stream
19-
.of(possible)
20-
.collect(Collectors.toSet())
21-
.contains(current);
22-
}
10+
public static final Set<Type> ADDRESS_SOLVING = EnumSet.of(
11+
Type.A, Type.AAAA, Type.HTTPS
12+
);
2313

24-
public static boolean isNot(Integer code, Type... types) {
25-
return !is(Type.of(code), types);
14+
public static boolean isAddressSolving(Type type) {
15+
return ADDRESS_SOLVING.contains(type);
2616
}
2717
}

src/main/java/com/mageddo/dnsproxyserver/di/Context.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import com.mageddo.dnsproxyserver.di.module.ModuleMap;
2323
import com.mageddo.dnsproxyserver.di.module.ModuleSolver;
2424
import com.mageddo.dnsproxyserver.di.module.ModuleStartup;
25-
import com.mageddo.dnsproxyserver.docker.dataprovider.DockerNetworkFacade;
25+
import com.mageddo.dnsproxyserver.docker.DockerNetworkDAO;
2626
import com.mageddo.dnsproxyserver.quarkus.QuarkusConfig;
2727
import com.mageddo.dnsproxyserver.server.Starter;
2828
import com.mageddo.dnsproxyserver.solver.Solver;
@@ -85,7 +85,7 @@ default <T> T get(Class<T> clazz) {
8585

8686
ContainerSolvingService containerSolvingService();
8787

88-
DockerNetworkFacade dockerNetworkDAO();
88+
DockerNetworkDAO dockerNetworkDAO();
8989

9090
DockerDAO dockerDAO();
9191

src/main/java/com/mageddo/dnsproxyserver/di/module/ModuleDao.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@
22

33
import javax.inject.Singleton;
44

5-
import com.mageddo.dnsproxyserver.docker.dataprovider.ContainerFacade;
6-
import com.mageddo.dnsproxyserver.docker.dataprovider.ContainerFacadeDefault;
7-
import com.mageddo.dnsproxyserver.docker.dataprovider.DockerNetworkFacade;
8-
import com.mageddo.dnsproxyserver.docker.dataprovider.DockerNetworkFacadeDefault;
9-
import com.mageddo.dnsproxyserver.solver.docker.dataprovider.ContainerDAO;
10-
import com.mageddo.dnsproxyserver.solver.docker.dataprovider.ContainerDAODefault;
5+
import com.mageddo.dnsproxyserver.docker.ContainerDAO;
6+
import com.mageddo.dnsproxyserver.docker.dataprovider.ContainerDAOApi;
7+
import com.mageddo.dnsproxyserver.docker.DockerNetworkDAO;
8+
import com.mageddo.dnsproxyserver.docker.dataprovider.DockerNetworkDAOApi;
119
import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DockerDAO;
1210
import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DockerDAODefault;
1311
import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DpsContainerDAO;
@@ -23,17 +21,17 @@ public interface ModuleDao {
2321

2422
@Binds
2523
@Singleton
26-
DockerNetworkFacade dockerNetworkFacade(DockerNetworkFacadeDefault impl);
24+
DockerNetworkDAO dockerNetworkFacade(DockerNetworkDAOApi impl);
2725

2826
@Binds
2927
@Singleton
30-
ContainerFacade containerFacade(ContainerFacadeDefault impl);
28+
ContainerDAO containerFacade(ContainerDAOApi impl);
3129

3230
// ---------------- END:FACADE --------------- //
3331

3432
@Binds
3533
@Singleton
36-
ContainerDAO containerDAO(ContainerDAODefault impl);
34+
com.mageddo.dnsproxyserver.solver.docker.dataprovider.ContainerDAO containerDAO(com.mageddo.dnsproxyserver.solver.docker.dataprovider.ContainerDAODefault impl);
3735

3836
@Binds
3937
@Singleton

src/main/java/com/mageddo/dnsproxyserver/di/module/ModuleMap.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
import com.mageddo.dnsproxyserver.config.dataformat.v3.file.ConfigFileDAO;
44
import com.mageddo.dnsproxyserver.config.dataprovider.MutableConfigDAO;
5-
import com.mageddo.dnsproxyserver.docker.dataprovider.ContainerFacade;
6-
import com.mageddo.dnsproxyserver.docker.dataprovider.DockerNetworkFacade;
5+
import com.mageddo.dnsproxyserver.docker.ContainerDAO;
6+
import com.mageddo.dnsproxyserver.docker.DockerNetworkDAO;
77
import com.mageddo.dnsproxyserver.server.dns.ServerStarter;
88
import com.mageddo.dnsproxyserver.solver.SolverLocalDB;
99
import com.mageddo.dnsproxyserver.solver.docker.dataprovider.DockerDAO;
@@ -27,13 +27,13 @@ public interface ModuleMap {
2727

2828
@Binds
2929
@IntoMap
30-
@ClassKey(ContainerFacade.class)
31-
Object b1(ContainerFacade bean);
30+
@ClassKey(ContainerDAO.class)
31+
Object b1(ContainerDAO bean);
3232

3333
@Binds
3434
@IntoMap
35-
@ClassKey(DockerNetworkFacade.class)
36-
Object b3(DockerNetworkFacade bean);
35+
@ClassKey(DockerNetworkDAO.class)
36+
Object b3(DockerNetworkDAO bean);
3737

3838
@Binds
3939
@IntoMap

src/main/java/com/mageddo/dnsproxyserver/di/module/ModuleSolver.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@
66
import javax.inject.Singleton;
77

88
import com.mageddo.di.InstanceImpl;
9-
import com.mageddo.dnsproxyserver.solver.CacheName;
10-
import com.mageddo.dnsproxyserver.solver.CacheName.Name;
9+
import com.mageddo.dnsproxyserver.solver.cache.CacheName;
10+
import com.mageddo.dnsproxyserver.solver.cache.CacheName.Name;
1111
import com.mageddo.dnsproxyserver.solver.Solver;
12-
import com.mageddo.dnsproxyserver.solver.SolverCache;
13-
import com.mageddo.dnsproxyserver.solver.SolverCachedRemote;
14-
import com.mageddo.dnsproxyserver.solver.SolverDocker;
12+
import com.mageddo.dnsproxyserver.solver.cache.SolverCache;
13+
import com.mageddo.dnsproxyserver.solver.remote.SolverCachedRemote;
14+
import com.mageddo.dnsproxyserver.solver.docker.SolverDocker;
1515
import com.mageddo.dnsproxyserver.solver.SolverLocalDB;
16-
import com.mageddo.dnsproxyserver.solver.SolverSystem;
16+
import com.mageddo.dnsproxyserver.solver.system.SolverSystem;
1717
import com.mageddo.dnsproxyserver.solver.stub.SolverStub;
1818

1919
import dagger.Module;

src/main/java/com/mageddo/dnsproxyserver/docker/dataprovider/ContainerFacade.java renamed to src/main/java/com/mageddo/dnsproxyserver/docker/ContainerDAO.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
package com.mageddo.dnsproxyserver.docker.dataprovider;
1+
package com.mageddo.dnsproxyserver.docker;
22

33
import java.util.List;
44
import java.util.stream.Stream;
55

66
import com.github.dockerjava.api.command.InspectContainerResponse;
77
import com.github.dockerjava.api.model.Container;
88

9-
public interface ContainerFacade {
9+
public interface ContainerDAO {
1010

1111
Container findById(String containerId);
1212

0 commit comments

Comments
 (0)