diff options
author | Trumeet <17158086+Trumeet@users.noreply.github.com> | 2021-02-03 16:17:48 -0800 |
---|---|---|
committer | Trumeet <17158086+Trumeet@users.noreply.github.com> | 2021-02-03 16:17:48 -0800 |
commit | e6cc7dade777460ce596edc31efc3eb460c89c98 (patch) | |
tree | 5c957da0a10b734191b838b004fa6e5110446bb9 | |
parent | 488ecf8d98ec85486868b37754129c3d2b68ae66 (diff) | |
download | dn42peering-e6cc7dade777460ce596edc31efc3eb460c89c98.tar dn42peering-e6cc7dade777460ce596edc31efc3eb460c89c98.tar.gz dn42peering-e6cc7dade777460ce596edc31efc3eb460c89c98.tar.bz2 dn42peering-e6cc7dade777460ce596edc31efc3eb460c89c98.zip |
fix(central): do not check duplication for Link-Local IPv6 addressesv1.6
-rw-r--r-- | central/src/main/java/moe/yuuta/dn42peering/manage/ManageHandler.java | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/central/src/main/java/moe/yuuta/dn42peering/manage/ManageHandler.java b/central/src/main/java/moe/yuuta/dn42peering/manage/ManageHandler.java index 408caf8..d2d66a3 100644 --- a/central/src/main/java/moe/yuuta/dn42peering/manage/ManageHandler.java +++ b/central/src/main/java/moe/yuuta/dn42peering/manage/ManageHandler.java @@ -176,21 +176,28 @@ public class ManageHandler implements ISubRouter { return Future.failedFuture(e); } }) - ).<Peer>compose(peer -> Future.future(f -> peerService.isIPConflict(peer.getType(), - peer.getIpv4(), - peer.getIpv6(), - ar -> { - if (ar.succeeded()) { - if (ar.result()) { - f.fail(new FormException(peer, - "The IPv4 or IPv6 you specified conflicts with an existing peering with the same type.")); + ).<Peer>compose(peer -> Future.future(f -> { + boolean needCheckIP6 = true; + try { + if(peer.isIPv6LinkLocal()) + needCheckIP6 = false; + } catch (IOException ignored) {} + peerService.isIPConflict(peer.getType(), + peer.getIpv4(), + needCheckIP6 ? peer.getIpv6() : null, + ar -> { + if (ar.succeeded()) { + if (ar.result()) { + f.fail(new FormException(peer, + "The IPv4 or IPv6 you specified conflicts with an existing peering with the same type.")); + } else { + f.complete(peer); + } } else { - f.complete(peer); + f.fail(ar.cause()); } - } else { - f.fail(ar.cause()); - } - })) + }); + }) ).<Peer>compose(peer -> Future.future(f -> peerService.addNew(peer, ar -> { if (ar.succeeded()) { peer.setId((int) (long) ar.result()); @@ -339,6 +346,12 @@ public class ManageHandler implements ISubRouter { needCheckIPv6Conflict = !Objects.equals(existingPeer.getIpv6(), inPeer.getIpv6()); if (inPeer.getIpv6() == null) needCheckIPv6Conflict = false; + else { + try { + if(inPeer.isIPv6LinkLocal()) + needCheckIPv6Conflict = false; + } catch (IOException ignored) {} + } } final boolean nc6 = needCheckIPv6Conflict; return Future.future(f -> peerService.isIPConflict(inPeer.getType(), |