diff --git a/discovery/org.eclipse.tm.discovery.engine/schema/discoveryProtocol.exsd b/discovery/org.eclipse.tm.discovery.engine/schema/discoveryProtocol.exsd
index 476c62d77d3..10011af150f 100644
--- a/discovery/org.eclipse.tm.discovery.engine/schema/discoveryProtocol.exsd
+++ b/discovery/org.eclipse.tm.discovery.engine/schema/discoveryProtocol.exsd
@@ -61,6 +61,13 @@
+
+
+
+ Allows specifying multicast addresses to be used with different transports in the format "transportName1#address1;transportName2#address2"
+
+
+
diff --git a/discovery/org.eclipse.tm.discovery.engine/src/org/eclipse/tm/discovery/protocol/ProtocolFactory.java b/discovery/org.eclipse.tm.discovery.engine/src/org/eclipse/tm/discovery/protocol/ProtocolFactory.java
index 31a817f1541..e6b1dc64b2b 100644
--- a/discovery/org.eclipse.tm.discovery.engine/src/org/eclipse/tm/discovery/protocol/ProtocolFactory.java
+++ b/discovery/org.eclipse.tm.discovery.engine/src/org/eclipse/tm/discovery/protocol/ProtocolFactory.java
@@ -112,5 +112,48 @@ public class ProtocolFactory {
}
return protocol;
}
+
+ /**
+ * Gets the multicast address given a protocol name and a transport name or returns null if this information is not available
+ *
+ * @param protocolName
+ * Name of the protocol
+ * @param transportName
+ * Name of the transport
+ * @return
+ * String representing the multicast address of the given protocol and transport or null if not available
+ * @throws CoreException
+ *
+ * @see IProtocol
+ */
+ public static String getMulticastAddress(String protocolName, String transportName) throws CoreException {
+
+ String multiCastAddress = null;
+
+ IConfigurationElement[] ce = ep.getConfigurationElements();
+ for (int i = 0; i < ce.length; i++) {
+ String name = ce[i].getAttribute("name"); //$NON-NLS-1$
+ if(name!=null)
+ if(name.equalsIgnoreCase(protocolName))
+ {
+ String multicastAddresses = ce[i].getAttribute("multicast"); //$NON-NLS-1$
+ if(multicastAddresses==null)
+ break;
+
+ String[] pairs = multicastAddresses.split(";"); //$NON-NLS-1$
+ for (int j = 0; j < pairs.length; j++) {
+ String[] pair = pairs[j].split("#"); //$NON-NLS-1$
+ if(pair[0].equals(transportName))
+ {
+ multiCastAddress = pair[1];
+ break;
+ }
+ }
+
+
+ }
+ }
+ return multiCastAddress;
+ }
}
diff --git a/discovery/org.eclipse.tm.discovery.protocol.dnssd/plugin.xml b/discovery/org.eclipse.tm.discovery.protocol.dnssd/plugin.xml
index a02e3966657..acf66e48b93 100644
--- a/discovery/org.eclipse.tm.discovery.protocol.dnssd/plugin.xml
+++ b/discovery/org.eclipse.tm.discovery.protocol.dnssd/plugin.xml
@@ -14,7 +14,8 @@ Contributors:
+ class="org.eclipse.tm.internal.discovery.protocol.dnssd.DNSSDProtocol"
+ multicast="UDP#224.0.0.251"
+ name="DNS-SD"/>
diff --git a/discovery/org.eclipse.tm.discovery.wizard/src/org/eclipse/tm/internal/discovery/wizard/ServiceDiscoveryWizardMainPage.java b/discovery/org.eclipse.tm.discovery.wizard/src/org/eclipse/tm/internal/discovery/wizard/ServiceDiscoveryWizardMainPage.java
index 546699a4483..fe3ec05c878 100644
--- a/discovery/org.eclipse.tm.discovery.wizard/src/org/eclipse/tm/internal/discovery/wizard/ServiceDiscoveryWizardMainPage.java
+++ b/discovery/org.eclipse.tm.discovery.wizard/src/org/eclipse/tm/internal/discovery/wizard/ServiceDiscoveryWizardMainPage.java
@@ -17,7 +17,9 @@ import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
@@ -46,6 +48,9 @@ public class ServiceDiscoveryWizardMainPage extends WizardPage {
// widgets
private Combo queryCombo, transportCombo, protocolCombo;
private Text addressText, timeOutText;
+ private Button multicastButton;
+
+ private String tempAddress;
/**
* Wizard main page constructor
@@ -62,12 +67,22 @@ public class ServiceDiscoveryWizardMainPage extends WizardPage {
*/
public void createControl(Composite parent) {
- FillLayout layout = new FillLayout();
- layout.type = SWT.VERTICAL;
Composite comp = new Composite(parent,SWT.NULL);
+
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 1;
comp.setLayout(layout);
+ //GridData
+ GridData data = new GridData();
+ data.horizontalAlignment = GridData.FILL;
+ data.grabExcessHorizontalSpace = true;
+ data.verticalAlignment = SWT.BEGINNING;
+ data.grabExcessVerticalSpace = false;
+
+ comp.setLayoutData(data);
+
new Label(comp,SWT.NULL).setText(Messages.getString("ServiceDiscoveryWizardMainPage.AddressLabel")); //$NON-NLS-1$
addressText = new Text(comp, SWT.BORDER | SWT.SINGLE | SWT.WRAP);
@@ -88,12 +103,55 @@ public class ServiceDiscoveryWizardMainPage extends WizardPage {
}
});
+ addressText.setLayoutData(data);
+
+
+ Composite comp2 = new Composite(comp,SWT.NULL);
+ GridLayout layout2 = new GridLayout();
+ layout2.numColumns = 2;
+ comp2.setLayout(layout2);
+
+ multicastButton = new Button(comp2,SWT.CHECK);
+
+ multicastButton.addSelectionListener(new SelectionListener(){
+
+ public void widgetDefaultSelected(SelectionEvent e) {}
+
+ public void widgetSelected(SelectionEvent e) {
+
+ Object src = e.getSource();
+ if(((Button)src).getSelection())
+ {
+ String multicastAddress = null;
+
+ try {
+ multicastAddress = ProtocolFactory.getMulticastAddress(protocolCombo.getText(), transportCombo.getText());
+ } catch (CoreException e1) {}
+
+ if(multicastAddress!=null)
+ {
+ tempAddress = addressText.getText();
+ addressText.setText(multicastAddress);
+ }
+ }
+ else
+ {
+ addressText.setText(tempAddress);
+ }
+ }
+ });
+
+ new Label(comp2,SWT.NULL).setText(Messages.getString("ServiceDiscoveryWizardMainPage.MuticastAddressLabel0")); //$NON-NLS-1$
+
+
new Label(comp,SWT.NULL).setText(Messages.getString("ServiceDiscoveryWizardMainPage.TransportLabel")); //$NON-NLS-1$
transportCombo = new Combo(comp, SWT.READ_ONLY);
transportCombo.setItems(TransportFactory.getTransportList());
transportCombo.select(0);
+ transportCombo.setLayoutData(data);
+
new Label(comp,SWT.NULL).setText(Messages.getString("ServiceDiscoveryWizardMainPage.ProtocolLabel")); //$NON-NLS-1$
protocolCombo = new Combo(comp, SWT.READ_ONLY);
@@ -115,9 +173,25 @@ public class ServiceDiscoveryWizardMainPage extends WizardPage {
queryCombo.removeAll();
queryCombo.setItems(queries);
queryCombo.select(0);
+
+ if(multicastButton.getSelection())
+ {
+ String multicastAddress = null;
+
+ try {
+ multicastAddress = ProtocolFactory.getMulticastAddress(protocolCombo.getText(), transportCombo.getText());
+ } catch (CoreException e1) {}
+
+ if(multicastAddress!=null)
+ {
+ tempAddress = addressText.getText();
+ addressText.setText(multicastAddress);
+ }
+ }
}
});
+ protocolCombo.setLayoutData(data);
new Label(comp,SWT.NULL).setText(Messages.getString("ServiceDiscoveryWizardMainPage.DiscoveryQueryLabel")); //$NON-NLS-1$
@@ -131,6 +205,7 @@ public class ServiceDiscoveryWizardMainPage extends WizardPage {
}
queryCombo.select(0);
+ queryCombo.setLayoutData(data);
new Label(comp,SWT.NULL).setText(Messages.getString("ServiceDiscoveryWizardMainPage.TimeOutLabel")); //$NON-NLS-1$
@@ -138,6 +213,8 @@ public class ServiceDiscoveryWizardMainPage extends WizardPage {
timeOutText.setText(Messages.getString("ServiceDiscoveryWizardMainPage.TimeOutValue")); //$NON-NLS-1$
timeOutText.redraw();
+ timeOutText.setLayoutData(data);
+
setPageComplete(false);
setControl(comp);
diff --git a/discovery/org.eclipse.tm.discovery.wizard/src/org/eclipse/tm/internal/discovery/wizard/messages.properties b/discovery/org.eclipse.tm.discovery.wizard/src/org/eclipse/tm/internal/discovery/wizard/messages.properties
index 62313ffcb99..bc79f987d8b 100644
--- a/discovery/org.eclipse.tm.discovery.wizard/src/org/eclipse/tm/internal/discovery/wizard/messages.properties
+++ b/discovery/org.eclipse.tm.discovery.wizard/src/org/eclipse/tm/internal/discovery/wizard/messages.properties
@@ -17,6 +17,7 @@ ServiceDiscoveryWizardMainPage.TimeOutLabel=Timeout (ms):
ServiceDiscoveryWizardMainPage.TimeOutValue=500
ServiceDiscoveryWizardDisplayPage.ProtocolErrorTitle=Error
ServiceDiscoveryWizardMainPage.WizardPageDescription=Discover available services in the target device.
+ServiceDiscoveryWizardMainPage.MuticastAddressLabel0=multicast address
ServiceDiscoveryWizardDisplayPage.ProtocolErrorMessage=Error loading protocol
ServiceDiscoveryWizardDisplayPage.TransportAddressNotFoundTitle=Error
ServiceDiscoveryWizardDisplayPage.TransportAddressNotFoundMessage=Error resolving address