1
0
Fork 0
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:
David McKnight 2009-05-04 12:44:14 +00:00
parent 859aa63098
commit c7858223a2

View file

@ -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;
}