Small additions for url sharing.  Also added synchronization primitives for xmpp provider
diff --git a/framework/bundles/org.eclipse.ecf.presence.collab.ui/src/org/eclipse/ecf/internal/presence/collab/ui/Messages.java b/framework/bundles/org.eclipse.ecf.presence.collab.ui/src/org/eclipse/ecf/internal/presence/collab/ui/Messages.java
index 9cb7fcd..c7cb1dd 100644
--- a/framework/bundles/org.eclipse.ecf.presence.collab.ui/src/org/eclipse/ecf/internal/presence/collab/ui/Messages.java
+++ b/framework/bundles/org.eclipse.ecf.presence.collab.ui/src/org/eclipse/ecf/internal/presence/collab/ui/Messages.java
@@ -21,6 +21,8 @@
 	public static String URLShare_ENTER_URL_DEFAULT_URL;
 	public static String URLShare_ENTER_URL_DIALOG_TEXT;
 	public static String URLShare_INPUT_URL_DIALOG_TITLE;
+	public static String URLShare_RECEIVED_URL_MESSAGE;
+	public static String URLShare_RECEIVED_URL_TITLE;
 	public static String URLShareRosterContributionItem_ADD_URL_SHARE_MENU_TEXT;
 	public static String URLShareRosterContributionItem_BROWSER_ICON;
 	public static String URLShareRosterContributionItem_REMOVE_URL_SHARE_MENU_TEXT;
diff --git a/framework/bundles/org.eclipse.ecf.presence.collab.ui/src/org/eclipse/ecf/internal/presence/collab/ui/messages.properties b/framework/bundles/org.eclipse.ecf.presence.collab.ui/src/org/eclipse/ecf/internal/presence/collab/ui/messages.properties
index eade327..9ae01ff 100644
--- a/framework/bundles/org.eclipse.ecf.presence.collab.ui/src/org/eclipse/ecf/internal/presence/collab/ui/messages.properties
+++ b/framework/bundles/org.eclipse.ecf.presence.collab.ui/src/org/eclipse/ecf/internal/presence/collab/ui/messages.properties
@@ -5,3 +5,5 @@
 URLShare_INPUT_URL_DIALOG_TITLE=Enter URL to Send
 URLShare_ENTER_URL_DIALOG_TEXT=URL
 URLShare_ENTER_URL_DEFAULT_URL=http://www.eclipse.org/ecf
+URLShare_RECEIVED_URL_TITLE=Received URL
+URLShare_RECEIVED_URL_MESSAGE=Received URL from {0}\n\nDo you want to display?
diff --git a/framework/bundles/org.eclipse.ecf.presence.collab.ui/src/org/eclipse/ecf/presence/collab/ui/URLShare.java b/framework/bundles/org.eclipse.ecf.presence.collab.ui/src/org/eclipse/ecf/presence/collab/ui/URLShare.java
index 1cc84fb..9ae0d0e 100644
--- a/framework/bundles/org.eclipse.ecf.presence.collab.ui/src/org/eclipse/ecf/presence/collab/ui/URLShare.java
+++ b/framework/bundles/org.eclipse.ecf.presence.collab.ui/src/org/eclipse/ecf/presence/collab/ui/URLShare.java
@@ -11,6 +11,10 @@
 
 package org.eclipse.ecf.presence.collab.ui;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
 import java.net.URL;
 
 import org.eclipse.core.runtime.Assert;
@@ -20,6 +24,8 @@
 import org.eclipse.ecf.datashare.IChannelContainerAdapter;
 import org.eclipse.ecf.internal.presence.collab.ui.Messages;
 import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.browser.IWebBrowser;
@@ -44,24 +50,28 @@
 		return containerID;
 	}
 
-	private void showURL(final String url) {
+	private void showURL(final String user, final String url) {
 		Display.getDefault().asyncExec(new Runnable() {
 			public void run() {
-				IWorkbenchBrowserSupport support = PlatformUI.getWorkbench()
-						.getBrowserSupport();
-				IWebBrowser browser;
-				try {
-					browser = support.createBrowser(null);
-					browser.openURL(new URL(url));
-				} catch (Exception e) {
-					// TODO display error to user
-					e.printStackTrace();
+				if (MessageDialog.openQuestion(null, Messages.URLShare_RECEIVED_URL_TITLE, NLS.bind(
+						Messages.URLShare_RECEIVED_URL_MESSAGE,
+						user))) {
+					IWorkbenchBrowserSupport support = PlatformUI.getWorkbench()
+							.getBrowserSupport();
+					IWebBrowser browser;
+					try {
+						browser = support.createBrowser(null);
+						browser.openURL(new URL(url));
+					} catch (Exception e) {
+						// TODO display error to user
+						e.printStackTrace();
+					}
 				}
 			}
 		});
 	}
 
-	public void sendURL(final ID toID) {
+	public void sendURL(final String senderuser, final ID toID) {
 		Display.getDefault().asyncExec(new Runnable() {
 			public void run() {
 				InputDialog input = new InputDialog(null,
@@ -74,7 +84,8 @@
 					String send = input.getValue();
 					if (send != null && !send.equals("")) { //$NON-NLS-1$
 						try {
-							sendMessage(toID, send.getBytes());
+							sendMessage(toID, serialize(new Object[] {
+									senderuser, send }));
 						} catch (Exception e) {
 							// TODO display error to user
 						}
@@ -89,11 +100,30 @@
 		URLShareRosterContributionItem.removeURLShare(containerID);
 	}
 
-	/* (non-Javadoc)
+	/*
+	 * (non-Javadoc)
+	 * 
 	 * @see org.eclipse.ecf.datashare.AbstractShare#handleChannelData(byte[])
 	 */
 	protected void handleMessage(ID fromContainerID, byte[] data) {
-		showURL(new String(data));
+		try {
+			Object[] msg = (Object[]) deserialize(data);
+			showURL((String) msg[0], (String) msg[1]);
+		} catch (Exception e) {
+			// XXX show and/or log error
+		}
 	}
 
+	protected byte[] serialize(Object o) throws Exception {
+		ByteArrayOutputStream bos = new ByteArrayOutputStream();
+		ObjectOutputStream oos = new ObjectOutputStream(bos);
+		oos.writeObject(o);
+		return bos.toByteArray();
+	}
+
+	protected Object deserialize(byte[] bytes) throws Exception {
+		ByteArrayInputStream bins = new ByteArrayInputStream(bytes);
+		ObjectInputStream oins = new ObjectInputStream(bins);
+		return oins.readObject();
+	}
 }
diff --git a/framework/bundles/org.eclipse.ecf.presence.collab.ui/src/org/eclipse/ecf/presence/collab/ui/URLShareRosterEntryContributionItem.java b/framework/bundles/org.eclipse.ecf.presence.collab.ui/src/org/eclipse/ecf/presence/collab/ui/URLShareRosterEntryContributionItem.java
index ef6edad..4e9426b 100644
--- a/framework/bundles/org.eclipse.ecf.presence.collab.ui/src/org/eclipse/ecf/presence/collab/ui/URLShareRosterEntryContributionItem.java
+++ b/framework/bundles/org.eclipse.ecf.presence.collab.ui/src/org/eclipse/ecf/presence/collab/ui/URLShareRosterEntryContributionItem.java
@@ -36,7 +36,7 @@
 					final URLShare urlshare = tmp;
 					IAction action = new Action() {
 						public void run() {
-							urlshare.sendURL(entry.getUser().getID());
+							urlshare.sendURL(entry.getRoster().getUser().getName(),entry.getUser().getID());
 						}
 					};
 					action