Skip to content

Commit c1e558a

Browse files
committed
fix a pairing issue
make sure we bind the HTTP server to the same address that we told Bonjour to advertise. otherwise we might end up listening on some rando interface that may not actually be able to accept connections
1 parent e449fcf commit c1e558a

File tree

3 files changed

+13
-7
lines changed

3 files changed

+13
-7
lines changed

src/main/java/com/beowulfe/hap/HomekitServer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public class HomekitServer {
4040
*/
4141
public HomekitServer(InetAddress localAddress, int port, int nThreads) throws IOException {
4242
this.localAddress = localAddress;
43-
http = new HomekitHttpServer(port, nThreads);
43+
http = new HomekitHttpServer(localAddress, port, nThreads);
4444
}
4545

4646
/**

src/main/java/com/beowulfe/hap/impl/http/impl/HomekitHttpServer.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22

33
import com.beowulfe.hap.impl.HomekitWebHandler;
44
import com.beowulfe.hap.impl.http.HomekitClientConnectionFactory;
5+
import java.net.InetAddress;
56
import java.util.concurrent.CompletableFuture;
67

78
public class HomekitHttpServer implements HomekitWebHandler {
89

910
private NettyHomekitHttpService service = null;
11+
private final InetAddress localAddress;
1012
private final int port;
1113
private final int nThreads;
1214

@@ -17,15 +19,16 @@ public void stop() {
1719
}
1820
}
1921

20-
public HomekitHttpServer(int port, int nThreads) {
22+
public HomekitHttpServer(InetAddress localAddress, int port, int nThreads) {
23+
this.localAddress = localAddress;
2124
this.port = port;
2225
this.nThreads = nThreads;
2326
}
2427

2528
@Override
2629
public CompletableFuture<Integer> start(HomekitClientConnectionFactory clientConnectionFactory) {
2730
if (service == null) {
28-
this.service = NettyHomekitHttpService.create(port, nThreads);
31+
this.service = NettyHomekitHttpService.create(localAddress, port, nThreads);
2932
return this.service.create(clientConnectionFactory);
3033
} else {
3134
throw new RuntimeException("HomekitHttpServer can only be started once");

src/main/java/com/beowulfe/hap/impl/http/impl/NettyHomekitHttpService.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import io.netty.handler.logging.LogLevel;
1111
import io.netty.handler.logging.LoggingHandler;
1212
import io.netty.util.concurrent.*;
13+
import java.net.InetAddress;
1314
import java.net.InetSocketAddress;
1415
import java.net.SocketAddress;
1516
import java.util.concurrent.CompletableFuture;
@@ -23,16 +24,18 @@ class NettyHomekitHttpService {
2324

2425
private static final Logger logger = LoggerFactory.getLogger(NettyHomekitHttpService.class);
2526
private final ChannelGroup allChannels = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
27+
private final InetAddress localAddress;
2628
private final int port;
2729
private final int nThreads;
2830

29-
public static NettyHomekitHttpService create(int port, int nThreads) {
30-
return new NettyHomekitHttpService(port, nThreads);
31+
public static NettyHomekitHttpService create(InetAddress localAddress, int port, int nThreads) {
32+
return new NettyHomekitHttpService(localAddress, port, nThreads);
3133
}
3234

33-
private NettyHomekitHttpService(int port, int nThreads) {
35+
private NettyHomekitHttpService(InetAddress localAddress, int port, int nThreads) {
3436
bossGroup = new NioEventLoopGroup();
3537
workerGroup = new NioEventLoopGroup();
38+
this.localAddress = localAddress;
3639
this.port = port;
3740
this.nThreads = nThreads;
3841
}
@@ -46,7 +49,7 @@ public CompletableFuture<Integer> create(HomekitClientConnectionFactory connecti
4649
.childHandler(new ServerInitializer(connectionFactory, allChannels, nThreads))
4750
.option(ChannelOption.SO_BACKLOG, 128)
4851
.childOption(ChannelOption.SO_KEEPALIVE, true);
49-
final ChannelFuture bindFuture = b.bind(port);
52+
final ChannelFuture bindFuture = b.bind(localAddress, port);
5053
bindFuture.addListener(
5154
new GenericFutureListener<Future<? super Void>>() {
5255

0 commit comments

Comments
 (0)