Skip to content

Commit

Permalink
Consider network settings to avoid creating unexpected JmDNS instances
Browse files Browse the repository at this point in the history
Fix #3976

Signed-off-by: Laurent Garnier <lg.hc@free.fr>
  • Loading branch information
lolodomo committed Dec 29, 2023
1 parent f376606 commit 7a4dea2
Showing 1 changed file with 18 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -282,18 +282,19 @@ private void createJmDNSByAddress(InetAddress address) {
public void onChanged(List<CidrAddress> added, List<CidrAddress> removed) {
logger.debug("ip address change: added {}, removed {}", added, removed);

Set<InetAddress> filteredAddresses = getAllInetAddresses();

// First check if there is really a jmdns instance to remove or add
boolean changeRequired = false;
for (CidrAddress address : removed) {
JmDNS jmdns = jmdnsInstances.get(address.getAddress());
if (jmdns != null) {
for (InetAddress address : jmdnsInstances.keySet()) {
if (!filteredAddresses.contains(address)) {
changeRequired = true;
break;
}
}
if (!changeRequired) {
for (CidrAddress address : added) {
JmDNS jmdns = jmdnsInstances.get(address.getAddress());
for (InetAddress address : filteredAddresses) {
JmDNS jmdns = jmdnsInstances.get(address);
if (jmdns == null) {
changeRequired = true;
break;
Expand All @@ -308,20 +309,23 @@ public void onChanged(List<CidrAddress> added, List<CidrAddress> removed) {
for (ServiceDescription description : activeServices) {
unregisterServiceInternal(description);
}
for (CidrAddress address : removed) {
JmDNS jmdns = jmdnsInstances.remove(address.getAddress());
if (jmdns != null) {
closeQuietly(jmdns);
logger.debug("mDNS service has been stopped ({})", jmdns.getName());
for (InetAddress address : jmdnsInstances.keySet()) {
if (!filteredAddresses.contains(address)) {
JmDNS jmdns = jmdnsInstances.remove(address);
if (jmdns != null) {
closeQuietly(jmdns);
logger.debug("mDNS service has been stopped ({} for IP {})", jmdns.getName(),
address.getHostAddress());
}
}
}
for (CidrAddress address : added) {
JmDNS jmdns = jmdnsInstances.get(address.getAddress());
for (InetAddress address : filteredAddresses) {
JmDNS jmdns = jmdnsInstances.get(address);
if (jmdns == null) {
createJmDNSByAddress(address.getAddress());
createJmDNSByAddress(address);
} else {
logger.debug("mDNS service was already started ({} for IP {})", jmdns.getName(),
address.getAddress().getHostAddress());
address.getHostAddress());
}
}
for (ServiceDescription description : activeServices) {
Expand Down

0 comments on commit 7a4dea2

Please sign in to comment.