From 6d069d3f70b6d92cdd8ef7d221f7ab4da83cc730 Mon Sep 17 00:00:00 2001
From: akwizgran <michael@briarproject.org>
Date: Wed, 29 Mar 2023 16:25:12 +0100
Subject: [PATCH] Add clock skew reporting.

---
 .../onionwrapper/AbstractTorWrapper.java      | 20 +++++++++++++------
 .../briarproject/onionwrapper/TorWrapper.java |  5 +++++
 2 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/AbstractTorWrapper.java b/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/AbstractTorWrapper.java
index fa2aae4..fb77222 100644
--- a/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/AbstractTorWrapper.java
+++ b/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/AbstractTorWrapper.java
@@ -466,8 +466,11 @@ abstract class AbstractTorWrapper implements EventHandler, TorWrapper {
 			}
 		} else if (msg.startsWith("CLOCK_SKEW")) {
 			Long skew = parseLongArgument(msg, "SKEW");
-			if (skew != null && LOG.isLoggable(WARNING)) {
-				LOG.warning("Clock is skewed by " + skew + " seconds");
+			if (skew != null) {
+				if (LOG.isLoggable(WARNING)) {
+					LOG.warning("Clock is skewed by " + skew + " seconds");
+				}
+				state.onClockSkewDetected(skew);
 			}
 		}
 	}
@@ -596,8 +599,7 @@ abstract class AbstractTorWrapper implements EventHandler, TorWrapper {
 			bootstrapPercentage = percentage;
 			if (observer != null) {
 				// Notify the observer on the event executor
-				eventExecutor.execute(() ->
-						observer.onBootstrapPercentage(percentage));
+				eventExecutor.execute(() -> observer.onBootstrapPercentage(percentage));
 			}
 			updateState();
 		}
@@ -699,8 +701,14 @@ abstract class AbstractTorWrapper implements EventHandler, TorWrapper {
 		private synchronized void onHsDescriptorUploaded(String onion) {
 			if (observer != null) {
 				// Notify the observer on the event executor
-				eventExecutor.execute(() ->
-						observer.onHsDescriptorUpload(onion));
+				eventExecutor.execute(() -> observer.onHsDescriptorUpload(onion));
+			}
+		}
+
+		private synchronized void onClockSkewDetected(long skewSeconds) {
+			if (observer != null) {
+				// Notify the observer on the event executor
+				eventExecutor.execute(() -> observer.onClockSkewDetected(skewSeconds));
 			}
 		}
 	}
diff --git a/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/TorWrapper.java b/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/TorWrapper.java
index d5825b4..d3c2efd 100644
--- a/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/TorWrapper.java
+++ b/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/TorWrapper.java
@@ -148,6 +148,11 @@ public interface TorWrapper {
 		 * Called whenever a hidden service descriptor is uploaded.
 		 */
 		void onHsDescriptorUpload(String onion);
+
+		/**
+		 * Called whenever Tor detects that the system clock is skewed.
+		 */
+		void onClockSkewDetected(long skewSeconds);
 	}
 
 	class HiddenServiceProperties {
-- 
GitLab