3
import jenkins.model.Jenkins;
5
import javax.jmdns.JmDNS;
6
import javax.jmdns.ServiceInfo;
7
import java.io.Closeable;
8
import java.io.IOException;
10
import java.util.HashMap;
12
import java.util.logging.Level;
13
import java.util.logging.Logger;
16
* Registers a DNS multi-cast service-discovery support.
18
* @author Kohsuke Kawaguchi
20
public class DNSMultiCast implements Closeable {
23
public DNSMultiCast(Jenkins hudson) {
24
if (disabled) return; // escape hatch
27
this.jmdns = JmDNS.create();
29
Map<String,String> props = new HashMap<String, String>();
30
String rootURL = hudson.getRootUrl();
31
if (rootURL==null) return;
34
props.put("version",String.valueOf(Jenkins.getVersion()));
35
} catch (IllegalArgumentException e) {
36
// failed to parse the version number
39
TcpSlaveAgentListener tal = hudson.getTcpSlaveAgentListener();
41
props.put("slave-port",String.valueOf(tal.getPort()));
43
props.put("server-id", hudson.getLegacyInstanceId());
45
URL jenkins_url = new URL(rootURL);
46
int jenkins_port = jenkins_url.getPort();
47
if (jenkins_port == -1) {
50
if (jenkins_url.getPath().length() > 0) {
51
props.put("path", jenkins_url.getPath());
54
jmdns.registerService(ServiceInfo.create("_hudson._tcp.local.","hudson",
55
jenkins_port,0,0,props)); // for backward compatibility
56
jmdns.registerService(ServiceInfo.create("_jenkins._tcp.local.","jenkins",
57
jenkins_port,0,0,props));
59
// Make Jenkins appear in Safari's Bonjour bookmarks
60
jmdns.registerService(ServiceInfo.create("_http._tcp.local.","Jenkins",
61
jenkins_port,0,0,props));
62
} catch (IOException e) {
63
LOGGER.log(Level.WARNING,"Failed to advertise the service to DNS multi-cast",e);
72
// } catch (final IOException e) {
73
// LOGGER.log(Level.WARNING,"Failed to close down JmDNS instance!",e);
78
private static final Logger LOGGER = Logger.getLogger(DNSMultiCast.class.getName());
80
public static boolean disabled = Boolean.getBoolean(DNSMultiCast.class.getName()+".disabled");