Search in sources :

Example 1 with JmDNS

use of javax.jmdns.JmDNS in project JAirPort by froks.

the class JmmDNSImpl method unregisterService.

/*
     * (non-Javadoc)
     * @see javax.jmdns.JmmDNS#unregisterService(javax.jmdns.ServiceInfo)
     */
@Override
public void unregisterService(ServiceInfo info) {
    synchronized (_services) {
        for (JmDNS mDNS : _knownMDNS.values()) {
            mDNS.unregisterService(info);
        }
        ((ServiceInfoImpl) info).setDelegate(null);
        _services.remove(info.getQualifiedName());
    }
}
Also used : JmDNS(javax.jmdns.JmDNS)

Example 2 with JmDNS

use of javax.jmdns.JmDNS in project JMRI by JMRI.

the class ZeroConfService method publish.

/**
     * Start advertising the service.
     */
public void publish() {
    if (!isPublished()) {
        ZeroConfService.services.put(this.key(), this);
        this.listeners.stream().forEach((listener) -> {
            listener.serviceQueued(new ZeroConfServiceEvent(this, null));
        });
        boolean useIPv4 = ProfileUtils.getPreferences(ProfileManager.getDefault().getActiveProfile(), ZeroConfService.class, false).getBoolean(ZeroConfService.IPv4, true);
        boolean useIPv6 = ProfileUtils.getPreferences(ProfileManager.getDefault().getActiveProfile(), ZeroConfService.class, false).getBoolean(ZeroConfService.IPv6, true);
        for (JmDNS netService : ZeroConfService.netServices().values()) {
            ZeroConfServiceEvent event;
            ServiceInfo info;
            try {
                if (netService.getInetAddress() instanceof Inet6Address && !useIPv6) {
                    // Skip if address is IPv6 and should not be advertised on
                    log.debug("Ignoring IPv6 address {}", netService.getInetAddress().getHostAddress());
                    continue;
                }
                if (netService.getInetAddress() instanceof Inet4Address && !useIPv4) {
                    // Skip if address is IPv4 and should not be advertised on
                    log.debug("Ignoring IPv4 address {}", netService.getInetAddress().getHostAddress());
                    continue;
                }
                try {
                    log.debug("Publishing ZeroConfService for '{}' on {}", key(), netService.getInetAddress().getHostAddress());
                } catch (IOException ex) {
                    log.debug("Publishing ZeroConfService for '{}' with IOException {}", key(), ex.getLocalizedMessage(), ex);
                }
                // JmDNS requires a 1-to-1 mapping of serviceInfo to InetAddress
                if (!this.serviceInfos.containsKey(netService.getInetAddress())) {
                    try {
                        info = this.serviceInfo();
                        netService.registerService(info);
                        log.debug("Register service '{}' on {} successful.", this.key(), netService.getInetAddress().getHostAddress());
                    } catch (IllegalStateException ex) {
                        // thrown if the reference serviceInfo object is in use
                        try {
                            log.debug("Initial attempt to register '{}' on {} failed.", this.key(), netService.getInetAddress().getHostAddress());
                            info = this.addServiceInfo(netService);
                            log.debug("Retrying register '{}' on {}.", this.key(), netService.getInetAddress().getHostAddress());
                            netService.registerService(info);
                        } catch (IllegalStateException ex1) {
                            // thrown if service gets registered on interface by
                            // the networkListener before this loop on interfaces
                            // completes, so we only ensure a later notification
                            // is not posted continuing to next interface in list
                            log.debug("'{}' is already registered on {}.", this.key(), netService.getInetAddress().getHostAddress());
                            continue;
                        }
                    }
                } else {
                    log.debug("skipping '{}' on {}, already in serviceInfos.", this.key(), netService.getInetAddress().getHostAddress());
                }
                event = new ZeroConfServiceEvent(this, netService);
            } catch (IOException ex) {
                log.error("Unable to publish service for '{}': {}", key(), ex.getMessage());
                continue;
            }
            this.listeners.stream().forEach((listener) -> {
                listener.servicePublished(event);
            });
        }
    }
}
Also used : ServiceInfo(javax.jmdns.ServiceInfo) Inet4Address(java.net.Inet4Address) JmDNS(javax.jmdns.JmDNS) Inet6Address(java.net.Inet6Address) IOException(java.io.IOException)

Example 3 with JmDNS

use of javax.jmdns.JmDNS in project EngineDriver by JMRI.

the class JmmDNSImpl method unregisterService.

/*
     * (non-Javadoc)
     * @see javax.jmdns.JmmDNS#unregisterService(javax.jmdns.ServiceInfo)
     */
@Override
public void unregisterService(ServiceInfo info) {
    // We need to get the list out of the synchronized block to prevent dead locks
    final JmDNS[] dnsArray = this.getDNS();
    synchronized (_services) {
        _services.remove(info.getQualifiedName());
        for (JmDNS mDNS : dnsArray) {
            mDNS.unregisterService(info);
        }
        ((ServiceInfoImpl) info).setDelegate(null);
    }
}
Also used : JmDNS(javax.jmdns.JmDNS)

Example 4 with JmDNS

use of javax.jmdns.JmDNS in project EngineDriver by JMRI.

the class JmmDNSImpl method addServiceListener.

/*
     * (non-Javadoc)
     * @see javax.jmdns.JmmDNS#addServiceListener(java.lang.String, javax.jmdns.ServiceListener)
     */
@Override
public void addServiceListener(String type, ServiceListener listener) {
    final String loType = type.toLowerCase();
    List<ServiceListener> list = _serviceListeners.get(loType);
    if (list == null) {
        _serviceListeners.putIfAbsent(loType, new LinkedList<ServiceListener>());
        list = _serviceListeners.get(loType);
    }
    if (list != null) {
        synchronized (list) {
            if (!list.contains(listener)) {
                list.add(listener);
            }
        }
    }
    for (JmDNS mDNS : this.getDNS()) {
        mDNS.addServiceListener(type, listener);
    }
}
Also used : ServiceListener(javax.jmdns.ServiceListener) JmDNS(javax.jmdns.JmDNS)

Example 5 with JmDNS

use of javax.jmdns.JmDNS in project smarthome by eclipse.

the class MDNSClientImpl method activate.

public void activate() {
    for (InetAddress address : getAllInetAddresses()) {
        try {
            JmDNS jmdns = JmDNS.create(address, "JmDNS-IP-" + (jmdnsInstances.size() + 1));
            jmdnsInstances.add(jmdns);
            logger.debug("mDNS service has been started ({} for IP {})", jmdns.getName(), address.getHostAddress());
        } catch (IOException e) {
            logger.debug("JmDNS instantiation failed ({})!", address.getHostAddress());
        }
    }
}
Also used : JmDNS(javax.jmdns.JmDNS) IOException(java.io.IOException) InetAddress(java.net.InetAddress)

Aggregations

JmDNS (javax.jmdns.JmDNS)22 IOException (java.io.IOException)13 ServiceInfo (javax.jmdns.ServiceInfo)11 ExecutorService (java.util.concurrent.ExecutorService)6 InetAddress (java.net.InetAddress)4 ArrayList (java.util.ArrayList)4 ExecutionException (java.util.concurrent.ExecutionException)4 List (java.util.List)3 NetworkTopologyEvent (javax.jmdns.NetworkTopologyEvent)3 NetworkTopologyListener (javax.jmdns.NetworkTopologyListener)3 ServiceListener (javax.jmdns.ServiceListener)3 NamedThreadFactory (javax.jmdns.impl.util.NamedThreadFactory)3 HashSet (java.util.HashSet)2 LinkedList (java.util.LinkedList)2 Callable (java.util.concurrent.Callable)2 Future (java.util.concurrent.Future)2 File (java.io.File)1 FileInputStream (java.io.FileInputStream)1 BigInteger (java.math.BigInteger)1 Inet4Address (java.net.Inet4Address)1