From c66765f2a06c8bada24318a3b908a7ff4baf925a Mon Sep 17 00:00:00 2001 From: kohsuke Date: Wed, 6 May 2009 21:16:26 +0000 Subject: [PATCH] Added a new extension point to contribute fragment to UDP-based auto discovery. git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@17797 71c3de6d-444a-0410-be80-ed276b4c234a --- .../java/hudson/UDPBroadcastFragment.java | 35 +++++++++++++++++++ .../main/java/hudson/UDPBroadcastThread.java | 4 +++ 2 files changed, 39 insertions(+) create mode 100644 core/src/main/java/hudson/UDPBroadcastFragment.java diff --git a/core/src/main/java/hudson/UDPBroadcastFragment.java b/core/src/main/java/hudson/UDPBroadcastFragment.java new file mode 100644 index 0000000000..2161f10201 --- /dev/null +++ b/core/src/main/java/hudson/UDPBroadcastFragment.java @@ -0,0 +1,35 @@ +package hudson; + +import hudson.model.Hudson; + +import java.net.SocketAddress; + +/** + * Extension point that contributes an XML fragment to the UDP broadcast. + * + *

+ * Put {@link Extension} on your implementation class to have it auto-discovered. + * + * @author Kohsuke Kawaguchi + * @since 1.304 + */ +public abstract class UDPBroadcastFragment implements ExtensionPoint { + /** + * Called to build up a response XML. + * + * @param buf + * This is the buffer to write XML to. The implementation of this method + * should write a complete fragment. Because of the packet length restriction + * in UDP (somewhere around 1500 bytes), you cannot send a large amount of information. + * @param sender + * The socket address that sent the discovery packet out. + */ + public abstract void buildFragment(StringBuilder buf, SocketAddress sender); + + /** + * Returns all the registered {@link UDPBroadcastFragment}s. + */ + public static ExtensionList all() { + return Hudson.getInstance().getExtensionList(UDPBroadcastFragment.class); + } +} diff --git a/core/src/main/java/hudson/UDPBroadcastThread.java b/core/src/main/java/hudson/UDPBroadcastThread.java index 9999d7cf4b..c13dea8189 100644 --- a/core/src/main/java/hudson/UDPBroadcastThread.java +++ b/core/src/main/java/hudson/UDPBroadcastThread.java @@ -69,6 +69,10 @@ public class UDPBroadcastThread extends Thread { tag(buf,"version",Hudson.VERSION); tag(buf,"url",hudson.getRootUrl()); tag(buf,"slave-port",tal==null?null:tal.getPort()); + + for (UDPBroadcastFragment f : UDPBroadcastFragment.all()) + f.buildFragment(buf,sender); + buf.append(""); b.clear();