AWG Android support
This commit is contained in:
parent
7f2ef65fe6
commit
bdfa8bfe5b
4 changed files with 309 additions and 10 deletions
|
@ -44,6 +44,15 @@ public final class Interface {
|
|||
private final KeyPair keyPair;
|
||||
private final Optional<Integer> listenPort;
|
||||
private final Optional<Integer> mtu;
|
||||
private final Optional<Integer> jc;
|
||||
private final Optional<Integer> jmin;
|
||||
private final Optional<Integer> jmax;
|
||||
private final Optional<Integer> s1;
|
||||
private final Optional<Integer> s2;
|
||||
private final Optional<Long> h1;
|
||||
private final Optional<Long> h2;
|
||||
private final Optional<Long> h3;
|
||||
private final Optional<Long> h4;
|
||||
|
||||
private Interface(final Builder builder) {
|
||||
// Defensively copy to ensure immutability even if the Builder is reused.
|
||||
|
@ -56,6 +65,15 @@ public final class Interface {
|
|||
keyPair = Objects.requireNonNull(builder.keyPair, "Interfaces must have a private key");
|
||||
listenPort = builder.listenPort;
|
||||
mtu = builder.mtu;
|
||||
jc = builder.jc;
|
||||
jmax = builder.jmax;
|
||||
jmin = builder.jmin;
|
||||
s1 = builder.s1;
|
||||
s2 = builder.s2;
|
||||
h1 = builder.h1;
|
||||
h2 = builder.h2;
|
||||
h3 = builder.h3;
|
||||
h4 = builder.h4;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -95,6 +113,33 @@ public final class Interface {
|
|||
case "privatekey":
|
||||
builder.parsePrivateKey(attribute.getValue());
|
||||
break;
|
||||
case "jc":
|
||||
builder.parseJc(attribute.getValue());
|
||||
break;
|
||||
case "jmin":
|
||||
builder.parseJmin(attribute.getValue());
|
||||
break;
|
||||
case "jmax":
|
||||
builder.parseJmax(attribute.getValue());
|
||||
break;
|
||||
case "s1":
|
||||
builder.parseS1(attribute.getValue());
|
||||
break;
|
||||
case "s2":
|
||||
builder.parseS2(attribute.getValue());
|
||||
break;
|
||||
case "h1":
|
||||
builder.parseH1(attribute.getValue());
|
||||
break;
|
||||
case "h2":
|
||||
builder.parseH2(attribute.getValue());
|
||||
break;
|
||||
case "h3":
|
||||
builder.parseH3(attribute.getValue());
|
||||
break;
|
||||
case "h4":
|
||||
builder.parseH4(attribute.getValue());
|
||||
break;
|
||||
default:
|
||||
throw new BadConfigException(
|
||||
Section.INTERFACE, Location.TOP_LEVEL, Reason.UNKNOWN_ATTRIBUTE, attribute.getKey());
|
||||
|
@ -111,7 +156,9 @@ public final class Interface {
|
|||
return addresses.equals(other.addresses) && dnsServers.equals(other.dnsServers)
|
||||
&& excludedApplications.equals(other.excludedApplications)
|
||||
&& includedApplications.equals(other.includedApplications) && keyPair.equals(other.keyPair)
|
||||
&& listenPort.equals(other.listenPort) && mtu.equals(other.mtu);
|
||||
&& listenPort.equals(other.listenPort) && mtu.equals(other.mtu) && jc.equals(other.jc) && jmin.equals(other.jmin)
|
||||
&& jmax.equals(other.jmax) && s1.equals(other.s1) && s2.equals(other.s2) && h1.equals(other.h1) && h2.equals(other.h2)
|
||||
&& h3.equals(other.h3) && h4.equals(other.h4);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -180,6 +227,42 @@ public final class Interface {
|
|||
public Optional<Integer> getMtu() {
|
||||
return mtu;
|
||||
}
|
||||
|
||||
public Optional<Integer> getJc() {
|
||||
return jc;
|
||||
}
|
||||
|
||||
public Optional<Integer> getJmin() {
|
||||
return jmin;
|
||||
}
|
||||
|
||||
public Optional<Integer> getJmax() {
|
||||
return jmax;
|
||||
}
|
||||
|
||||
public Optional<Integer> getS1() {
|
||||
return s1;
|
||||
}
|
||||
|
||||
public Optional<Integer> getS2() {
|
||||
return s2;
|
||||
}
|
||||
|
||||
public Optional<Long> getH1() {
|
||||
return h1;
|
||||
}
|
||||
|
||||
public Optional<Long> getH2() {
|
||||
return h2;
|
||||
}
|
||||
|
||||
public Optional<Long> getH3() {
|
||||
return h3;
|
||||
}
|
||||
|
||||
public Optional<Long> getH4() {
|
||||
return h4;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
|
@ -191,6 +274,15 @@ public final class Interface {
|
|||
hash = 31 * hash + keyPair.hashCode();
|
||||
hash = 31 * hash + listenPort.hashCode();
|
||||
hash = 31 * hash + mtu.hashCode();
|
||||
hash = 31 * hash + jc.hashCode();
|
||||
hash = 31 * hash + jmin.hashCode();
|
||||
hash = 31 * hash + jmax.hashCode();
|
||||
hash = 31 * hash + s1.hashCode();
|
||||
hash = 31 * hash + s2.hashCode();
|
||||
hash = 31 * hash + h1.hashCode();
|
||||
hash = 31 * hash + h2.hashCode();
|
||||
hash = 31 * hash + h3.hashCode();
|
||||
hash = 31 * hash + h4.hashCode();
|
||||
return hash;
|
||||
}
|
||||
|
||||
|
@ -234,6 +326,19 @@ public final class Interface {
|
|||
.append('\n');
|
||||
listenPort.ifPresent(lp -> sb.append("ListenPort = ").append(lp).append('\n'));
|
||||
mtu.ifPresent(m -> sb.append("MTU = ").append(m).append('\n'));
|
||||
|
||||
jc.ifPresent(t_jc -> sb.append("Jc = ").append(t_jc).append('\n'));
|
||||
jmin.ifPresent(t_jmin -> sb.append("Jmin = ").append(t_jmin).append('\n'));
|
||||
jmax.ifPresent(t_jmax -> sb.append("Jmax = ").append(t_jmax).append('\n'));
|
||||
|
||||
s1.ifPresent(t_s1 -> sb.append("S1 = ").append(t_s1).append('\n'));
|
||||
s2.ifPresent(t_s2 -> sb.append("S2 = ").append(t_s2).append('\n'));
|
||||
|
||||
h1.ifPresent(t_h1 -> sb.append("H1 = ").append(t_h1).append('\n'));
|
||||
h2.ifPresent(t_h2 -> sb.append("H2 = ").append(t_h2).append('\n'));
|
||||
h3.ifPresent(t_h3 -> sb.append("H3 = ").append(t_h3).append('\n'));
|
||||
h4.ifPresent(t_h4 -> sb.append("H4 = ").append(t_h4).append('\n'));
|
||||
|
||||
sb.append("PrivateKey = ").append(keyPair.getPrivateKey().toBase64()).append('\n');
|
||||
return sb.toString();
|
||||
}
|
||||
|
@ -248,6 +353,18 @@ public final class Interface {
|
|||
final StringBuilder sb = new StringBuilder();
|
||||
sb.append("private_key=").append(keyPair.getPrivateKey().toHex()).append('\n');
|
||||
listenPort.ifPresent(lp -> sb.append("listen_port=").append(lp).append('\n'));
|
||||
|
||||
jc.ifPresent(t_jc -> sb.append("jc=").append(t_jc).append('\n'));
|
||||
jmin.ifPresent(t_jmin -> sb.append("jmin=").append(t_jmin).append('\n'));
|
||||
jmax.ifPresent(t_jmax -> sb.append("jmax=").append(t_jmax).append('\n'));
|
||||
|
||||
s1.ifPresent(t_s1 -> sb.append("s1=").append(t_s1).append('\n'));
|
||||
s2.ifPresent(t_s2 -> sb.append("s2=").append(t_s2).append('\n'));
|
||||
|
||||
h1.ifPresent(t_h1 -> sb.append("h1=").append(t_h1).append('\n'));
|
||||
h2.ifPresent(t_h2 -> sb.append("h2=").append(t_h2).append('\n'));
|
||||
h3.ifPresent(t_h3 -> sb.append("h3=").append(t_h3).append('\n'));
|
||||
h4.ifPresent(t_h4 -> sb.append("h4=").append(t_h4).append('\n'));
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
@ -267,6 +384,17 @@ public final class Interface {
|
|||
private Optional<Integer> listenPort = Optional.empty();
|
||||
// Defaults to not present.
|
||||
private Optional<Integer> mtu = Optional.empty();
|
||||
private Optional<Integer> jc = Optional.empty();
|
||||
private Optional<Integer> jmin = Optional.empty();
|
||||
private Optional<Integer> jmax = Optional.empty();
|
||||
|
||||
private Optional<Integer> s1 = Optional.empty();
|
||||
private Optional<Integer> s2 = Optional.empty();
|
||||
|
||||
private Optional<Long> h1 = Optional.empty();
|
||||
private Optional<Long> h2 = Optional.empty();
|
||||
private Optional<Long> h3 = Optional.empty();
|
||||
private Optional<Long> h4 = Optional.empty();
|
||||
|
||||
public Builder addAddress(final InetNetwork address) {
|
||||
addresses.add(address);
|
||||
|
@ -362,6 +490,78 @@ public final class Interface {
|
|||
}
|
||||
}
|
||||
|
||||
public Builder parseJc(final String jc) throws BadConfigException {
|
||||
try {
|
||||
return setJc(Integer.parseInt(jc));
|
||||
} catch (final NumberFormatException e) {
|
||||
throw new BadConfigException(Section.INTERFACE, Location.JC, jc, e);
|
||||
}
|
||||
}
|
||||
|
||||
public Builder parseJmax(final String jmax) throws BadConfigException {
|
||||
try {
|
||||
return setJmax(Integer.parseInt(jmax));
|
||||
} catch (final NumberFormatException e) {
|
||||
throw new BadConfigException(Section.INTERFACE, Location.JMAX, jmax, e);
|
||||
}
|
||||
}
|
||||
|
||||
public Builder parseJmin(final String jmin) throws BadConfigException {
|
||||
try {
|
||||
return setJmin(Integer.parseInt(jmin));
|
||||
} catch (final NumberFormatException e) {
|
||||
throw new BadConfigException(Section.INTERFACE, Location.JMIN, jmin, e);
|
||||
}
|
||||
}
|
||||
|
||||
public Builder parseS1(final String s1) throws BadConfigException {
|
||||
try {
|
||||
return setS1(Integer.parseInt(s1));
|
||||
} catch (final NumberFormatException e) {
|
||||
throw new BadConfigException(Section.INTERFACE, Location.S1, s1, e);
|
||||
}
|
||||
}
|
||||
|
||||
public Builder parseS2(final String s2) throws BadConfigException {
|
||||
try {
|
||||
return setS2(Integer.parseInt(s2));
|
||||
} catch (final NumberFormatException e) {
|
||||
throw new BadConfigException(Section.INTERFACE, Location.S2, s2, e);
|
||||
}
|
||||
}
|
||||
|
||||
public Builder parseH1(final String h1) throws BadConfigException {
|
||||
try {
|
||||
return setH1(Long.parseLong(h1));
|
||||
} catch (final NumberFormatException e) {
|
||||
throw new BadConfigException(Section.INTERFACE, Location.H1, h1, e);
|
||||
}
|
||||
}
|
||||
|
||||
public Builder parseH2(final String h2) throws BadConfigException {
|
||||
try {
|
||||
return setH2(Long.parseLong(h2));
|
||||
} catch (final NumberFormatException e) {
|
||||
throw new BadConfigException(Section.INTERFACE, Location.H2, h2, e);
|
||||
}
|
||||
}
|
||||
|
||||
public Builder parseH3(final String h3) throws BadConfigException {
|
||||
try {
|
||||
return setH3(Long.parseLong(h3));
|
||||
} catch (final NumberFormatException e) {
|
||||
throw new BadConfigException(Section.INTERFACE, Location.H3, h3, e);
|
||||
}
|
||||
}
|
||||
|
||||
public Builder parseH4(final String h4) throws BadConfigException {
|
||||
try {
|
||||
return setH4(Long.parseLong(h4));
|
||||
} catch (final NumberFormatException e) {
|
||||
throw new BadConfigException(Section.INTERFACE, Location.H4, h4, e);
|
||||
}
|
||||
}
|
||||
|
||||
public Builder parsePrivateKey(final String privateKey) throws BadConfigException {
|
||||
try {
|
||||
return setKeyPair(new KeyPair(Key.fromBase64(privateKey)));
|
||||
|
@ -386,9 +586,81 @@ public final class Interface {
|
|||
public Builder setMtu(final int mtu) throws BadConfigException {
|
||||
if (mtu < 0)
|
||||
throw new BadConfigException(
|
||||
Section.INTERFACE, Location.LISTEN_PORT, Reason.INVALID_VALUE, String.valueOf(mtu));
|
||||
Section.INTERFACE, Location.MTU, Reason.INVALID_VALUE, String.valueOf(mtu));
|
||||
this.mtu = mtu == 0 ? Optional.empty() : Optional.of(mtu);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setJc(final int jc) throws BadConfigException {
|
||||
if (jc < 0)
|
||||
throw new BadConfigException(
|
||||
Section.INTERFACE, Location.JC, Reason.INVALID_VALUE, String.valueOf(jc));
|
||||
this.jc = jc == 0 ? Optional.empty() : Optional.of(jc);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setJmin(final int jmin) throws BadConfigException {
|
||||
if (jmin < 0)
|
||||
throw new BadConfigException(
|
||||
Section.INTERFACE, Location.JMIN, Reason.INVALID_VALUE, String.valueOf(jmin));
|
||||
this.jmin = jmin == 0 ? Optional.empty() : Optional.of(jmin);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setJmax(final int jmax) throws BadConfigException {
|
||||
if (jmax < 0)
|
||||
throw new BadConfigException(
|
||||
Section.INTERFACE, Location.JMAX, Reason.INVALID_VALUE, String.valueOf(jmax));
|
||||
this.jmax = jmax == 0 ? Optional.empty() : Optional.of(jmax);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setS1(final int s1) throws BadConfigException {
|
||||
if (s1 < 0)
|
||||
throw new BadConfigException(
|
||||
Section.INTERFACE, Location.S1, Reason.INVALID_VALUE, String.valueOf(s1));
|
||||
this.s1 = s1 == 0 ? Optional.empty() : Optional.of(s1);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setS2(final int s2) throws BadConfigException {
|
||||
if (s2 < 0)
|
||||
throw new BadConfigException(
|
||||
Section.INTERFACE, Location.S2, Reason.INVALID_VALUE, String.valueOf(s2));
|
||||
this.s2 = s2 == 0 ? Optional.empty() : Optional.of(s2);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setH1(final long h1) throws BadConfigException {
|
||||
if (h1 < 0)
|
||||
throw new BadConfigException(
|
||||
Section.INTERFACE, Location.H1, Reason.INVALID_VALUE, String.valueOf(h1));
|
||||
this.h1 = h1 == 0 ? Optional.empty() : Optional.of(h1);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setH2(final long h2) throws BadConfigException {
|
||||
if (h2 < 0)
|
||||
throw new BadConfigException(
|
||||
Section.INTERFACE, Location.H2, Reason.INVALID_VALUE, String.valueOf(h2));
|
||||
this.h2 = h2 == 0 ? Optional.empty() : Optional.of(h2);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setH3(final long h3) throws BadConfigException {
|
||||
if (h3 < 0)
|
||||
throw new BadConfigException(
|
||||
Section.INTERFACE, Location.H3, Reason.INVALID_VALUE, String.valueOf(h3));
|
||||
this.h3 = h3 == 0 ? Optional.empty() : Optional.of(h3);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setH4(final long h4) throws BadConfigException {
|
||||
if (h4 < 0)
|
||||
throw new BadConfigException(
|
||||
Section.INTERFACE, Location.H4, Reason.INVALID_VALUE, String.valueOf(h4));
|
||||
this.h4 = h4 == 0 ? Optional.empty() : Optional.of(h4);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue