diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9d6e7b4..97ca234 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -15,15 +15,18 @@ TODO
### Fixed
-- Fixed error handling for additional rounds. Cleanup.
- [#32](https://github.com/netsec-ethz/scion-java-multiping/pull/32)
-
-### Fixed
-
- Fixed mangled output with mode SHOW_SCMP_ONLY
[#31](https://github.com/netsec-ethz/scion-java-multiping/pull/31)
- Fixed occurrence of ISD=0 / "AS not listed"
[#32](https://github.com/netsec-ethz/scion-java-multiping/pull/32)
+- Fixed error handling for additional rounds. Cleanup.
+ [#33](https://github.com/netsec-ethz/scion-java-multiping/pull/33)
+
+### Changed
+
+- Refactored for JPAN 1.6.2 and Use new endhost API.
+ [#34](https://github.com/netsec-ethz/scion-java-multiping/pull/34)
+
## [0.6.1] - 2025-12-12
diff --git a/pom.xml b/pom.xml
index 3d0e51a..94151d0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,8 +12,8 @@
UTF-8
2.0.17
- 2.23
- 3.5.0
+ 2.29
+ 3.6.2
SCION Java API Examples
@@ -70,20 +70,20 @@
org.junit.jupiter
junit-jupiter
- 5.14.1
+ 5.14.4
test
com.google.googlejavaformat
google-java-format
- 1.33.0
+ 1.35.0
org.scion
jpan
- 0.6.1
+ 0.7.0
@@ -95,13 +95,13 @@
org.jsoup
jsoup
- 1.21.2
+ 1.22.2
com.google.code.gson
gson
- 2.13.2
+ 2.14.0
@@ -109,7 +109,7 @@
maven-compiler-plugin
- 3.13.0
+ 3.15.0
1.8
1.8
@@ -141,12 +141,12 @@
org.apache.maven.plugins
maven-surefire-plugin
- 3.5.2
+ 3.5.5
org.jacoco
jacoco-maven-plugin
- 0.8.12
+ 0.8.14
prepare-agent
@@ -273,7 +273,7 @@
org.apache.maven.plugins
maven-shade-plugin
- 3.6.0
+ 3.6.2
package
diff --git a/src/main/java/org/scion/multiping/PingAll.java b/src/main/java/org/scion/multiping/PingAll.java
index 985dbbc..616990c 100644
--- a/src/main/java/org/scion/multiping/PingAll.java
+++ b/src/main/java/org/scion/multiping/PingAll.java
@@ -27,8 +27,8 @@
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import org.scion.jpan.*;
-import org.scion.jpan.internal.PathRawParser;
import org.scion.jpan.internal.Shim;
+import org.scion.jpan.internal.header.PathRawParser;
import org.scion.multiping.util.*;
/**
@@ -96,7 +96,8 @@ public static void main(String[] argsArray) throws IOException {
localPort = config.getLocalPortOr30041();
Policy policy = parseArgs(argsArray);
- System.setProperty(Constants.PROPERTY_SHIM, startShim ? "true" : "false"); // disable SHIM
+ System.setProperty(Constants.PROPERTY_BOOTSTRAP_PATH_SERVICE, "192.168.53.19:48080");
+ System.setProperty(Constants.PROPERTY_SHIM, Boolean.toString(startShim)); // disable SHIM
println("Settings:");
println(" Path policy = " + policy);
@@ -212,18 +213,13 @@ private void runAS(ParseAssignments.HostEntry remote) throws IOException {
if (msgs[0] != null && bestPath.get() != null && REPEAT > 1) {
try (ScionProvider.Sync sender = service.getSync()) {
for (int i = 1; i < msgs.length; i++) {
- try {
- List messages = sender.sendTracerouteRequest(bestPath.get());
- msgs[i] = messages.get(messages.size() - 1);
- } catch (IOException e) {
- msgs[i] = Scmp.TracerouteMessage.createEmpty(bestPath.get());
- msgs[i].setTimedOut(1_000_000_000);
- }
+ List messages = sender.sendTracerouteRequest(bestPath.get());
+ msgs[i] = messages.get(messages.size() - 1);
}
}
}
} catch (ScionRuntimeException e) {
- println("ERROR: " + e.getMessage());
+ printlnERROR(e.getMessage());
summary.incAsError(remote.getIsdAs());
summary.add(new Result(remote, Result.State.ERROR));
return;
@@ -315,7 +311,7 @@ private Scmp.EchoMessage findShortestEcho(List paths, Ref refBest, l
summary.incPathSuccess();
return msg;
} catch (IOException e) {
- println("ERROR: " + e.getMessage());
+ printlnERROR(e.getMessage());
summary.incAsError(isdAs);
return null;
}
@@ -341,7 +337,7 @@ private Scmp.TracerouteMessage findShortestTR(List paths, Ref refBes
summary.incPathSuccess();
return msg;
} catch (IOException e) {
- println("ERROR: " + e.getMessage());
+ printlnERROR(e.getMessage());
summary.incAsError(isdAs);
return null;
}
@@ -373,7 +369,7 @@ private Scmp.TracerouteMessage findFastestTR(List paths, Ref refBest
}
return best;
} catch (IOException e) {
- println("ERROR: " + e.getMessage());
+ printlnERROR(e.getMessage());
summary.incAsError(isdAs);
return null;
}
@@ -393,7 +389,7 @@ private Scmp.TracerouteMessage findFastestTraceAsync(
// Wait for all messages to be received, BEFORE closing the "sender".
handler.await();
} catch (IOException e) {
- println("ERROR: " + e.getMessage());
+ printlnERROR(e.getMessage());
summary.incAsError(isdAs);
return null;
}
diff --git a/src/main/java/org/scion/multiping/PingRepeat.java b/src/main/java/org/scion/multiping/PingRepeat.java
index a6a5747..56bbf35 100644
--- a/src/main/java/org/scion/multiping/PingRepeat.java
+++ b/src/main/java/org/scion/multiping/PingRepeat.java
@@ -26,8 +26,8 @@
import java.util.*;
import java.util.concurrent.ConcurrentLinkedQueue;
import org.scion.jpan.*;
-import org.scion.jpan.internal.PathRawParser;
import org.scion.jpan.internal.Shim;
+import org.scion.jpan.internal.header.PathRawParser;
import org.scion.multiping.util.*;
import org.scion.multiping.util.Record;
@@ -121,7 +121,7 @@ private void runRepeat(ParseAssignments.HostEntry remote) {
try {
List paths = service.getPaths(remote.getIsdAs(), dstIP);
if (paths.isEmpty()) {
- String src = ScionUtil.toStringIA(service.getLocalIsdAs());
+ String src = ScionUtil.toStringIA(service.getLocalIsdAses().iterator().next());
String dst = ScionUtil.toStringIA(remote.getIsdAs());
println("WARNING: No path found from " + src + " to " + dst);
Record.createNoPathRecord(remote.getIsdAs(), fileWriter);
diff --git a/src/main/java/org/scion/multiping/PingRepeatBlocking.java b/src/main/java/org/scion/multiping/PingRepeatBlocking.java
index 5aa8bb1..b530062 100644
--- a/src/main/java/org/scion/multiping/PingRepeatBlocking.java
+++ b/src/main/java/org/scion/multiping/PingRepeatBlocking.java
@@ -25,7 +25,7 @@
import java.util.Comparator;
import java.util.List;
import org.scion.jpan.*;
-import org.scion.jpan.internal.PathRawParser;
+import org.scion.jpan.internal.header.PathRawParser;
import org.scion.multiping.util.*;
import org.scion.multiping.util.Record;
diff --git a/src/main/java/org/scion/multiping/util/Record.java b/src/main/java/org/scion/multiping/util/Record.java
index 42ca66a..6a1ed39 100644
--- a/src/main/java/org/scion/multiping/util/Record.java
+++ b/src/main/java/org/scion/multiping/util/Record.java
@@ -23,7 +23,7 @@
import org.scion.jpan.Path;
import org.scion.jpan.ScionUtil;
import org.scion.jpan.Scmp;
-import org.scion.jpan.internal.PathRawParser;
+import org.scion.jpan.internal.header.PathRawParser;
public class Record {
/**
diff --git a/src/main/java/org/scion/multiping/util/Result.java b/src/main/java/org/scion/multiping/util/Result.java
index 0a548c7..68092fc 100644
--- a/src/main/java/org/scion/multiping/util/Result.java
+++ b/src/main/java/org/scion/multiping/util/Result.java
@@ -17,7 +17,7 @@
import org.scion.jpan.Path;
import org.scion.jpan.ScionUtil;
import org.scion.jpan.Scmp;
-import org.scion.jpan.internal.PathRawParser;
+import org.scion.jpan.internal.header.PathRawParser;
public class Result {
public enum State {
diff --git a/src/main/java/org/scion/multiping/util/ResultSummary.java b/src/main/java/org/scion/multiping/util/ResultSummary.java
index 3d3d430..3c5630f 100644
--- a/src/main/java/org/scion/multiping/util/ResultSummary.java
+++ b/src/main/java/org/scion/multiping/util/ResultSummary.java
@@ -24,7 +24,7 @@
import java.util.stream.Collectors;
import org.scion.jpan.ScionUtil;
import org.scion.jpan.Scmp;
-import org.scion.jpan.internal.PathRawParser;
+import org.scion.jpan.internal.header.PathRawParser;
public class ResultSummary {
diff --git a/src/main/java/org/scion/multiping/util/Util.java b/src/main/java/org/scion/multiping/util/Util.java
index eecdf0a..814182d 100644
--- a/src/main/java/org/scion/multiping/util/Util.java
+++ b/src/main/java/org/scion/multiping/util/Util.java
@@ -20,6 +20,8 @@ public class Util {
public static boolean DELAYED_PRINT = false; // print only at newlines
private static final StringBuilder sb = new StringBuilder();
+ private Util() {}
+
public static void sleep(long millis) {
try {
Thread.sleep(millis);
@@ -44,6 +46,10 @@ public static void println(String msg) {
println();
}
+ public static void printlnERROR(String msg) {
+ println("ERROR: " + msg);
+ }
+
public static void println() {
if (PRINT) {
if (DELAYED_PRINT) {
diff --git a/src/test/java/org/scion/jpan/PathHelper.java b/src/test/java/org/scion/jpan/PathHelper.java
index d80ab14..08b11fd 100644
--- a/src/test/java/org/scion/jpan/PathHelper.java
+++ b/src/test/java/org/scion/jpan/PathHelper.java
@@ -14,12 +14,10 @@
package org.scion.jpan;
-import com.google.protobuf.ByteString;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
-import org.scion.jpan.proto.daemon.Daemon;
public class PathHelper {
@@ -28,11 +26,13 @@ private PathHelper() {}
public static List createPaths(int n) {
List paths = new ArrayList<>();
for (int i = 0; i < n; i++) {
- Daemon.Path.Builder builder = Daemon.Path.newBuilder();
- builder.setRaw(ByteString.copyFrom(new byte[] {}));
+ PathMetadata.Builder builder = PathMetadata.newBuilder();
+ builder.setRaw(new byte[] {});
+ builder.setSrcIsdAs(1000);
+ builder.setDstIsdAs(n + 1);
try {
InetAddress dst = InetAddress.getByAddress(new byte[] {123, 123, 123, 123});
- paths.add(RequestPath.create(builder.build(), n + 1, dst, 12345));
+ paths.add(RequestPath.create(builder.build(), dst, 12345));
} catch (UnknownHostException e) {
throw new ScionRuntimeException("Unable to create test path", e);
}
diff --git a/src/test/java/org/scion/multiping/PingAllTest.java b/src/test/java/org/scion/multiping/PingAllTest.java
index 18c61f0..d8e9064 100644
--- a/src/test/java/org/scion/multiping/PingAllTest.java
+++ b/src/test/java/org/scion/multiping/PingAllTest.java
@@ -78,8 +78,7 @@ static class MySync implements ScionProvider.Sync {
@Override
public Scmp.EchoMessage sendEchoRequest(Path path, ByteBuffer bb) throws IOException {
- Scmp.EchoMessage msg = Scmp.EchoMessage.createEmpty(path);
- msg.setMessageArgs(Scmp.TypeCode.TYPE_129, seqId++, seqId);
+ Scmp.EchoMessage msg = Scmp.EchoMessage.create(Scmp.TypeCode.TYPE_129, seqId++, seqId, path);
msg.assignRequest(msg, 1_000_000); // Hack: assign to itself
return msg;
}
@@ -98,7 +97,9 @@ public List sendTracerouteRequest(Path path) throws IOEx
}
@Override
- public void close() {}
+ public void close() {
+ /* Nothing to do */
+ }
}
@Test
@@ -110,9 +111,9 @@ class MyWithHandler extends WithHandler {
handler,
hdl -> {
for (int i = 0; i < 3; i++) {
- Scmp.TimedMessage req = Scmp.TracerouteMessage.createRequest(i, paths.get(i));
- Scmp.TimedMessage msg = Scmp.TracerouteMessage.createEmpty(paths.get(i));
- msg.setMessageArgs(Scmp.TypeCode.TYPE_131, i, i);
+ Scmp.TracerouteMessage req = Scmp.TracerouteMessage.createRequest(i, paths.get(i));
+ Scmp.TracerouteMessage msg =
+ Scmp.TracerouteMessage.create(Scmp.TypeCode.TYPE_131, i, i, paths.get(i));
msg.assignRequest(req, 1_000_000); // Hack: assign to itself
msg.setTimedOut(1000 * 1000 * 1000);
hdl.onTimeout(msg);
@@ -144,7 +145,7 @@ class MyWithHandler extends WithHandler {
hdl -> {
for (int i = 0; i < 3; i++) {
Scmp.ErrorMessage msg =
- Scmp.ErrorMessage.createEmpty(Scmp.TypeCode.TYPE_5, paths.get(i));
+ Scmp.ErrorMessage.create(Scmp.TypeCode.TYPE_5, paths.get(i));
hdl.onError(msg);
}
});