API addition and provider implementation changes for bug 221177.  Also added GetRemoteFileNameTest.
diff --git a/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/retrieve/AbstractRetrieveFileTransfer.java b/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/retrieve/AbstractRetrieveFileTransfer.java
index df4dce5..66a2119 100644
--- a/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/retrieve/AbstractRetrieveFileTransfer.java
+++ b/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/retrieve/AbstractRetrieveFileTransfer.java
@@ -689,4 +689,17 @@
 			setupProxy(proxy);
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.ecf.filetransfer.IIncomingFileTransfer#getRemoteFileName()
+	 */
+	public String getRemoteFileName() {
+		String pathStr = getRemoteFileURL().getPath();
+		if (pathStr.length() > 0) {
+			IPath path = Path.fromPortableString(pathStr);
+			if (path.segmentCount() > 0)
+				return path.lastSegment();
+		}
+		return null;
+	}
+
 }
diff --git a/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/retrieve/HttpHelper.java b/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/retrieve/HttpHelper.java
new file mode 100644
index 0000000..8059578
--- /dev/null
+++ b/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/retrieve/HttpHelper.java
@@ -0,0 +1,39 @@
+/****************************************************************************
+ * Copyright (c) 2008 Composent, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Composent, Inc. - initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.ecf.provider.filetransfer.retrieve;
+
+import java.util.StringTokenizer;
+
+/**
+ *
+ */
+public class HttpHelper {
+
+	public static final String CONTENT_DISPOSITION_HEADER = "Content-Disposition"; //$NON-NLS-1$
+
+	public static String getRemoteFileNameFromContentDispositionHeader(String headerValue) {
+		if (headerValue != null) {
+			StringTokenizer tokens = new StringTokenizer(headerValue, " \t\n\r\f=;,"); //$NON-NLS-1$
+			while (tokens.hasMoreTokens()) {
+				String token = tokens.nextToken();
+				if (token.equals("filename") && tokens.hasMoreTokens()) { //$NON-NLS-1$
+					// Expect next token to be the filename
+					String fileName = tokens.nextToken();
+					if (fileName.startsWith("\"") && fileName.endsWith("\"")) //$NON-NLS-1$ //$NON-NLS-2$
+						fileName = fileName.substring(1, fileName.length() - 1);
+					return fileName;
+				}
+			}
+		}
+		return null;
+	}
+}
diff --git a/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/retrieve/UrlConnectionRetrieveFileTransfer.java b/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/retrieve/UrlConnectionRetrieveFileTransfer.java
index 001d946..e2bd8ab 100644
--- a/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/retrieve/UrlConnectionRetrieveFileTransfer.java
+++ b/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/retrieve/UrlConnectionRetrieveFileTransfer.java
@@ -41,6 +41,8 @@
 
 	protected int responseCode = -1;
 
+	private String remoteFileName;
+
 	protected String responseMessage = null;
 
 	private JREProxyHelper proxyHelper = null;
@@ -54,6 +56,13 @@
 		proxyHelper = new JREProxyHelper();
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.ecf.provider.filetransfer.retrieve.AbstractRetrieveFileTransfer#getRemoteFileName()
+	 */
+	public String getRemoteFileName() {
+		return remoteFileName;
+	}
+
 	protected void connect() throws IOException {
 		setupTimeouts();
 		urlConnection = getRemoteFileURL().openConnection();
@@ -137,6 +146,15 @@
 			throw new IOException(Messages.UrlConnectionRetrieveFileTransfer_EXCEPTION_INVALID_SERVER_RESPONSE);
 		lastModifiedTime = urlConnection.getLastModified();
 		setFileLength(urlConnection.getContentLength());
+
+		String contentDispositionValue = urlConnection.getHeaderField(HttpHelper.CONTENT_DISPOSITION_HEADER);
+		if (contentDispositionValue != null) {
+			remoteFileName = HttpHelper.getRemoteFileNameFromContentDispositionHeader(contentDispositionValue);
+		}
+
+		if (remoteFileName == null) {
+			remoteFileName = super.getRemoteFileName();
+		}
 	}
 
 	protected void getResumeResponseHeaderValues() throws IOException {