1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-25 18:05:33 +02:00

[227135] Cryptic exception when sftp-server is missing

This commit is contained in:
Martin Oberhuber 2009-03-19 23:16:11 +00:00
parent 1aae9acec9
commit c3a6d1600f
11 changed files with 111 additions and 71 deletions

View file

@ -1,16 +1,17 @@
/*******************************************************************************
* Copyright (c) 2006, 2008 Wind River Systems, 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:
* Martin Oberhuber (Wind River) - initial API and implementation
* Martin Oberhuber (Wind River) - copy dialogs from team.cvs.ui
* Copyright (c) 2006, 2009 Wind River Systems, 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:
* Martin Oberhuber (Wind River) - initial API and implementation
* Martin Oberhuber (Wind River) - copy dialogs from team.cvs.ui
* David McKnight (IBM) - [216252] [api][nls] Resource Strings specific to subsystems should be moved from rse.ui into files.ui / shells.ui / processes.ui where possible
* David McKnight (IBM) - [220547] [api][breaking] SimpleSystemMessage needs to specify a message id and some messages should be shared
* Johnson Ma (Wind River) - [218880] Add UI setting for ssh keepalives
* Martin Oberhuber (Wind River) - [227135] Cryptic exception when sftp-server is missing
*******************************************************************************/
package org.eclipse.rse.internal.connectorservice.ssh;
@ -27,10 +28,11 @@ public class SshConnectorResources extends NLS {
public static String SshConnectorService_Name;
public static String SshConnectorService_Description;
public static String SshConnectorService_ErrorDisconnecting;
public static String SshConnectorService_Info;
public static String SshConnectorService_Warning;
public static String SshConnectorService_Missing_sshd;
//These are from org.eclipse.team.cvs.ui.CVSUIMessages
public static String UserValidationDialog_required;
@ -44,9 +46,9 @@ public class SshConnectorResources extends NLS {
public static String KeyboardInteractiveDialog_message;
public static String KeyboardInteractiveDialog_labelConnection;
public static String SSH_SETTINGS_LABEL;
public static String PROPERTY_LABEL_TIMEOUT;
public static String PROPERTY_LABEL_KEEPALIVE;
}

View file

@ -1,5 +1,5 @@
################################################################################
# Copyright (c) 2006, 2008 Wind River Systems, Inc. and others.
# Copyright (c) 2006, 2009 Wind River Systems, 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
@ -11,6 +11,7 @@
# David McKnight (IBM) - [216252] [api][nls] Resource Strings specific to subsystems should be moved from rse.ui into files.ui / shells.ui / processes.ui where possible
# David McKnight (IBM) - [220547] [api][breaking] SimpleSystemMessage needs to specify a message id and some messages should be shared
# Johnson Ma (Wind River) - [218880] Add UI setting for ssh keepalives
# Martin Oberhuber (Wind River) - [227135] Cryptic exception when sftp-server is missing
################################################################################
# NLS_MESSAGEFORMAT_VAR
@ -22,6 +23,7 @@ SshConnectorService_Description=SSH Connector Service Description
SshConnectorService_ErrorDisconnecting=ConnectionStatusListener: Error disconnecting
SshConnectorService_Warning=Warning
SshConnectorService_Info=Info
SshConnectorService_Missing_sshd=Failed to connect sshd on "{0}:{1}"
#These are from cvs.ui/messages.properties
UserValidationDialog_required=Password Required

View file

@ -1,10 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006, 2008 Wind River Systems, Inc. and others.
* Copyright (c) 2006, 2009 Wind River Systems, 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:
* Martin Oberhuber (Wind River) - initial API and implementation
* David Dykstal (IBM) - 168977: refactoring IConnectorService and ServerLauncher hierarchies
@ -18,6 +18,7 @@
* David McKnight (IBM) - [216252] [api][nls] Resource Strings specific to subsystems should be moved from rse.ui into files.ui / shells.ui / processes.ui where possible
* David McKnight (IBM) - [220547] [api][breaking] SimpleSystemMessage needs to specify a message id and some messages should be shared
* Johnson Ma (Wind River) - [218880] Add UI setting for ssh keepalives
* Martin Oberhuber (Wind River) - [227135] Cryptic exception when sftp-server is missing
*******************************************************************************/
package org.eclipse.rse.internal.connectorservice.ssh;
@ -60,6 +61,7 @@ import org.eclipse.rse.services.clientserver.messages.CommonMessages;
import org.eclipse.rse.services.clientserver.messages.ICommonMessageIds;
import org.eclipse.rse.services.clientserver.messages.SimpleSystemMessage;
import org.eclipse.rse.services.clientserver.messages.SystemMessage;
import org.eclipse.rse.services.clientserver.messages.SystemOperationFailedException;
import org.eclipse.rse.ui.RSEUIPlugin;
import org.eclipse.rse.ui.SystemBasePlugin;
import org.eclipse.rse.ui.messages.SystemMessageDialog;
@ -192,7 +194,8 @@ public class SshConnectorService extends StandardConnectorService implements ISs
if(e.toString().indexOf("Auth cancel")>=0) { //$NON-NLS-1$
throw new OperationCanceledException();
}
throw e;
throw new SystemOperationFailedException(Activator.PLUGIN_ID, NLS.bind(SshConnectorResources.SshConnectorService_Missing_sshd,
host, Integer.toString(getSshPort())), e);
}
userInfo.connectionMade();
fSessionLostHandler = new SessionLostHandler(this);
@ -272,7 +275,7 @@ public class SshConnectorService extends StandardConnectorService implements ISs
* Handle session-lost events.
* This is generic for any sort of connector service.
* Most of this is extracted from dstore's ConnectionStatusListener.
*
*
* TODO should be refactored to make it generally available, and allow
* dstore to derive from it.
*/

View file

@ -1,14 +1,15 @@
/*******************************************************************************
* Copyright (c) 2006, 2009 Wind River Systems, Inc.
* 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:
* Martin Oberhuber (Wind River) - initial API and implementation
* 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:
* Martin Oberhuber (Wind River) - initial API and implementation
* Yu-Fen Kuo (MontaVista) - [170910] Integrate the TM Terminal View with RSE
* Anna Dushistova (MontaVista) - [261478] Remove SshShellService, SshHostShell (or deprecate and schedule for removal in 3.2)
* Martin Oberhuber (Wind River) - [227135] Cryptic exception when sftp-server is missing
*******************************************************************************/
package org.eclipse.rse.internal.services.ssh;
@ -18,24 +19,19 @@ import org.eclipse.osgi.util.NLS;
public class SshServiceResources extends NLS {
private static final String BUNDLE_NAME = "org.eclipse.rse.internal.services.ssh.SshServiceResources"; //$NON-NLS-1$
public static String SftpFileService_Error_download_size;
public static String SftpFileService_Error_upload_size;
public static String SshPlugin_Unexpected_Exception;
public static String SftpFileService_Name;
public static String SftpFileService_Description;
public static String SftpFileService_Error_JschSessionLost;
public static String SftpFileService_Error_download_size;
public static String SftpFileService_Error_upload_size;
public static String SftpFileService_Error_no_sftp;
public static String SftpFileService_Msg_Progress;
public static String SftpFileService_Name;
public static String SshPlugin_Unexpected_Exception;
public static String SshTerminalService_Name;
public static String SshTerminalService_Description;
static {
// initialize resource bundle
NLS.initializeMessages(BUNDLE_NAME, SshServiceResources.class);

View file

@ -9,6 +9,7 @@
# Martin Oberhuber (Wind River) - initial API and implementation
# Yu-Fen Kuo (MontaVista) - [170910] Integrate the TM Terminal View with RSE
# Anna Dushistova (MontaVista) - [261478] Remove SshShellService, SshHostShell (or deprecate and schedule for removal in 3.2)
# Martin Oberhuber (Wind River) - [227135] Cryptic exception when sftp-server is missing
################################################################################
# NLS_MESSAGEFORMAT_VAR
@ -20,7 +21,8 @@ SftpFileService_Name=Ssh / Sftp File Service
SftpFileService_Description=Access a remote file system via Ssh / Sftp protocol
SftpFileService_Error_JschSessionLost=jsch session lost
SftpFileService_Error_upload_size=Ssh upload: file size mismatch for {0}
SftpFileService_Error_download_size=Ssh download: file size mismatch for {0}
SftpFileService_Error_download_size=Ssh download: file size mismatch for {0}
SftpFileService_Error_no_sftp=Failed to connect SFTP subsystem: Remote host may not have sftp-server installed
SftpFileService_Msg_Progress={0,number,integer} KB of {1,number,integer} KB complete ({2,number,percent})
SshTerminalService_Name=SSH Terminal Service

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2006, 2008 Wind River Systems, Inc. and others.
* Copyright (c) 2006, 2009 Wind River Systems, 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
@ -35,6 +35,7 @@
* David McKnight (IBM) - [235472] [ssh] RSE doesn't show correct properties of the file system root ("/")
* Martin Oberhuber (Wind River) - [238703] getFile() needs to lstat for consistency with internalFetch()
* Martin Oberhuber (Wind River) - [237616][ssh] Dont perform forced setLastModified during upload
* Martin Oberhuber (Wind River) - [227135] Cryptic exception when sftp-server is missing
*******************************************************************************/
package org.eclipse.rse.internal.services.ssh.files;
@ -82,6 +83,7 @@ import org.eclipse.rse.services.clientserver.messages.SystemLockTimeoutException
import org.eclipse.rse.services.clientserver.messages.SystemMessage;
import org.eclipse.rse.services.clientserver.messages.SystemMessageException;
import org.eclipse.rse.services.clientserver.messages.SystemOperationCancelledException;
import org.eclipse.rse.services.clientserver.messages.SystemOperationFailedException;
import org.eclipse.rse.services.clientserver.messages.SystemUnexpectedErrorException;
import org.eclipse.rse.services.files.AbstractFileService;
import org.eclipse.rse.services.files.HostFilePermissions;
@ -177,6 +179,8 @@ public class SftpFileService extends AbstractFileService implements ISshService,
private static String defaultEncoding = new java.io.InputStreamReader(new java.io.ByteArrayInputStream(new byte[0])).getEncoding();
/** Indicates the encoding that our JSch channel uses */
private String fJSchChannelEncoding = defaultEncoding;
private long fLastConnectFailureTime = 0;
private static long CONNECT_RETRY_MILLIS = 10000; //re-try unsuccessful sftp connect attempt after 10 seconds
// public SftpFileService(SshConnectorService conn) {
// fConnector = conn;
@ -338,8 +342,11 @@ public class SftpFileService extends AbstractFileService implements ISshService,
}
public void connect() throws SystemMessageException {
Activator.trace("SftpFileService.connecting..."); //$NON-NLS-1$
if (fLastConnectFailureTime > 0 && System.currentTimeMillis() - fLastConnectFailureTime < CONNECT_RETRY_MILLIS) {
throw new SystemOperationFailedException(Activator.PLUGIN_ID, SshServiceResources.SftpFileService_Error_no_sftp);
}
try {
Activator.trace("SftpFileService.connecting..."); //$NON-NLS-1$
Session session = fSessionProvider.getSession();
Channel channel=session.openChannel("sftp"); //$NON-NLS-1$
channel.connect();
@ -349,7 +356,8 @@ public class SftpFileService extends AbstractFileService implements ISshService,
Activator.trace("SftpFileService.connected"); //$NON-NLS-1$
} catch(Exception e) {
Activator.trace("SftpFileService.connecting failed: "+e.toString()); //$NON-NLS-1$
throw makeSystemMessageException(e);
fLastConnectFailureTime = System.currentTimeMillis();
throw new SystemOperationFailedException(Activator.PLUGIN_ID, SshServiceResources.SftpFileService_Error_no_sftp, e);
}
}
@ -1118,13 +1126,13 @@ public class SftpFileService extends AbstractFileService implements ISshService,
public void initService(IProgressMonitor monitor) {
Activator.trace("SftpFileService.initService"); //$NON-NLS-1$
super.initService(monitor);
try
{
connect();
}
catch (Exception e)
{
}
// try
// {
// connect();
// }
// catch (Exception e)
// {
// }
}
public void uninitService(IProgressMonitor monitor) {

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2003, 2008 IBM Corporation and others.
* Copyright (c) 2003, 2009 IBM Corporation 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
@ -18,6 +18,7 @@
* Xuan Chen (IBM) - [218491] ArchiveHandlerManager#cleanUpVirtualPath is messing up the file separators (with updated fix)
* Johnson Ma (Wind River) - [195402] [api] add tar.gz archive support
* Martin Oberhuber (Wind River) - [199854][api] Improve error reporting for archive handlers
* Martin Oberhuber (Wind River) - [227135] Cryptic exception when sftp-server is missing
*******************************************************************************/
package org.eclipse.rse.services.clientserver.archiveutils;
@ -308,11 +309,11 @@ public class ArchiveHandlerManager
catch (InvocationTargetException e)
{
//Throwable target = e.getCause();
throw new SystemOperationFailedException(IClientServerConstants.PLUGIN_ID, "instantiate handler for " + file.getName(), e); //$NON-NLS-1$
throw new SystemOperationFailedException(IClientServerConstants.PLUGIN_ID, "Failed to instantiate handler for " + file.getName(), e); //$NON-NLS-1$
}
catch (Exception e)
{
throw new SystemOperationFailedException(IClientServerConstants.PLUGIN_ID, "instantiate handler for " + file.getName(), e); //$NON-NLS-1$
throw new SystemOperationFailedException(IClientServerConstants.PLUGIN_ID, "Failed to instantiate handler for " + file.getName(), e); //$NON-NLS-1$
}
_handlers.put(file, handler);
return handler;
@ -500,7 +501,7 @@ public class ArchiveHandlerManager
/**
* Create an empty archive
*
*
* @throws SystemMessageException in case of an error
* @since 3.0 returns void but throws SystemMessageException
*/

View file

@ -1,5 +1,5 @@
/********************************************************************************
* Copyright (c) 2008 IBM Corporation. All rights reserved.
* Copyright (c) 2008, 2009 IBM Corporation 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
@ -12,6 +12,7 @@
* David McKnight (IBM) - [220547] [api][breaking] SimpleSystemMessage needs to specify a message id and some messages should be shared
* David McKnight (IBM) - [223204] [cleanup] fix broken nls strings in files.ui and others
* Martin Oberhuber (Wind River) - [226374] [api] Need default SystemMessageException specialisations
* Martin Oberhuber (Wind River) - [227135] Cryptic exception when sftp-server is missing
********************************************************************************/
package org.eclipse.rse.services.clientserver.messages;
@ -27,7 +28,12 @@ public class CommonMessages extends NLS {
public static String MSG_EXCEPTION_OCCURRED;
public static String MSG_ERROR_UNEXPECTED;
/**
* General message format for concatenating a message with a cause
*
* @since 3.1
*/
public static String MSG_FAILURE_WITH_CAUSE;
public static String MSG_COMM_AUTH_FAILED;
public static String MSG_COMM_AUTH_FAILED_DETAILS;

View file

@ -1,5 +1,5 @@
###############################################################################
# Copyright (c) 2008 IBM Corporation and others.
# Copyright (c) 2008, 2009 IBM Corporation 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
@ -14,6 +14,7 @@
# David McKnight (IBM) - [223204] [cleanup] fix broken nls strings in files.ui and others
# Xuan Chen (IBM) - [226784] [nls] Review Canceled vs. Cancelled in NLS Strings
# Martin Oberhuber (Wind River) - [226374] [api] Need default SystemMessageException specialisations
# Martin Oberhuber (Wind River) - [227135] Cryptic exception when sftp-server is missing
###############################################################################
# NLS_MESSAGEFORMAT_VAR
@ -21,6 +22,7 @@
MSG_EXCEPTION_OCCURRED = An unexpected exception has occurred
MSG_FAILURE_WITH_CAUSE = {0}: {1}
MSG_COMM_AUTH_FAILED=Invalid password or user ID
MSG_COMM_AUTH_FAILED_DETAILS=Authentication with {0} failed because the password or user ID is not correct.

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2008 Wind River Systems, Inc. and others.
* Copyright (c) 2008, 2009 Wind River Systems, 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
@ -7,6 +7,7 @@
*
* Contributors:
* Martin Oberhuber (Wind River) - initial API and implementation
* Martin Oberhuber (Wind River) - [227135] Cryptic exception when sftp-server is missing
*******************************************************************************/
package org.eclipse.rse.services.clientserver.messages;
@ -65,39 +66,52 @@ public class SystemOperationFailedException extends SystemRemoteMessageException
}
/**
* Constructor with plugin ID and operation being performed.
* Constructor with plugin ID and user message.
*
* @param remoteException the initial cause of this exception
* @param pluginId ID of the plugin issuing the message.
* @param userMessage user-readable message detailing cause of the
* exception, or <code>null</code>. If not specified, a generic
* message will be used ("Operation failed with exception").
* @param remoteException the initial cause of this exception. Will be added
* to the user message.
*/
public SystemOperationFailedException(String pluginId, String operationPerformed, Exception remoteException) {
super(getMyMessage(pluginId, operationPerformed, remoteException), remoteException);
public SystemOperationFailedException(String pluginId, String userMessage, Exception remoteException) {
super(getMyMessage(pluginId, userMessage, remoteException), remoteException);
}
private static SystemMessage getMyMessage(String pluginId, String operationPerformed, Exception remoteException) {
private static SystemMessage getMyMessage(String pluginId, String userMessage, Exception remoteException) {
String message = operationPerformed;
String exceptionMessage = null;
String secondLevel = null;
if (remoteException != null) {
message = remoteException.getMessage();
if (message == null) {
message = remoteException.getClass().getName();
exceptionMessage = remoteException.getMessage();
if (exceptionMessage == null) {
exceptionMessage = remoteException.getClass().getName();
}
Throwable cause = remoteException.getCause();
if (cause != null) {
secondLevel = cause.getMessage();
if (secondLevel == null) {
secondLevel = cause.getClass().getName();
if (secondLevel.equals(message)) {
if (secondLevel.equals(exceptionMessage)) {
secondLevel = null;
}
}
}
if (operationPerformed != null) {
// FIXME Use Java MessageFormat for better formatting
secondLevel = (secondLevel != null) ? operationPerformed + " : " + secondLevel : operationPerformed; //$NON-NLS-1$
}
}
String msgTxt = NLS.bind(CommonMessages.MSG_OPERATION_FAILED, message);
String msgTxt = userMessage;
if (msgTxt == null) {
// no user text -- use standard message with (non-localized)
// exception message + second level
msgTxt = NLS.bind(CommonMessages.MSG_OPERATION_FAILED, exceptionMessage);
} else if (secondLevel == null) {
// user text but no second level -- move exception text to 2nd level
secondLevel = exceptionMessage;
} else {
// user text, exception and second level -- concatenate user text
// and exception
msgTxt = NLS.bind(CommonMessages.MSG_FAILURE_WITH_CAUSE, userMessage, exceptionMessage);
}
SystemMessage msg = new SimpleSystemMessage(pluginId, ICommonMessageIds.MSG_OPERATION_FAILED,
IStatus.ERROR, msgTxt, secondLevel);

View file

@ -29,6 +29,7 @@
* David McKnight (IBM) - [233349] Could not drag and drop file from Shell view to local folder.
* David McKnight (IBM) - [233475] Cannot drag and drop file/folder within the shell output
* Kevin Doyle (IBM) - [247297] Double Clicking on a Shell doesn't open that Shell
* Martin Oberhuber (Wind River) - [227135] Cryptic exception when sftp-server is missing
*******************************************************************************/
package org.eclipse.rse.shells.ui.view;
@ -377,9 +378,12 @@ implements ISystemRemoteElementAdapter
}
/**
* Returns the associated IRemoteFile for this line of remote output if one exists
* Returns the associated IRemoteFile for this line of remote output if one
* exists
*
* @param output the line of remote output
* @return the associated remote file
* @return the associated remote file, or <code>null</code> if an error
* occurred
*/
public static IRemoteFile outputToFile(IRemoteOutput output)
{