summaryrefslogtreecommitdiff
path: root/enigma/src/main/java
diff options
context:
space:
mode:
authorGravatar 2xsaiko2020-04-22 20:21:15 +0200
committerGravatar 2xsaiko2020-06-03 23:55:56 +0200
commit493b291dceb20b58b659764db2e4013681c26999 (patch)
treebabe0cb7d820d70bf774689be5323cb191ee34e9 /enigma/src/main/java
parentFix 'Save Mappings' entry missing from the menu and ctrl+s not working (diff)
downloadenigma-fork-493b291dceb20b58b659764db2e4013681c26999.tar.gz
enigma-fork-493b291dceb20b58b659764db2e4013681c26999.tar.xz
enigma-fork-493b291dceb20b58b659764db2e4013681c26999.zip
Improve connect dialog
Diffstat (limited to 'enigma/src/main/java')
-rw-r--r--enigma/src/main/java/cuchaz/enigma/utils/ServerAddress.java78
1 files changed, 78 insertions, 0 deletions
diff --git a/enigma/src/main/java/cuchaz/enigma/utils/ServerAddress.java b/enigma/src/main/java/cuchaz/enigma/utils/ServerAddress.java
new file mode 100644
index 0000000..021d9a1
--- /dev/null
+++ b/enigma/src/main/java/cuchaz/enigma/utils/ServerAddress.java
@@ -0,0 +1,78 @@
1package cuchaz.enigma.utils;
2
3import java.util.Objects;
4
5import javax.annotation.Nullable;
6
7public class ServerAddress {
8
9 public final String address;
10 public final int port;
11
12 private ServerAddress(String address, int port) {
13 this.address = address;
14 this.port = port;
15 }
16
17 @Nullable
18 public static ServerAddress of(String address, int port) {
19 if (port < 0 || port > 65535) return null;
20 if (address == null) return null;
21 if (address.equals("")) return null;
22 if (!address.matches("[a-zA-Z0-9.:-]+")) return null;
23 if (address.startsWith("-") || address.endsWith("-")) return null;
24 return new ServerAddress(address, port);
25 }
26
27 @Nullable
28 public static ServerAddress from(String s, int defaultPort) {
29 String address;
30 int idx = s.indexOf(']');
31 if (s.startsWith("[") && idx != -1) {
32 address = s.substring(1, idx);
33 s = s.substring(idx + 1);
34 } else if (s.chars().filter(c -> c == ':').count() == 1) {
35 idx = s.indexOf(':');
36 address = s.substring(0, idx);
37 s = s.substring(idx);
38 } else {
39 address = s;
40 s = "";
41 }
42
43 int port;
44 if (s.isEmpty()) {
45 port = defaultPort;
46 } else if (s.startsWith(":")) {
47 s = s.substring(1);
48 try {
49 port = Integer.parseInt(s);
50 } catch (NumberFormatException e) {
51 return null;
52 }
53 } else {
54 return null;
55 }
56 return ServerAddress.of(address, port);
57 }
58
59 @Override
60 public boolean equals(Object o) {
61 if (this == o) return true;
62 if (o == null || getClass() != o.getClass()) return false;
63 ServerAddress that = (ServerAddress) o;
64 return port == that.port &&
65 Objects.equals(address, that.address);
66 }
67
68 @Override
69 public int hashCode() {
70 return Objects.hash(address, port);
71 }
72
73 @Override
74 public String toString() {
75 return String.format("ServerAddress { address: '%s', port: %d }", address, port);
76 }
77
78}