From 570c8fdba7bb2ad55164fc798e07f33be0f894a7 Mon Sep 17 00:00:00 2001 From: Eugen Freiter Date: Mon, 11 Nov 2019 23:49:50 +0100 Subject: [PATCH 1/3] fix discoverability for ios13. --- .../io/github/hapjava/impl/connections/HttpSession.java | 2 +- .../io/github/hapjava/impl/json/AccessoryController.java | 3 +-- .../io/github/hapjava/impl/pairing/FinalPairHandler.java | 6 +----- .../io/github/hapjava/impl/pairing/PairingManager.java | 8 ++------ 4 files changed, 5 insertions(+), 14 deletions(-) diff --git a/src/main/java/io/github/hapjava/impl/connections/HttpSession.java b/src/main/java/io/github/hapjava/impl/connections/HttpSession.java index 3ec22c42f..829b5f71a 100644 --- a/src/main/java/io/github/hapjava/impl/connections/HttpSession.java +++ b/src/main/java/io/github/hapjava/impl/connections/HttpSession.java @@ -101,7 +101,7 @@ private HttpResponse handlePairSetup(HttpRequest request) { if (pairingManager == null) { synchronized (HttpSession.class) { if (pairingManager == null) { - pairingManager = new PairingManager(authInfo, registry, advertiser); + pairingManager = new PairingManager(authInfo, registry); } } } diff --git a/src/main/java/io/github/hapjava/impl/json/AccessoryController.java b/src/main/java/io/github/hapjava/impl/json/AccessoryController.java index 9962fd58a..66c46bdcf 100644 --- a/src/main/java/io/github/hapjava/impl/json/AccessoryController.java +++ b/src/main/java/io/github/hapjava/impl/json/AccessoryController.java @@ -81,8 +81,7 @@ private CompletableFuture toJson(Service service, int interfaceId) t .thenApply( v -> { JsonArrayBuilder jsonCharacteristics = Json.createArrayBuilder(); - characteristicFutures - .stream() + characteristicFutures.stream() .map(future -> future.join()) .forEach(c -> jsonCharacteristics.add(c)); builder.add("characteristics", jsonCharacteristics); diff --git a/src/main/java/io/github/hapjava/impl/pairing/FinalPairHandler.java b/src/main/java/io/github/hapjava/impl/pairing/FinalPairHandler.java index 9ba8d1443..29b8b88a3 100644 --- a/src/main/java/io/github/hapjava/impl/pairing/FinalPairHandler.java +++ b/src/main/java/io/github/hapjava/impl/pairing/FinalPairHandler.java @@ -3,7 +3,6 @@ import io.github.hapjava.HomekitAuthInfo; import io.github.hapjava.impl.crypto.*; import io.github.hapjava.impl.http.HttpResponse; -import io.github.hapjava.impl.jmdns.JmdnsHomekitAdvertiser; import io.github.hapjava.impl.pairing.PairSetupRequest.Stage3Request; import io.github.hapjava.impl.pairing.TypeLengthValueUtils.DecodeResult; import io.github.hapjava.impl.pairing.TypeLengthValueUtils.Encoder; @@ -16,14 +15,12 @@ class FinalPairHandler { private final byte[] k; private final HomekitAuthInfo authInfo; - private final JmdnsHomekitAdvertiser advertiser; private byte[] hkdf_enc_key; - public FinalPairHandler(byte[] k, HomekitAuthInfo authInfo, JmdnsHomekitAdvertiser advertiser) { + public FinalPairHandler(byte[] k, HomekitAuthInfo authInfo) { this.k = k; this.authInfo = authInfo; - this.advertiser = advertiser; } public HttpResponse handle(PairSetupRequest req) throws Exception { @@ -66,7 +63,6 @@ private HttpResponse createUser(byte[] username, byte[] ltpk, byte[] proof) thro throw new Exception("Invalid signature"); } authInfo.createUser(authInfo.getMac() + new String(username, StandardCharsets.UTF_8), ltpk); - advertiser.setDiscoverable(false); return createResponse(); } diff --git a/src/main/java/io/github/hapjava/impl/pairing/PairingManager.java b/src/main/java/io/github/hapjava/impl/pairing/PairingManager.java index c415114b9..934181309 100644 --- a/src/main/java/io/github/hapjava/impl/pairing/PairingManager.java +++ b/src/main/java/io/github/hapjava/impl/pairing/PairingManager.java @@ -4,7 +4,6 @@ import io.github.hapjava.impl.HomekitRegistry; import io.github.hapjava.impl.http.HttpRequest; import io.github.hapjava.impl.http.HttpResponse; -import io.github.hapjava.impl.jmdns.JmdnsHomekitAdvertiser; import io.github.hapjava.impl.responses.NotFoundResponse; import io.github.hapjava.impl.responses.UnauthorizedResponse; import org.slf4j.Logger; @@ -16,15 +15,12 @@ public class PairingManager { private final HomekitAuthInfo authInfo; private final HomekitRegistry registry; - private final JmdnsHomekitAdvertiser advertiser; private SrpHandler srpHandler; - public PairingManager( - HomekitAuthInfo authInfo, HomekitRegistry registry, JmdnsHomekitAdvertiser advertiser) { + public PairingManager(HomekitAuthInfo authInfo, HomekitRegistry registry) { this.authInfo = authInfo; this.registry = registry; - this.advertiser = advertiser; } public HttpResponse handle(HttpRequest httpRequest) throws Exception { @@ -54,7 +50,7 @@ public HttpResponse handle(HttpRequest httpRequest) throws Exception { logger.warn("Received unexpected stage 3 request for " + registry.getLabel()); return new UnauthorizedResponse(); } else { - FinalPairHandler handler = new FinalPairHandler(srpHandler.getK(), authInfo, advertiser); + FinalPairHandler handler = new FinalPairHandler(srpHandler.getK(), authInfo); try { return handler.handle(req); } catch (Exception e) { From 75a7cb1278c22d7f8e515a469d453ae9a1e7e37b Mon Sep 17 00:00:00 2001 From: Eugen Freiter Date: Sun, 1 Dec 2019 17:33:59 +0100 Subject: [PATCH 2/3] switch discoverable to false one client is authenticated --- .../java/io/github/hapjava/impl/connections/HttpSession.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/io/github/hapjava/impl/connections/HttpSession.java b/src/main/java/io/github/hapjava/impl/connections/HttpSession.java index 829b5f71a..78e68b29e 100644 --- a/src/main/java/io/github/hapjava/impl/connections/HttpSession.java +++ b/src/main/java/io/github/hapjava/impl/connections/HttpSession.java @@ -66,6 +66,8 @@ public HttpResponse handleRequest(HttpRequest request) throws IOException { } public HttpResponse handleAuthenticatedRequest(HttpRequest request) throws IOException { + advertiser.setDiscoverable( + false); // brigde is already binded and should not be discoverable anymore try { switch (request.getUri()) { case "/accessories": From f1acf88ff61b823ced632c4ac56ead011d632f66 Mon Sep 17 00:00:00 2001 From: Eugen Freiter Date: Sun, 1 Dec 2019 20:42:22 +0100 Subject: [PATCH 3/3] fix spelling. switch discoverable to false once client is authenticated --- .../java/io/github/hapjava/impl/connections/HttpSession.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/github/hapjava/impl/connections/HttpSession.java b/src/main/java/io/github/hapjava/impl/connections/HttpSession.java index 78e68b29e..4a7efe7d9 100644 --- a/src/main/java/io/github/hapjava/impl/connections/HttpSession.java +++ b/src/main/java/io/github/hapjava/impl/connections/HttpSession.java @@ -67,7 +67,7 @@ public HttpResponse handleRequest(HttpRequest request) throws IOException { public HttpResponse handleAuthenticatedRequest(HttpRequest request) throws IOException { advertiser.setDiscoverable( - false); // brigde is already binded and should not be discoverable anymore + false); // brigde is already bound and should not be discoverable anymore try { switch (request.getUri()) { case "/accessories":