mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-28 18:53:20 +02:00
[274688] [api][dstore] DStoreConnectorService.internalConnect() needs to be cleaned up
This commit is contained in:
parent
859aa63098
commit
c7858223a2
1 changed files with 710 additions and 722 deletions
|
@ -36,6 +36,7 @@
|
|||
* David McKnight (IBM) - [233160] [dstore] SSL/non-SSL alert are not appropriate
|
||||
* David Dykstal (IBM) [235284] Cancel password change causes problem
|
||||
* David McKnight (IBM) - [267236] [dstore] Can't connect after a wrong password
|
||||
* David McKnight (IBM) - [274688] [api][dstore] DStoreConnectorService.internalConnect() needs to be cleaned up
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.rse.connectorservice.dstore;
|
||||
|
@ -114,6 +115,23 @@ import org.osgi.framework.Version;
|
|||
*/
|
||||
public class DStoreConnectorService extends StandardConnectorService implements IDataStoreProvider
|
||||
{
|
||||
private class ConnectionStatusPair {
|
||||
private ConnectionStatus _connectStatus;
|
||||
private ConnectionStatus _launchStatus;
|
||||
public ConnectionStatusPair(ConnectionStatus connectStatus, ConnectionStatus launchStatus){
|
||||
_connectStatus = connectStatus;
|
||||
_launchStatus = launchStatus;
|
||||
}
|
||||
|
||||
public ConnectionStatus getConnectStatus(){
|
||||
return _connectStatus;
|
||||
}
|
||||
|
||||
public ConnectionStatus getLaunchStatus(){
|
||||
return _launchStatus;
|
||||
}
|
||||
}
|
||||
|
||||
private class StartSpiritThread extends Thread
|
||||
{
|
||||
private DataStore _dataStore;
|
||||
|
@ -166,17 +184,6 @@ public class DStoreConnectorService extends StandardConnectorService implements
|
|||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Set the subsystem, when its not known at constructor time
|
||||
*
|
||||
public void setSubSystem(SubSystem ss)
|
||||
{
|
||||
super.setSubSystem(ss);
|
||||
setDaemonLaunchEnabled((SubSystemImpl)ss, false);
|
||||
}*/
|
||||
|
||||
|
||||
public int getServerVersion()
|
||||
{
|
||||
return clientConnection.getServerVersion();
|
||||
|
@ -442,33 +449,6 @@ public class DStoreConnectorService extends StandardConnectorService implements
|
|||
return dstorePath.getAbsolutePath();
|
||||
}
|
||||
|
||||
// /**
|
||||
// * Specify if you support connecting to a running daemon
|
||||
// * @deprecated use {@link #enableServerLaunchType(ISubSystem, ServerLaunchType, boolean)}
|
||||
// * or your subsystem factory should override {@link org.eclipse.rse.core.subsystems.SubSystemConfiguration#supportsServerLaunchType(ServerLaunchType)}
|
||||
// */
|
||||
// public void setDaemonLaunchEnabled(SubSystem subsystemImpl, boolean enable) {
|
||||
// enableServerLaunchType(subsystemImpl, ServerLaunchType.DAEMON_LITERAL, enable);
|
||||
// }
|
||||
|
||||
// /**
|
||||
// * Return if you support connecting to a running daemon
|
||||
// * @deprecated Use instead {@link #isEnabledServerLaunchType(ISubSystem, ServerLaunchType)}
|
||||
// * or {@link org.eclipse.rse.core.subsystems.SubSystemConfiguration#supportsServerLaunchType(ServerLaunchType)}
|
||||
// */
|
||||
// public boolean getDaemonLaunchEnabled(SubSystem subsystemImpl) {
|
||||
// return isEnabledServerLaunchType(subsystemImpl, ServerLaunchType.DAEMON_LITERAL);
|
||||
// }
|
||||
|
||||
// /**
|
||||
// * Specify if you support remotely launching a server script
|
||||
// * @deprecated use {@link #enableServerLaunchType(ISubSystem, ServerLaunchType, boolean)}
|
||||
// * or your subsystem factory should override {@link org.eclipse.rse.core.subsystems.SubSystemConfiguration#supportsServerLaunchType(ServerLaunchType)}
|
||||
// */
|
||||
// public void setRexecLaunchEnabled(SubSystem subsystemImpl, boolean enable) {
|
||||
// enableServerLaunchType(subsystemImpl, ServerLaunchType.REXEC_LITERAL, enable);
|
||||
// }
|
||||
|
||||
/**
|
||||
* Return if you support remotely launching a server script
|
||||
* @deprecated Use instead {@link #isServerLaunchTypeEnabled(ISubSystem, ServerLaunchType)}
|
||||
|
@ -478,14 +458,6 @@ public class DStoreConnectorService extends StandardConnectorService implements
|
|||
return isServerLaunchTypeEnabled(subsystemImpl, ServerLaunchType.REXEC_LITERAL);
|
||||
}
|
||||
|
||||
// /**
|
||||
// * Specify if you support connecting to a server already running
|
||||
// * @deprecated use {@link #enableServerLaunchType(ISubSystem, ServerLaunchType, boolean)}
|
||||
// * or your subsystem factory should override {@link org.eclipse.rse.core.subsystems.SubSystemConfiguration#supportsServerLaunchType(ServerLaunchType)}
|
||||
// */
|
||||
// public void setNoLaunchEnabled(SubSystem subsystemImpl, boolean enable) {
|
||||
// enableServerLaunchType(subsystemImpl, ServerLaunchType.RUNNING_LITERAL, enable);
|
||||
// }
|
||||
|
||||
/**
|
||||
* Return if you support connecting to a server already running
|
||||
|
@ -524,72 +496,41 @@ public class DStoreConnectorService extends StandardConnectorService implements
|
|||
}
|
||||
|
||||
/**
|
||||
* @see org.eclipse.rse.core.subsystems.IConnectorService#connect(IProgressMonitor)
|
||||
* Connect to the server by using REXEC as a daemon to launch it.
|
||||
*
|
||||
* @param info the signon information
|
||||
* @param serverLauncher the server launcher
|
||||
* @param monitor the progress monitor
|
||||
*
|
||||
* @return the connection status
|
||||
*
|
||||
* @since 3.1
|
||||
*/
|
||||
protected void internalConnect(IProgressMonitor monitor) throws Exception
|
||||
{
|
||||
if (isConnected() || _isConnecting) {
|
||||
return;
|
||||
}
|
||||
|
||||
_isConnecting = true;
|
||||
boolean alertedNONSSL = false;
|
||||
|
||||
// set A_PLUGIN_PATH so that dstore picks up the property
|
||||
setPluginPathProperty();
|
||||
|
||||
// Fire comm event to signal state about to change
|
||||
fireCommunicationsEvent(CommunicationsEvent.BEFORE_CONNECT);
|
||||
|
||||
ConnectionStatus connectStatus = null;
|
||||
ConnectionStatus launchStatus = null;
|
||||
|
||||
clientConnection = new ClientConnection(getPrimarySubSystem().getHost().getAliasName());
|
||||
|
||||
clientConnection.setHost(getHostName());
|
||||
clientConnection.setPort(Integer.toString(getPort()));
|
||||
|
||||
// ISubSystem ss = getPrimarySubSystem();
|
||||
getPrimarySubSystem();
|
||||
IRemoteServerLauncher serverLauncher = getDStoreServerLauncher();
|
||||
|
||||
ServerLaunchType serverLauncherType = null;
|
||||
boolean autoDetectSSL = true;
|
||||
if (serverLauncher != null)
|
||||
{
|
||||
serverLauncherType = serverLauncher.getServerLaunchType();
|
||||
autoDetectSSL = serverLauncher.getAutoDetectSSL();
|
||||
}
|
||||
else
|
||||
{
|
||||
// System.out.println("server launcher is null");
|
||||
}
|
||||
|
||||
//long t1 = System.currentTimeMillis();
|
||||
SystemMessage msg = null;
|
||||
boolean launchFailed = false;
|
||||
|
||||
// get Socket Timeout Value Preference
|
||||
int timeout = getSocketTimeOutValue();
|
||||
|
||||
if (serverLauncherType == ServerLaunchType.REXEC_LITERAL)
|
||||
{
|
||||
if (monitor != null)
|
||||
{
|
||||
protected ConnectionStatus connectWithREXEC(SystemSignonInformation info, IRemoteServerLauncher serverLauncher, IProgressMonitor monitor) throws Exception {
|
||||
if (monitor != null) {
|
||||
String cmsg = ConnectorServiceResources.MSG_STARTING_SERVER_VIA_REXEC;
|
||||
monitor.subTask(cmsg);
|
||||
}
|
||||
|
||||
SystemSignonInformation info = getSignonInformation();
|
||||
ConnectionStatus connectStatus = null;
|
||||
boolean autoDetectSSL = true;
|
||||
if (serverLauncher != null){
|
||||
autoDetectSSL = serverLauncher.getAutoDetectSSL();
|
||||
}
|
||||
|
||||
// GC: - if failed to get a connection in another way, try
|
||||
// starting the datastore server with rexec
|
||||
IServerLauncher starter = getRemoteServerLauncher();
|
||||
starter.setSignonInformation(info);
|
||||
starter.setServerLauncherProperties(serverLauncher);
|
||||
|
||||
// get Socket Timeout Value Preference
|
||||
int timeout = getSocketTimeOutValue();
|
||||
|
||||
if (starter instanceof RexecDstoreServer){
|
||||
((RexecDstoreServer)starter).setSocketTimeoutValue(timeout);
|
||||
}
|
||||
|
||||
if (autoDetectSSL) timeout = 3000;
|
||||
else setSSLProperties(isUsingSSL());
|
||||
|
||||
|
@ -599,18 +540,15 @@ public class DStoreConnectorService extends StandardConnectorService implements
|
|||
{
|
||||
clientConnection.setPort("" + iServerPort); //$NON-NLS-1$
|
||||
|
||||
if (monitor != null)
|
||||
{
|
||||
if (monitor != null) {
|
||||
String cmsg = NLS.bind(ConnectorServiceResources.MSG_CONNECTING_TO_SERVER, clientConnection.getPort());
|
||||
monitor.subTask(cmsg);
|
||||
}
|
||||
|
||||
// connect to launched server
|
||||
connectStatus = clientConnection.connect(null, timeout);
|
||||
if (!connectStatus.isConnected() && connectStatus.getMessage().startsWith(ClientConnection.CANNOT_CONNECT) && autoDetectSSL)
|
||||
{
|
||||
if (setSSLProperties(true))
|
||||
{
|
||||
if (!connectStatus.isConnected() && connectStatus.getMessage().startsWith(ClientConnection.CANNOT_CONNECT) && autoDetectSSL){
|
||||
if (setSSLProperties(true)){
|
||||
iServerPort = launchUsingRexec(info, serverLauncher, monitor);
|
||||
if (iServerPort != 0)
|
||||
{
|
||||
|
@ -620,11 +558,9 @@ public class DStoreConnectorService extends StandardConnectorService implements
|
|||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
launchFailed = true;
|
||||
else {
|
||||
connectStatus = new ConnectionStatus(false);
|
||||
msg = starter.getErrorMessage();
|
||||
SystemMessage msg = starter.getErrorMessage();
|
||||
String errorMsg = null;
|
||||
if (msg == null)
|
||||
{
|
||||
|
@ -636,42 +572,47 @@ public class DStoreConnectorService extends StandardConnectorService implements
|
|||
}
|
||||
connectStatus.setMessage(errorMsg);
|
||||
}
|
||||
return connectStatus;
|
||||
}
|
||||
// Start the server via the daemon
|
||||
else if (serverLauncherType == ServerLaunchType.DAEMON_LITERAL)
|
||||
{
|
||||
if (monitor != null)
|
||||
{
|
||||
|
||||
/**
|
||||
* Connection to a server via the RSE daemon.
|
||||
*
|
||||
* @param info the signon information
|
||||
* @param serverLauncher the server launcher
|
||||
* @param alertedNONSSL indication of whether an alert for NON-ssl has already been issued
|
||||
* @param monitor the progress monitor
|
||||
*
|
||||
* @return a pair of connection statuses - the launch status for the daemon and the connect status for the server
|
||||
* @since 3.1
|
||||
*/
|
||||
protected ConnectionStatusPair connectWithDaemon(SystemSignonInformation info, IRemoteServerLauncher serverLauncher, Boolean alertedNONSSL, IProgressMonitor monitor) throws InterruptedException {
|
||||
if (monitor != null) {
|
||||
String cmsg = ConnectorServiceResources.MSG_STARTING_SERVER_VIA_DAEMON;
|
||||
monitor.subTask(cmsg);
|
||||
}
|
||||
|
||||
ConnectionStatus connectStatus = null;
|
||||
|
||||
// DY: getLocalUserId() may return null for Windows connections because
|
||||
// we no longer prompt for userid / pwd. But for other connections the userid
|
||||
// should be the same as the one stored in the password info (and for Windows
|
||||
// this will be the temp remoteuser userid.
|
||||
//launchStatus = clientConnection.launchServer(getLocalUserId(), getPassword(getPasswordInformation()));
|
||||
SystemSignonInformation info = getSignonInformation();
|
||||
if (info == null)
|
||||
{
|
||||
SystemBasePlugin.logError("password info = null!"); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
|
||||
int daemonPort = 0;
|
||||
if (serverLauncher != null)
|
||||
daemonPort = serverLauncher.getDaemonPort();
|
||||
|
||||
/* String daemonPortStr = getSubSystem().getVendorAttribute("Remote", "DAEMON_PORT");
|
||||
if (daemonPortStr != null && daemonPortStr.length() > 0)
|
||||
{
|
||||
daemonPort = Integer.parseInt(daemonPortStr);
|
||||
}*/
|
||||
|
||||
// 205986] FIRST TRY SSL, THEN NON-SECURE!
|
||||
// 205986 FIRST TRY SSL, THEN NON-SECURE!
|
||||
boolean usedSSL = true;
|
||||
setSSLProperties(true);
|
||||
|
||||
launchStatus = launchServer(clientConnection, info, daemonPort, monitor, timeout);
|
||||
// get Socket Timeout Value Preference
|
||||
int timeout = getSocketTimeOutValue();
|
||||
|
||||
ConnectionStatus launchStatus = launchServer(clientConnection, info, daemonPort, monitor, timeout);
|
||||
if (!launchStatus.isConnected() && !clientConnection.isKnownStatus(launchStatus.getMessage()))
|
||||
{
|
||||
Throwable conE = launchStatus.getException();
|
||||
|
@ -681,16 +622,12 @@ public class DStoreConnectorService extends StandardConnectorService implements
|
|||
if (certs != null && certs.size() > 0)
|
||||
{
|
||||
ISystemKeystoreProvider provider = SystemKeystoreProviderManager.getInstance().getDefaultProvider();
|
||||
if (provider != null)
|
||||
{
|
||||
_isConnecting = false;
|
||||
if (provider.importCertificates(certs, getHostName()))
|
||||
{
|
||||
internalConnect(monitor);
|
||||
return;
|
||||
if (provider != null){
|
||||
if (provider.importCertificates(certs, getHostName())){
|
||||
return connectWithDaemon(info, serverLauncher, alertedNONSSL, monitor);
|
||||
}
|
||||
else
|
||||
{
|
||||
else{
|
||||
_isConnecting = false;
|
||||
throw new InterruptedException();
|
||||
}
|
||||
}
|
||||
|
@ -708,14 +645,14 @@ public class DStoreConnectorService extends StandardConnectorService implements
|
|||
if (store.getBoolean(ISystemPreferencesConstants.ALERT_NONSSL))
|
||||
{
|
||||
String cmsg = NLS.bind(ConnectorServiceResources.MSG_COMM_NOT_USING_SSL, getHostName());
|
||||
msg = createSystemMessage(IConnectorServiceMessageIds.MSG_COMM_NOT_USING_SSL, IStatus.INFO, cmsg);
|
||||
SystemMessage msg = createSystemMessage(IConnectorServiceMessageIds.MSG_COMM_NOT_USING_SSL, IStatus.INFO, cmsg);
|
||||
|
||||
DisplayHidableSystemMessageAction msgAction = new DisplayHidableSystemMessageAction(msg, store, ISystemPreferencesConstants.ALERT_NONSSL);
|
||||
Display.getDefault().syncExec(msgAction);
|
||||
if (msgAction.getReturnCode() != IDialogConstants.YES_ID){
|
||||
allowNonSSL = false;
|
||||
} else {
|
||||
alertedNONSSL = true;
|
||||
alertedNONSSL = new Boolean(true); // changing value to true
|
||||
}
|
||||
}
|
||||
if (allowNonSSL){
|
||||
|
@ -730,8 +667,7 @@ public class DStoreConnectorService extends StandardConnectorService implements
|
|||
}
|
||||
}
|
||||
|
||||
if (!launchStatus.isConnected())
|
||||
{
|
||||
if (!launchStatus.isConnected()) { // launch failed
|
||||
String launchMsg = launchStatus.getMessage();
|
||||
// If password has expired and must be changed
|
||||
if (launchMsg != null && (isPasswordExpired(launchMsg) || isNewPasswordInvalid(launchMsg)))
|
||||
|
@ -767,22 +703,16 @@ public class DStoreConnectorService extends StandardConnectorService implements
|
|||
launchStatus = changePassword(clientConnection, oldCredentials, serverLauncher, monitor, newCredentials.getPassword());
|
||||
launchMsg = launchStatus.getMessage();
|
||||
}
|
||||
if (newCredentials != null)
|
||||
{
|
||||
if (newCredentials != null){
|
||||
info = newCredentials;
|
||||
}
|
||||
if (launchMsg != null && launchMsg.equals(IDataStoreConstants.ATTEMPT_RECONNECT))
|
||||
{
|
||||
_isConnecting = false;
|
||||
internalConnect(monitor);
|
||||
return;
|
||||
if (launchMsg != null && launchMsg.equals(IDataStoreConstants.ATTEMPT_RECONNECT)){
|
||||
return connectWithDaemon(info, serverLauncher, alertedNONSSL, monitor);
|
||||
}
|
||||
}
|
||||
else if (launchMsg != null && isPortOutOfRange(launchMsg))
|
||||
{
|
||||
_isConnecting = false;
|
||||
launchFailed = true;
|
||||
|
||||
|
||||
int colonIndex = launchMsg.indexOf(':');
|
||||
String portRange = launchMsg.substring(colonIndex + 1);
|
||||
|
@ -790,18 +720,17 @@ public class DStoreConnectorService extends StandardConnectorService implements
|
|||
String pmsg =NLS.bind(ConnectorServiceResources.MSG_PORT_OUT_RANGE, portRange);
|
||||
SystemMessage message = createSystemMessage(IConnectorServiceMessageIds.MSG_PORT_OUT_RANGE, IStatus.ERROR, pmsg);
|
||||
|
||||
// message handled here
|
||||
ShowConnectMessage msgAction = new ShowConnectMessage(message);
|
||||
Display.getDefault().asyncExec(msgAction);
|
||||
return;
|
||||
return null; // null here indicates no further processing required by internalConnect
|
||||
}
|
||||
else
|
||||
{
|
||||
launchFailed = true;
|
||||
SystemBasePlugin.logError("Error launching server: " + launchStatus.getMessage(), null); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
if (launchStatus.isConnected())
|
||||
{
|
||||
else { // launch succeeded
|
||||
if (monitor != null)
|
||||
{
|
||||
if (clientConnection == null){
|
||||
|
@ -813,107 +742,92 @@ public class DStoreConnectorService extends StandardConnectorService implements
|
|||
// connect to launched server
|
||||
connectStatus = clientConnection.connect(launchStatus.getTicket(), timeout);
|
||||
Throwable conE = connectStatus.getException();
|
||||
if (!connectStatus.isConnected() &&
|
||||
(connectStatus.getMessage().startsWith(ClientConnection.CANNOT_CONNECT) ||
|
||||
conE instanceof SSLException
|
||||
)
|
||||
)
|
||||
{
|
||||
_isConnecting = false;
|
||||
if (conE instanceof SSLHandshakeException)
|
||||
{
|
||||
List certs = connectStatus.getUntrustedCertificates();
|
||||
if (certs != null && certs.size() > 0)
|
||||
{
|
||||
ISystemKeystoreProvider provider = SystemKeystoreProviderManager.getInstance().getDefaultProvider();
|
||||
if (provider != null)
|
||||
{
|
||||
|
||||
if (provider.importCertificates(certs, getHostName()))
|
||||
{
|
||||
internalConnect(monitor);
|
||||
return;
|
||||
if (!connectStatus.isConnected() &&
|
||||
(connectStatus.getMessage().startsWith(ClientConnection.CANNOT_CONNECT) || conE instanceof SSLException)) { // failed to connect to the server that was launched
|
||||
if (conE instanceof SSLHandshakeException){ // cause of failure was an SSL handshake exception
|
||||
List certs = connectStatus.getUntrustedCertificates();
|
||||
if (certs != null && certs.size() > 0) {
|
||||
ISystemKeystoreProvider provider = SystemKeystoreProviderManager.getInstance().getDefaultProvider();
|
||||
if (provider != null){
|
||||
if (provider.importCertificates(certs, getHostName())) { // import the certificates and try again
|
||||
return connectWithDaemon(info, serverLauncher, alertedNONSSL, monitor);
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
_isConnecting = false;
|
||||
throw new InterruptedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
// relaunching the server via the daemon so that we can connect again to the launched server with toggled useSSL settings
|
||||
launchStatus = launchServer(clientConnection, info, daemonPort, monitor);
|
||||
if (!launchStatus.isConnected())
|
||||
{
|
||||
launchFailed = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (setSSLProperties(!usedSSL))
|
||||
{
|
||||
if (launchStatus.isConnected()) {
|
||||
if (setSSLProperties(!usedSSL)){
|
||||
connectStatus = clientConnection.connect(launchStatus.getTicket(), timeout);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// failure to connect diagnosis - not sure why this is here since I would expect this case was already handled
|
||||
// leaving it here just in case - will review later
|
||||
if (!connectStatus.isConnected() && connectStatus.isSLLProblem())
|
||||
{
|
||||
List certs = connectStatus.getUntrustedCertificates();
|
||||
if (certs != null && certs.size() > 0) {
|
||||
ISystemKeystoreProvider provider = SystemKeystoreProviderManager.getInstance().getDefaultProvider();
|
||||
if (provider != null) {
|
||||
if (provider.importCertificates(certs, getHostName())){
|
||||
return connectWithDaemon(info, serverLauncher, alertedNONSSL, monitor);
|
||||
}
|
||||
else {
|
||||
_isConnecting = false;
|
||||
importCertsAndReconnect(connectStatus, monitor);
|
||||
return;
|
||||
throw new InterruptedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
if (connectStatus != null && connectStatus.getMessage().startsWith(ClientConnection.INCOMPATIBLE_UPDATE))
|
||||
{
|
||||
// offer to update it
|
||||
clientConnection.getDataStore().queryInstall();
|
||||
return new ConnectionStatusPair(connectStatus, launchStatus);
|
||||
}
|
||||
|
||||
/**
|
||||
* Connect to a running server.
|
||||
*
|
||||
* @param monitor the progress monitor
|
||||
*
|
||||
* @return the connection status
|
||||
* @since 3.1
|
||||
*/
|
||||
}
|
||||
else
|
||||
{
|
||||
connectStatus = new ConnectionStatus(false);
|
||||
|
||||
String cmsg = NLS.bind(ConnectorServiceResources.MSG_COMM_CONNECT_FAILED, getHostName());
|
||||
connectStatus.setMessage(cmsg);
|
||||
}
|
||||
}
|
||||
else if (serverLauncherType == ServerLaunchType.RUNNING_LITERAL)
|
||||
{
|
||||
protected ConnectionStatus connectWithRunning(IProgressMonitor monitor){
|
||||
if (monitor != null)
|
||||
{
|
||||
String cmsg = NLS.bind(ConnectorServiceResources.MSG_CONNECTING_TO_SERVER, clientConnection.getPort());
|
||||
monitor.subTask(cmsg);
|
||||
}
|
||||
// connection directly
|
||||
// connect directly
|
||||
boolean useSSL = isUsingSSL();
|
||||
setSSLProperties(useSSL);
|
||||
connectStatus = clientConnection.connect(null, timeout);
|
||||
}
|
||||
// server launcher type is unknown
|
||||
else
|
||||
{
|
||||
SystemSignonInformation info = getSignonInformation();
|
||||
connectStatus = launchServer(clientConnection, info, serverLauncher, monitor);
|
||||
if (!connectStatus.isConnected() && !clientConnection.isKnownStatus(connectStatus.getMessage()))
|
||||
{
|
||||
if (setSSLProperties(true))
|
||||
{
|
||||
connectStatus = launchServer(clientConnection, info, serverLauncher, monitor);
|
||||
if (!connectStatus.isConnected() && connectStatus.isSLLProblem())
|
||||
{
|
||||
_isConnecting = false;
|
||||
importCertsAndReconnect(connectStatus, monitor);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// get Socket Timeout Value Preference
|
||||
int timeout = getSocketTimeOutValue();
|
||||
return clientConnection.connect(null, timeout);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// if connected
|
||||
if (connectStatus != null && connectStatus.isConnected())
|
||||
{
|
||||
/**
|
||||
* Initialize the DataStore connection.
|
||||
*
|
||||
* @param launchStatus the launch status if the server was launched via the daemon. Otherwise, null.
|
||||
* @param connectStatus the connect status for the server
|
||||
* @param alertedNONSSL a boolean indicating whether the user has been alerted to a NON-ssl connection
|
||||
* @param monitor the status monitor
|
||||
*
|
||||
* @since 3.1
|
||||
*/
|
||||
protected void initializeConnection(ConnectionStatus launchStatus, ConnectionStatus connectStatus, Boolean alertedNONSSL, IProgressMonitor monitor) throws Exception {
|
||||
SystemMessage msg = null;
|
||||
IPreferenceStore store = RSEUIPlugin.getDefault().getPreferenceStore();
|
||||
if (clientConnection.getDataStore().usingSSL() && store.getBoolean(ISystemPreferencesConstants.ALERT_SSL))
|
||||
{
|
||||
|
@ -931,7 +845,7 @@ public class DStoreConnectorService extends StandardConnectorService implements
|
|||
}
|
||||
else if (!clientConnection.getDataStore().usingSSL() && store.getBoolean(ISystemPreferencesConstants.ALERT_NONSSL))
|
||||
{
|
||||
if (!alertedNONSSL){ // only alert if we haven't already
|
||||
if (!alertedNONSSL.booleanValue()){ // only alert if we haven't already
|
||||
String cmsg = NLS.bind(ConnectorServiceResources.MSG_COMM_NOT_USING_SSL, getHostName());
|
||||
msg = createSystemMessage(IConnectorServiceMessageIds.MSG_COMM_NOT_USING_SSL, IStatus.INFO, cmsg);
|
||||
|
||||
|
@ -951,34 +865,18 @@ public class DStoreConnectorService extends StandardConnectorService implements
|
|||
_connectionStatusListener = new ConnectionStatusListener(dataStore.getStatus(), this);
|
||||
dataStore.getDomainNotifier().addDomainListener(_connectionStatusListener);
|
||||
|
||||
|
||||
|
||||
// DKM: dataStore needs a miners location
|
||||
// for now, I'll use dstore.miners as default location
|
||||
// (I've inserted the universal miner in it's minerFile.dat file)
|
||||
|
||||
// DY: defect 46811 The minerFile.dat does not exist in this directory which causes a
|
||||
// java.io.FileNotFoundException to be printed to the console (not very
|
||||
// encouraging for the end user.) So I'm setting it to the current directory (.)
|
||||
// which should be where the code is run from
|
||||
//dataStore.addMinersLocation("org.eclipse.dstore.miners");
|
||||
|
||||
|
||||
StatusMonitor statusMonitor = StatusMonitorFactory.getInstance().getStatusMonitorFor(this, dataStore);
|
||||
|
||||
if (launchStatus != null && launchStatus.isConnected())
|
||||
{
|
||||
//dataStore.showTicket(launchStatus.getTicket()); // send security token to server, this must be done first
|
||||
DataElement ticket = dataStore.createTicket(launchStatus.getTicket());
|
||||
dataStore.queryShowTicket(ticket);
|
||||
//statusMonitor.waitForUpdate(ticketStatus);
|
||||
}
|
||||
else
|
||||
{
|
||||
dataStore.showTicket(null);
|
||||
}
|
||||
|
||||
// if (dataStore.isDoSpirit()) dataStore.queryServerSpiritState();
|
||||
StartSpiritThread thread = new StartSpiritThread(dataStore);
|
||||
thread.start();
|
||||
|
||||
|
@ -1057,13 +955,28 @@ public class DStoreConnectorService extends StandardConnectorService implements
|
|||
DataElement initStatus = dataStore.initMiners();
|
||||
statusMonitor.waitForUpdate(initStatus);
|
||||
}
|
||||
//long t2 = System.currentTimeMillis();
|
||||
//System.out.println("connect time = "+(t2 - t1));
|
||||
}
|
||||
else
|
||||
|
||||
/**
|
||||
* Diagnostics the occurs after the failure of a connect.
|
||||
*
|
||||
* @param launchStatus the status of the launching of the server (if a daemon was used)
|
||||
* @param connectStatus the status of the connecting to the server
|
||||
* @param serverLauncher the server launcher
|
||||
* @param serverLauncherType the type of server launcher
|
||||
* @param monitor the progress monitor
|
||||
*
|
||||
* @since 3.1
|
||||
*/
|
||||
protected void handleConnectionFailure(ConnectionStatus launchStatus, ConnectionStatus connectStatus, IRemoteServerLauncher serverLauncher, ServerLaunchType serverLauncherType, IProgressMonitor monitor) throws Exception
|
||||
{
|
||||
SystemMessage msg = null;
|
||||
boolean launchFailed = false;
|
||||
if (launchStatus != null){
|
||||
launchFailed = !launchStatus.isConnected();
|
||||
}
|
||||
// if daemon launch failed because of an SSL problem
|
||||
if (launchFailed && launchStatus != null && launchStatus.isSLLProblem())
|
||||
if (launchFailed && launchStatus.isSLLProblem())
|
||||
{
|
||||
if (launchStatus.isSLLProblem())
|
||||
{
|
||||
|
@ -1235,7 +1148,7 @@ public class DStoreConnectorService extends StandardConnectorService implements
|
|||
{
|
||||
_isConnecting = false;
|
||||
provider.importCertificates(certs, getHostName());
|
||||
_isConnecting = false;
|
||||
|
||||
|
||||
// Don't attempt reconnect when server was started manually. The problem is that
|
||||
// in that situation, the server will have terminated on the failed connection
|
||||
|
@ -1326,6 +1239,81 @@ public class DStoreConnectorService extends StandardConnectorService implements
|
|||
|
||||
_isConnecting = false;
|
||||
throw new SystemMessageException(msg);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.eclipse.rse.core.subsystems.IConnectorService#connect(IProgressMonitor)
|
||||
*/
|
||||
protected void internalConnect(IProgressMonitor monitor) throws Exception
|
||||
{
|
||||
if (isConnected() || _isConnecting) {
|
||||
return;
|
||||
}
|
||||
|
||||
_isConnecting = true;
|
||||
Boolean alertedNONSSL = new Boolean(false);
|
||||
|
||||
// set A_PLUGIN_PATH so that dstore picks up the property
|
||||
setPluginPathProperty();
|
||||
|
||||
// Fire comm event to signal state about to change
|
||||
fireCommunicationsEvent(CommunicationsEvent.BEFORE_CONNECT);
|
||||
|
||||
ConnectionStatus connectStatus = null;
|
||||
ConnectionStatus launchStatus = null;
|
||||
|
||||
clientConnection = new ClientConnection(getPrimarySubSystem().getHost().getAliasName());
|
||||
|
||||
clientConnection.setHost(getHostName());
|
||||
clientConnection.setPort(Integer.toString(getPort()));
|
||||
|
||||
getPrimarySubSystem();
|
||||
IRemoteServerLauncher serverLauncher = getDStoreServerLauncher();
|
||||
|
||||
ServerLaunchType serverLauncherType = null;
|
||||
if (serverLauncher != null){
|
||||
serverLauncherType = serverLauncher.getServerLaunchType();
|
||||
}
|
||||
|
||||
SystemSignonInformation info = getSignonInformation();
|
||||
if (serverLauncherType == ServerLaunchType.REXEC_LITERAL){ // start the server via REXEC
|
||||
connectStatus = connectWithREXEC(info, serverLauncher, monitor);
|
||||
}
|
||||
else if (serverLauncherType == ServerLaunchType.DAEMON_LITERAL) { // start the server via the daemon
|
||||
|
||||
ConnectionStatusPair connectStatusPair = connectWithDaemon(info, serverLauncher, alertedNONSSL, monitor);
|
||||
connectStatus = connectStatusPair.getConnectStatus();
|
||||
launchStatus = connectStatusPair.getLaunchStatus();
|
||||
|
||||
if (connectStatus == null){
|
||||
return; // error handling completed
|
||||
}
|
||||
}
|
||||
else if (serverLauncherType == ServerLaunchType.RUNNING_LITERAL){ // connect to running server
|
||||
connectStatus = connectWithRunning(monitor);
|
||||
}
|
||||
else { // server launcher type is unknown
|
||||
connectStatus = launchServer(clientConnection, info, serverLauncher, monitor);
|
||||
if (!connectStatus.isConnected() && !clientConnection.isKnownStatus(connectStatus.getMessage())){
|
||||
if (connectStatus.isSLLProblem()){
|
||||
if (setSSLProperties(true)){
|
||||
connectStatus = launchServer(clientConnection, info, serverLauncher, monitor);
|
||||
if (!connectStatus.isConnected() && connectStatus.isSLLProblem()){
|
||||
_isConnecting = false;
|
||||
importCertsAndReconnect(connectStatus, monitor);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (connectStatus != null && connectStatus.isConnected()){ // connected
|
||||
initializeConnection(launchStatus, connectStatus, alertedNONSSL, monitor);
|
||||
}
|
||||
else { // diagnosis, reconnection and other connection failure handling
|
||||
handleConnectionFailure(connectStatus, launchStatus, serverLauncher, serverLauncherType, monitor);
|
||||
}
|
||||
_isConnecting = false;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue