Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 248604
Collapse All | Expand All

(-)src/org/eclipse/equinox/internal/p2/artifact/repository/messages.properties (-1 / +41 lines)
Lines 51-54 Link Here
51
51
52
exception_unsupportedAddToComposite = Cannot add descriptors to a composite repository.
52
exception_unsupportedAddToComposite = Cannot add descriptors to a composite repository.
53
exception_unsupportedGetOutputStream=Cannot write artifacts to a composite repository.
53
exception_unsupportedGetOutputStream=Cannot write artifacts to a composite repository.
54
exception_unsupportedRemoveFromComposite = Cannot remove descriptors from a composite repository.
54
exception_unsupportedRemoveFromComposite = Cannot remove descriptors from a composite repository.
55
TransportErrorTranslator_400=Bad HTTP Request: {0}
56
TransportErrorTranslator_401=Authentication Failed - Unauthorized: {0}
57
TransportErrorTranslator_402=HTTP Payment Required: {0}
58
TransportErrorTranslator_403=HTTP Access Forbidden: {0}
59
TransportErrorTranslator_404=HTTP Remote File Not Found: {0}
60
TransportErrorTranslator_405=HTTP Method Not Allowed: {0}
61
TransportErrorTranslator_406=HTTP Request Not Acceptable: {0}
62
TransportErrorTranslator_407=HTTP Proxy Authentication Required: {0}
63
TransportErrorTranslator_408=HTTP Request Timeout: {0}
64
TransportErrorTranslator_409=HTTP Conflict In Request: {0}
65
TransportErrorTranslator_410=HTTP Remote File Permanently Removed: {0}
66
TransportErrorTranslator_411=HTTP Length Required: {0}
67
TransportErrorTranslator_412=HTTP Precondition Failed: {0}
68
TransportErrorTranslator_413=HTTP Requested Entity Too Large: {0}
69
TransportErrorTranslator_414=HTTP Request URI Too Long: {0}
70
TransportErrorTranslator_415=HTTP Unsupported Media Type: {0}
71
TransportErrorTranslator_416=HTTP Requested Range Not Satisfiable: {0}
72
TransportErrorTranslator_417=HTTP Expectation Failed: {0}
73
TransportErrorTranslator_418=HTTP April Fool's Teapot Error: {0}
74
TransportErrorTranslator_422=HTTP (WebDav) Unprocessable Entity: {0}
75
TransportErrorTranslator_423=HTTP (WebDAV) Locked: {0}
76
TransportErrorTranslator_424=HTTP (WebDAV) Failed Dependency: {0}
77
TransportErrorTranslator_425=HTTP Unordered Collection: {0}
78
TransportErrorTranslator_426=HTTP Upgrade Required: {0}
79
TransportErrorTranslator_449=HTTP Retry With Response: {0}
80
TransportErrorTranslator_450=HTTP Blocked By Parental Control: {0}
81
TransportErrorTranslator_500=HTTP Server 'Internal Error': {0}
82
TransportErrorTranslator_501=HTTP Server 'Not Implemented': {0}
83
TransportErrorTranslator_502=HTTP Server 'Bad Gateway' : {0}
84
TransportErrorTranslator_503=HTTP Server 'Service Unavailable': {0}
85
TransportErrorTranslator_504=HTTP Server 'Gateway Timeout': {0}
86
TransportErrorTranslator_505=HTTP Server 'HTTP Version Not Supported: {0}
87
TransportErrorTranslator_506=HTTP Server 'Variant Also Negotiates': {0}
88
TransportErrorTranslator_507=HTTP (WebDAV) 'Insufficient Storage': {0}
89
TransportErrorTranslator_508=HTTP Server 'Bandwidth Limit Exceeded': {0}
90
TransportErrorTranslator_510=HTTP Server 'Not Extended': {0}
91
TransportErrorTranslator_MalformedReference=Malformed reference to remote file: {0}
92
TransportErrorTranslator_MalformedRemoteFileReference=Malformed reference to remote file: {0}
93
TransportErrorTranslator_UnknownErrorCode=HTTP Server Unknown HTTP Response Code ({0}):{1}
94
TransportErrorTranslator_UnknownHost=Unknown Host: {0}
(-)src/org/eclipse/equinox/internal/p2/artifact/repository/Messages.java (+40 lines)
Lines 54-59 Link Here
54
54
55
	public static String Mirroring_NO_MATCHING_DESCRIPTOR;
55
	public static String Mirroring_NO_MATCHING_DESCRIPTOR;
56
56
57
	public static String TransportErrorTranslator_400;
58
	public static String TransportErrorTranslator_401;
59
	public static String TransportErrorTranslator_402;
60
	public static String TransportErrorTranslator_403;
61
	public static String TransportErrorTranslator_404;
62
	public static String TransportErrorTranslator_405;
63
	public static String TransportErrorTranslator_406;
64
	public static String TransportErrorTranslator_407;
65
	public static String TransportErrorTranslator_408;
66
	public static String TransportErrorTranslator_409;
67
	public static String TransportErrorTranslator_410;
68
	public static String TransportErrorTranslator_411;
69
	public static String TransportErrorTranslator_412;
70
	public static String TransportErrorTranslator_413;
71
	public static String TransportErrorTranslator_414;
72
	public static String TransportErrorTranslator_415;
73
	public static String TransportErrorTranslator_416;
74
	public static String TransportErrorTranslator_417;
75
	public static String TransportErrorTranslator_418;
76
	public static String TransportErrorTranslator_422;
77
	public static String TransportErrorTranslator_423;
78
	public static String TransportErrorTranslator_424;
79
	public static String TransportErrorTranslator_425;
80
	public static String TransportErrorTranslator_426;
81
	public static String TransportErrorTranslator_449;
82
	public static String TransportErrorTranslator_450;
83
	public static String TransportErrorTranslator_500;
84
	public static String TransportErrorTranslator_501;
85
	public static String TransportErrorTranslator_502;
86
	public static String TransportErrorTranslator_503;
87
	public static String TransportErrorTranslator_504;
88
	public static String TransportErrorTranslator_505;
89
	public static String TransportErrorTranslator_506;
90
	public static String TransportErrorTranslator_507;
91
	public static String TransportErrorTranslator_508;
92
	public static String TransportErrorTranslator_510;
93
	public static String TransportErrorTranslator_MalformedRemoteFileReference;
94
	public static String TransportErrorTranslator_UnknownErrorCode;
95
	public static String TransportErrorTranslator_UnknownHost;
96
57
	static {
97
	static {
58
		// initialize resource bundles
98
		// initialize resource bundles
59
		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
99
		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
(-)src/org/eclipse/equinox/internal/p2/artifact/repository/ECFTransport.java (-8 / +31 lines)
Lines 8-13 Link Here
8
 * Contributors:
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
9
 *     IBM Corporation - initial API and implementation
10
 *		compeople AG (Stefan Liebig) - various ongoing maintenance
10
 *		compeople AG (Stefan Liebig) - various ongoing maintenance
11
 *		henrik.lindberg@cloudsmith.com
11
 *******************************************************************************/
12
 *******************************************************************************/
12
package org.eclipse.equinox.internal.p2.artifact.repository;
13
package org.eclipse.equinox.internal.p2.artifact.repository;
13
14
Lines 15-20 Link Here
15
import java.net.ProtocolException;
16
import java.net.ProtocolException;
16
import java.net.URLEncoder;
17
import java.net.URLEncoder;
17
import org.eclipse.core.runtime.*;
18
import org.eclipse.core.runtime.*;
19
import org.eclipse.core.runtime.jobs.*;
18
import org.eclipse.ecf.core.security.ConnectContextFactory;
20
import org.eclipse.ecf.core.security.ConnectContextFactory;
19
import org.eclipse.ecf.core.security.IConnectContext;
21
import org.eclipse.ecf.core.security.IConnectContext;
20
import org.eclipse.ecf.filetransfer.*;
22
import org.eclipse.ecf.filetransfer.*;
Lines 120-132 Link Here
120
122
121
	public IStatus download(String url, OutputStream destination, IProgressMonitor monitor) {
123
	public IStatus download(String url, OutputStream destination, IProgressMonitor monitor) {
122
		try {
124
		try {
125
			// First try without asking user
123
			IConnectContext context = getConnectionContext(url, false);
126
			IConnectContext context = getConnectionContext(url, false);
124
			for (int i = 0; i < LOGIN_RETRIES; i++) {
127
			for (int i = 0; i < LOGIN_RETRIES; i++) {
125
				try {
128
				try {
126
					return performDownload(url, destination, context, monitor);
129
					return performDownload(url, destination, context, monitor);
127
				} catch (ProtocolException e) {
130
				} catch (ProtocolException e) {
128
					if (e == ERROR_401)
131
					if (e == ERROR_401)
129
						context = getConnectionContext(url, true);
132
						context = getConnectionContext(url, true); // ask user
130
				}
133
				}
131
			}
134
			}
132
		} catch (UserCancelledException e) {
135
		} catch (UserCancelledException e) {
Lines 153-159 Link Here
153
			public void handleTransferEvent(IFileTransferEvent event) {
156
			public void handleTransferEvent(IFileTransferEvent event) {
154
				if (event instanceof IFileTransferConnectStartEvent) {
157
				if (event instanceof IFileTransferConnectStartEvent) {
155
					IFileTransferConnectStartEvent cse = (IFileTransferConnectStartEvent) event;
158
					IFileTransferConnectStartEvent cse = (IFileTransferConnectStartEvent) event;
156
					FileTransferJob connectJob = cse.prepareConnectJob(null);
159
					final FileTransferJob connectJob = cse.prepareConnectJob(null);
160
					IJobChangeListener connectListener = new JobChangeAdapter() {
161
162
						public void done(IJobChangeEvent jobEvent) {
163
164
							synchronized (result) {
165
								result[0] = connectJob.getResult();
166
								result.notify();
167
							}
168
169
						}
170
					};
171
					connectJob.addJobChangeListener(connectListener);
157
					cse.connectUsingJob(connectJob);
172
					cse.connectUsingJob(connectJob);
158
				} else if (event instanceof IIncomingFileTransferReceiveStartEvent) {
173
				} else if (event instanceof IIncomingFileTransferReceiveStartEvent) {
159
					IIncomingFileTransferReceiveStartEvent rse = (IIncomingFileTransferReceiveStartEvent) event;
174
					IIncomingFileTransferReceiveStartEvent rse = (IIncomingFileTransferReceiveStartEvent) event;
Lines 205-213 Link Here
205
				if (exception.getMessage() != null && (exception.getMessage().indexOf(" 401 ") != -1 || exception.getMessage().indexOf(SERVER_REDIRECT) != -1)) //$NON-NLS-1$
220
				if (exception.getMessage() != null && (exception.getMessage().indexOf(" 401 ") != -1 || exception.getMessage().indexOf(SERVER_REDIRECT) != -1)) //$NON-NLS-1$
206
					throw ERROR_401;
221
					throw ERROR_401;
207
			}
222
			}
208
			return statusOn(target, status);
223
			return statusOn(target, TransportErrorTranslator.statusFromException(e, toDownload));
209
		} catch (FileCreateException e) {
224
		} catch (FileCreateException e) {
210
			return statusOn(target, e.getStatus());
225
			return statusOn(target, TransportErrorTranslator.malformedReferenceStatus(e, toDownload));
226
		} catch (NumberFormatException e) {
227
			// ECF Runtime exception - https://bugs.eclipse.org/bugs/show_bug.cgi?id=266140
228
			return statusOn(target, TransportErrorTranslator.malformedReferenceStatus(e, toDownload));
211
		}
229
		}
212
		synchronized (result) {
230
		synchronized (result) {
213
			while (result[0] == null) {
231
			while (result[0] == null) {
Lines 220-227 Link Here
220
				}
238
				}
221
			}
239
			}
222
		}
240
		}
223
241
		// the Status in result[0] may be too generic - i.e. "Transfer Exception", translate and return
224
		return statusOn(target, result[0]);
242
		return statusOn(target, TransportErrorTranslator.statusFromOriginalStatus(result[0], toDownload));
225
	}
243
	}
226
244
227
	/**
245
	/**
Lines 248-255 Link Here
248
		}
266
		}
249
		String nodeName = IRepository.PREFERENCE_NODE + '/' + nodeKey;
267
		String nodeName = IRepository.PREFERENCE_NODE + '/' + nodeKey;
250
		ISecurePreferences prefNode = null;
268
		ISecurePreferences prefNode = null;
251
		if (securePreferences.nodeExists(nodeName))
269
		try {
252
			prefNode = securePreferences.node(nodeName);
270
			if (securePreferences.nodeExists(nodeName))
271
				prefNode = securePreferences.node(nodeName);
272
		} catch (IllegalArgumentException e) {
273
			// thrown when nodeName is malformed
274
			return null; // not meaningful to ask for user/pwd, they can't be saved anyway.
275
		}
253
		if (!prompt) {
276
		if (!prompt) {
254
			if (prefNode == null)
277
			if (prefNode == null)
255
				return null;
278
				return null;
(-)src/org/eclipse/equinox/internal/p2/artifact/repository/TransportErrorTranslator.java (+139 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2009 Cloudsmith Inc. and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     Cloudsmith Inc. - initial API and implementation
10
 *******************************************************************************/
11
12
package org.eclipse.equinox.internal.p2.artifact.repository;
13
14
import java.io.FileNotFoundException;
15
import java.net.UnknownHostException;
16
import org.eclipse.core.runtime.IStatus;
17
import org.eclipse.core.runtime.Status;
18
import org.eclipse.ecf.filetransfer.IncomingFileTransferException;
19
import org.eclipse.osgi.util.NLS;
20
21
/**
22
 * Utility class to transform transport errors into error messages.
23
 * @author henrik.lindberg@cloudsmith.com
24
 *
25
 */
26
public class TransportErrorTranslator {
27
28
	public static String codeToMessage(int code, String toDownload) {
29
		switch (code) {
30
			case 400 :
31
				return NLS.bind(Messages.TransportErrorTranslator_400, toDownload);
32
			case 401 :
33
				return NLS.bind(Messages.TransportErrorTranslator_401, toDownload);
34
			case 402 :
35
				return NLS.bind(Messages.TransportErrorTranslator_402, toDownload);
36
			case 403 :
37
				return NLS.bind(Messages.TransportErrorTranslator_403, toDownload);
38
			case 404 :
39
				return NLS.bind(Messages.TransportErrorTranslator_404, toDownload);
40
			case 405 :
41
				return NLS.bind(Messages.TransportErrorTranslator_405, toDownload);
42
			case 406 :
43
				return NLS.bind(Messages.TransportErrorTranslator_406, toDownload);
44
			case 407 :
45
				return NLS.bind(Messages.TransportErrorTranslator_407, toDownload);
46
			case 408 :
47
				return NLS.bind(Messages.TransportErrorTranslator_408, toDownload);
48
			case 409 :
49
				return NLS.bind(Messages.TransportErrorTranslator_409, toDownload);
50
			case 410 :
51
				return NLS.bind(Messages.TransportErrorTranslator_410, toDownload);
52
			case 411 :
53
				return NLS.bind(Messages.TransportErrorTranslator_411, toDownload);
54
			case 412 :
55
				return NLS.bind(Messages.TransportErrorTranslator_412, toDownload);
56
			case 413 :
57
				return NLS.bind(Messages.TransportErrorTranslator_413, toDownload);
58
			case 414 :
59
				return NLS.bind(Messages.TransportErrorTranslator_414, toDownload);
60
			case 415 :
61
				return NLS.bind(Messages.TransportErrorTranslator_415, toDownload);
62
			case 416 :
63
				return NLS.bind(Messages.TransportErrorTranslator_416, toDownload);
64
			case 417 :
65
				return NLS.bind(Messages.TransportErrorTranslator_417, toDownload);
66
			case 418 :
67
				return NLS.bind(Messages.TransportErrorTranslator_418, toDownload);
68
			case 422 :
69
				return NLS.bind(Messages.TransportErrorTranslator_422, toDownload);
70
			case 423 :
71
				return NLS.bind(Messages.TransportErrorTranslator_423, toDownload);
72
			case 424 :
73
				return NLS.bind(Messages.TransportErrorTranslator_424, toDownload);
74
			case 425 :
75
				return NLS.bind(Messages.TransportErrorTranslator_425, toDownload);
76
			case 426 :
77
				return NLS.bind(Messages.TransportErrorTranslator_426, toDownload);
78
			case 449 :
79
				return NLS.bind(Messages.TransportErrorTranslator_449, toDownload);
80
			case 450 :
81
				return NLS.bind(Messages.TransportErrorTranslator_450, toDownload);
82
83
			case 500 :
84
				return NLS.bind(Messages.TransportErrorTranslator_500, toDownload);
85
			case 501 :
86
				return NLS.bind(Messages.TransportErrorTranslator_501, toDownload);
87
			case 502 :
88
				return NLS.bind(Messages.TransportErrorTranslator_502, toDownload);
89
			case 503 :
90
				return NLS.bind(Messages.TransportErrorTranslator_503, toDownload);
91
			case 504 :
92
				return NLS.bind(Messages.TransportErrorTranslator_504, toDownload);
93
			case 505 :
94
				return NLS.bind(Messages.TransportErrorTranslator_505, toDownload);
95
			case 506 :
96
				return NLS.bind(Messages.TransportErrorTranslator_506, toDownload);
97
			case 507 :
98
				return NLS.bind(Messages.TransportErrorTranslator_507, toDownload);
99
			case 508 :
100
				return NLS.bind(Messages.TransportErrorTranslator_508, toDownload);
101
			case 510 :
102
				return NLS.bind(Messages.TransportErrorTranslator_510, toDownload);
103
104
			default :
105
				return NLS.bind(Messages.TransportErrorTranslator_UnknownErrorCode + Integer.toString(code), toDownload);
106
		}
107
	}
108
109
	public static IStatus statusFromException(IncomingFileTransferException e, String toDownload) {
110
		IStatus status = e.getStatus();
111
		Throwable exception = status.getException();
112
		if (exception instanceof NumberFormatException) {
113
			// ECF Reports this as "can not connect" - https://bugs.eclipse.org/bugs/show_bug.cgi?id=266140
114
			return malformedReferenceStatus(e, toDownload);
115
		}
116
		if (e.getErrorCode() == 404 || exception instanceof FileNotFoundException) {
117
			// The 404 may be specific to HTTP
118
			return new Status(IStatus.ERROR, Activator.ID, codeToMessage(404, toDownload), e);
119
		}
120
		// Switch on error codes in the HTTP error code range 
121
		if (e.getErrorCode() >= 400 && e.getErrorCode() <= 600)
122
			return new Status(IStatus.ERROR, Activator.ID, codeToMessage(e.getErrorCode(), toDownload), e);
123
124
		// Return original status
125
		return status;
126
	}
127
128
	public static IStatus statusFromOriginalStatus(IStatus original, String toDownload) {
129
		Throwable t = original.getException();
130
		if (t instanceof UnknownHostException)
131
			return new Status(IStatus.ERROR, Activator.ID, NLS.bind(Messages.TransportErrorTranslator_UnknownHost, toDownload), t);
132
		return original;
133
	}
134
135
	public static IStatus malformedReferenceStatus(Throwable t, String toDownload) {
136
		return new Status(IStatus.ERROR, Activator.ID, NLS.bind(Messages.TransportErrorTranslator_MalformedRemoteFileReference, toDownload), t);
137
138
	}
139
}
(-)src/org/eclipse/equinox/p2/tests/artifact/repository/TransferExceptionsTest.java (+56 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2009 Cloudsmith Inc. and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     Cloudsmith Inc. - initial API and implementation
10
 *******************************************************************************/
11
package org.eclipse.equinox.p2.tests.artifact.repository;
12
13
import java.io.*;
14
import org.eclipse.core.runtime.*;
15
import org.eclipse.equinox.internal.p2.artifact.repository.ECFTransport;
16
import org.eclipse.equinox.p2.tests.AbstractProvisioningTest;
17
import org.osgi.framework.BundleException;
18
19
/**
20
 * Test supposed to be used interactivly to monitor the error message output.
21
 * @author henrik.lindberg@cloudsmith.com
22
 *
23
 */
24
public class TransferExceptionsTest extends AbstractProvisioningTest {
25
26
	public void testErrorMessages() {
27
		FileOutputStream fos = null;
28
		File f = null;
29
		try {
30
			f = File.createTempFile("TransferTest", "dummy.txt");
31
			fos = new FileOutputStream(f);
32
			Platform.getBundle("org.eclipse.ecf.provider.filetransfer").start();
33
		} catch (IOException e) {
34
			fail("1.0", e);
35
		} catch (BundleException e) {
36
			fail("1.5", e);
37
		}
38
		IStatus s = ECFTransport.getInstance().download("bogus!bogus", fos, new NullProgressMonitor());
39
		assertNotOK(s);
40
		System.err.print(s.getMessage() + "\n");
41
		s = ECFTransport.getInstance().download("http:bogusURL", fos, new NullProgressMonitor());
42
		assertNotOK(s);
43
		s = ECFTransport.getInstance().download("http://bogusURL:999999999999/", fos, new NullProgressMonitor());
44
		assertNotOK(s);
45
		System.err.print(s.getMessage() + "\n");
46
		s = ECFTransport.getInstance().download("http:/bogusURL:999999999999/", fos, new NullProgressMonitor());
47
		assertNotOK(s);
48
		System.err.print(s.getMessage() + "\n");
49
		s = ECFTransport.getInstance().download("http://bogus.nowhere", fos, new NullProgressMonitor());
50
		assertNotOK(s);
51
		System.err.print(s.getMessage() + "\n");
52
		s = ECFTransport.getInstance().download("http://www.eclipse.org/AFileThatDoesNotExist.foo", fos, new NullProgressMonitor());
53
		assertNotOK(s);
54
		System.err.print(s.getMessage() + "\n");
55
	}
56
}

Return to bug 248604