aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrumeet <17158086+Trumeet@users.noreply.github.com>2021-02-03 16:17:48 -0800
committerTrumeet <17158086+Trumeet@users.noreply.github.com>2021-02-03 16:17:48 -0800
commite6cc7dade777460ce596edc31efc3eb460c89c98 (patch)
tree5c957da0a10b734191b838b004fa6e5110446bb9
parent488ecf8d98ec85486868b37754129c3d2b68ae66 (diff)
downloaddn42peering-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.java39
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(),