mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-10 10:35:23 +02:00
[173619][api] Make RemoteUtil.createSocket() public available
This commit is contained in:
parent
7fa0ec0b33
commit
76410247f4
6 changed files with 186 additions and 103 deletions
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2006 Wind River Systems, Inc. and others.
|
* Copyright (c) 2006, 2007 Wind River Systems, Inc. and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -42,7 +42,4 @@ public class SshConnectorResources extends NLS {
|
||||||
public static String KeyboardInteractiveDialog_message;
|
public static String KeyboardInteractiveDialog_message;
|
||||||
public static String KeyboardInteractiveDialog_labelConnection;
|
public static String KeyboardInteractiveDialog_labelConnection;
|
||||||
|
|
||||||
//These are from cvs/messages.properties
|
|
||||||
public static String Socket_timeout;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
################################################################################
|
################################################################################
|
||||||
# Copyright (c) 2006 Wind River Systems, Inc. and others.
|
# Copyright (c) 2006, 2007 Wind River Systems, Inc. and others.
|
||||||
# All rights reserved. This program and the accompanying materials
|
# All rights reserved. This program and the accompanying materials
|
||||||
# are made available under the terms of the Eclipse Public License v1.0
|
# are made available under the terms of the Eclipse Public License v1.0
|
||||||
# which accompanies this distribution, and is available at
|
# which accompanies this distribution, and is available at
|
||||||
|
@ -32,6 +32,3 @@ UserValidationDialog_7=Saved passwords are stored on your computer in a file tha
|
||||||
|
|
||||||
KeyboardInteractiveDialog_message=Keyboard Interactive authentication for {0}
|
KeyboardInteractiveDialog_message=Keyboard Interactive authentication for {0}
|
||||||
KeyboardInteractiveDialog_labelConnection=Enter values for the following connection: {0}
|
KeyboardInteractiveDialog_labelConnection=Enter values for the following connection: {0}
|
||||||
|
|
||||||
#These are from cvs/messages.properties
|
|
||||||
Socket_timeout=A timeout occurred connecting to host {0}
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2006 Wind River Systems, Inc. and others.
|
* Copyright (c) 2006, 2007 Wind River Systems, Inc. and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -13,7 +13,6 @@ package org.eclipse.rse.connectorservice.ssh;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InterruptedIOException;
|
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
|
@ -34,7 +33,6 @@ import org.eclipse.jface.operation.IRunnableContext;
|
||||||
import org.eclipse.jface.operation.IRunnableWithProgress;
|
import org.eclipse.jface.operation.IRunnableWithProgress;
|
||||||
import org.eclipse.jface.preference.IPreferenceStore;
|
import org.eclipse.jface.preference.IPreferenceStore;
|
||||||
import org.eclipse.jface.window.Window;
|
import org.eclipse.jface.window.Window;
|
||||||
import org.eclipse.osgi.util.NLS;
|
|
||||||
import org.eclipse.swt.widgets.Display;
|
import org.eclipse.swt.widgets.Display;
|
||||||
import org.eclipse.swt.widgets.Shell;
|
import org.eclipse.swt.widgets.Shell;
|
||||||
import org.eclipse.ui.IWorkbenchWindow;
|
import org.eclipse.ui.IWorkbenchWindow;
|
||||||
|
@ -59,6 +57,7 @@ import org.eclipse.rse.core.subsystems.AbstractConnectorService;
|
||||||
import org.eclipse.rse.core.subsystems.CommunicationsEvent;
|
import org.eclipse.rse.core.subsystems.CommunicationsEvent;
|
||||||
import org.eclipse.rse.core.subsystems.IConnectorService;
|
import org.eclipse.rse.core.subsystems.IConnectorService;
|
||||||
import org.eclipse.rse.core.subsystems.SubSystemConfiguration;
|
import org.eclipse.rse.core.subsystems.SubSystemConfiguration;
|
||||||
|
import org.eclipse.rse.services.RemoteUtil;
|
||||||
import org.eclipse.rse.services.clientserver.messages.SystemMessage;
|
import org.eclipse.rse.services.clientserver.messages.SystemMessage;
|
||||||
import org.eclipse.rse.services.ssh.ISshSessionProvider;
|
import org.eclipse.rse.services.ssh.ISshSessionProvider;
|
||||||
import org.eclipse.rse.ui.ISystemMessages;
|
import org.eclipse.rse.ui.ISystemMessages;
|
||||||
|
@ -85,97 +84,6 @@ public class SshConnectorService extends AbstractConnectorService implements ISs
|
||||||
fSessionLostHandler = null;
|
fSessionLostHandler = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
// <copied from org.eclipse.team.cvs>
|
|
||||||
//----------------------------------------------------------------------
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Progress Monitor Helper: from team.cvs.core.Policy
|
|
||||||
* @param monitor
|
|
||||||
*/
|
|
||||||
public static void checkCanceled(IProgressMonitor monitor) {
|
|
||||||
if (monitor.isCanceled())
|
|
||||||
throw new OperationCanceledException();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper method that will time out when making a socket connection.
|
|
||||||
* This is required because there is no way to provide a timeout value
|
|
||||||
* when creating a socket and in some instances, they don't seem to
|
|
||||||
* timeout at all.
|
|
||||||
* @param host inetaddress to connect to
|
|
||||||
* @param port port to connect to
|
|
||||||
* @param timeout number of seconds for timeout (default=60)
|
|
||||||
* @param monitor progress monitor
|
|
||||||
*/
|
|
||||||
public static Socket createSocket(final String host, final int port, int timeout, IProgressMonitor monitor) throws UnknownHostException, IOException {
|
|
||||||
|
|
||||||
// Start a thread to open a socket
|
|
||||||
final Socket[] socket = new Socket[] { null };
|
|
||||||
final Exception[] exception = new Exception[] {null };
|
|
||||||
final Thread thread = new Thread(new Runnable() {
|
|
||||||
public void run() {
|
|
||||||
try {
|
|
||||||
Socket newSocket = new Socket(host, port);
|
|
||||||
synchronized (socket) {
|
|
||||||
if (Thread.interrupted()) {
|
|
||||||
// we we're either cancelled or timed out so just close the socket
|
|
||||||
newSocket.close();
|
|
||||||
} else {
|
|
||||||
socket[0] = newSocket;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (UnknownHostException e) {
|
|
||||||
exception[0] = e;
|
|
||||||
} catch (IOException e) {
|
|
||||||
exception[0] = e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
thread.start();
|
|
||||||
|
|
||||||
// Wait the appropriate number of seconds
|
|
||||||
if (timeout <= 0) timeout = 60;
|
|
||||||
for (int i = 0; i < timeout; i++) {
|
|
||||||
try {
|
|
||||||
// wait for the thread to complete or 1 second, which ever comes first
|
|
||||||
thread.join(1000);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
// I think this means the thread was interupted but not necessarily timed out
|
|
||||||
// so we don't need to do anything
|
|
||||||
}
|
|
||||||
synchronized (socket) {
|
|
||||||
// if the user cancelled, clean up before preempting the operation
|
|
||||||
if (monitor.isCanceled()) {
|
|
||||||
if (thread.isAlive()) {
|
|
||||||
thread.interrupt();
|
|
||||||
}
|
|
||||||
if (socket[0] != null) {
|
|
||||||
socket[0].close();
|
|
||||||
}
|
|
||||||
// this method will throw the proper exception
|
|
||||||
checkCanceled(monitor);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// If the thread is still running (i.e. we timed out) signal that it is too late
|
|
||||||
synchronized (socket) {
|
|
||||||
if (thread.isAlive()) {
|
|
||||||
thread.interrupt();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (exception[0] != null) {
|
|
||||||
if (exception[0] instanceof UnknownHostException)
|
|
||||||
throw (UnknownHostException)exception[0];
|
|
||||||
else
|
|
||||||
throw (IOException)exception[0];
|
|
||||||
}
|
|
||||||
if (socket[0] == null) {
|
|
||||||
throw new InterruptedIOException(NLS.bind(SshConnectorResources.Socket_timeout, new String[] { host }));
|
|
||||||
}
|
|
||||||
return socket[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// <copied from org.eclipse.team.cvs.ssh2>
|
// <copied from org.eclipse.team.cvs.ssh2>
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -349,7 +257,7 @@ public class SshConnectorService extends AbstractConnectorService implements ISs
|
||||||
Socket socket = null;
|
Socket socket = null;
|
||||||
//Allows to cancel the socket creation operation if necessary.
|
//Allows to cancel the socket creation operation if necessary.
|
||||||
//Waits for the timeout specified in CVS Preferences, maximum.
|
//Waits for the timeout specified in CVS Preferences, maximum.
|
||||||
socket = SshConnectorService.createSocket(host, port, CONNECT_DEFAULT_TIMEOUT, monitor);
|
socket = RemoteUtil.createSocket(host, port, CONNECT_DEFAULT_TIMEOUT, monitor);
|
||||||
// Null out the monitor so we don't hold onto anything
|
// Null out the monitor so we don't hold onto anything
|
||||||
// (i.e. the SSH2 session will keep a handle to the socket factory around
|
// (i.e. the SSH2 session will keep a handle to the socket factory around
|
||||||
monitor = new NullProgressMonitor();
|
monitor = new NullProgressMonitor();
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2007 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
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.rse.internal.services;
|
||||||
|
|
||||||
|
import org.eclipse.osgi.util.NLS;
|
||||||
|
|
||||||
|
public class RSEServicesMessages extends NLS {
|
||||||
|
|
||||||
|
private static final String BUNDLE_NAME = "org.eclipse.rse.internal.services.messages"; //$NON-NLS-1$
|
||||||
|
static {
|
||||||
|
NLS.initializeMessages(BUNDLE_NAME, RSEServicesMessages.class);
|
||||||
|
}
|
||||||
|
private RSEServicesMessages() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String Socket_timeout;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
###############################################################################
|
||||||
|
# Copyright (c) 2000, 2007 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
|
||||||
|
#
|
||||||
|
# Contributors:
|
||||||
|
# IBM Corporation - initial API and implementation
|
||||||
|
# Martin Oberhuber (Wind River) - copy Socket_timeout from team.cvs.core
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# NLS_MESSAGEFORMAT_VAR
|
||||||
|
# NLS_ENCODING=UTF-8
|
||||||
|
|
||||||
|
#From org.eclipse.team.internal.ccvs.core/messages.properties
|
||||||
|
Socket_timeout=A timeout occurred connecting to host {0}
|
|
@ -0,0 +1,138 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2000, 2007 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
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* IBM Corporation - initial API and implementation
|
||||||
|
* Martin Oberhuber (Wind River) - added createSocket() from team.cvs.core/Util
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.rse.services;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InterruptedIOException;
|
||||||
|
import java.net.Socket;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
|
||||||
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
import org.eclipse.core.runtime.OperationCanceledException;
|
||||||
|
import org.eclipse.osgi.util.NLS;
|
||||||
|
|
||||||
|
import org.eclipse.rse.internal.services.RSEServicesMessages;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Static helper-methods for network access.
|
||||||
|
*/
|
||||||
|
public class RemoteUtil {
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// <copied
|
||||||
|
// plugin: org.eclipse.team.cvs.core
|
||||||
|
// class: org.eclipse.team.internal.ccvs.core.Policy
|
||||||
|
// copyright: (c) 2000, 2006 IBM Corporation and others />
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Progress Monitor Helper: Checks the passed progress monitor
|
||||||
|
* and throws an {@link OperationCanceledException} when it is
|
||||||
|
* canceled.
|
||||||
|
*
|
||||||
|
* @param monitor The ProgressMonitor to be checked
|
||||||
|
*/
|
||||||
|
public static void checkCanceled(IProgressMonitor monitor) {
|
||||||
|
if (monitor.isCanceled())
|
||||||
|
throw new OperationCanceledException();
|
||||||
|
}
|
||||||
|
|
||||||
|
//</copied>
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// <copied
|
||||||
|
// plugin: org.eclipse.team.cvs
|
||||||
|
// class: org.eclipse.team.internal.ccvs.core.util.Util
|
||||||
|
// copyright: (c) 2000, 2006 IBM Corporation and others />
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper method that will time out when making a socket connection.
|
||||||
|
* This is required because there is no way to provide a timeout value
|
||||||
|
* when creating a socket and in some instances, they don't seem to
|
||||||
|
* timeout at all.
|
||||||
|
* @param host inetaddress to connect to
|
||||||
|
* @param port port to connect to
|
||||||
|
* @param timeout number of seconds for timeout (default=60)
|
||||||
|
* @param monitor progress monitor
|
||||||
|
*/
|
||||||
|
public static Socket createSocket(final String host, final int port, int timeout, IProgressMonitor monitor) throws UnknownHostException, IOException {
|
||||||
|
|
||||||
|
// Start a thread to open a socket
|
||||||
|
final Socket[] socket = new Socket[] { null };
|
||||||
|
final Exception[] exception = new Exception[] {null };
|
||||||
|
final Thread thread = new Thread(new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
Socket newSocket = new Socket(host, port);
|
||||||
|
synchronized (socket) {
|
||||||
|
if (Thread.interrupted()) {
|
||||||
|
// we we're either cancelled or timed out so just close the socket
|
||||||
|
newSocket.close();
|
||||||
|
} else {
|
||||||
|
socket[0] = newSocket;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (UnknownHostException e) {
|
||||||
|
exception[0] = e;
|
||||||
|
} catch (IOException e) {
|
||||||
|
exception[0] = e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
thread.start();
|
||||||
|
|
||||||
|
// Wait the appropriate number of seconds
|
||||||
|
if (timeout <= 0) timeout = 60;
|
||||||
|
for (int i = 0; i < timeout; i++) {
|
||||||
|
try {
|
||||||
|
// wait for the thread to complete or 1 second, which ever comes first
|
||||||
|
thread.join(1000);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
// I think this means the thread was interupted but not necessarily timed out
|
||||||
|
// so we don't need to do anything
|
||||||
|
}
|
||||||
|
synchronized (socket) {
|
||||||
|
// if the user cancelled, clean up before preempting the operation
|
||||||
|
if (monitor.isCanceled()) {
|
||||||
|
if (thread.isAlive()) {
|
||||||
|
thread.interrupt();
|
||||||
|
}
|
||||||
|
if (socket[0] != null) {
|
||||||
|
socket[0].close();
|
||||||
|
}
|
||||||
|
// this method will throw the proper exception
|
||||||
|
checkCanceled(monitor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// If the thread is still running (i.e. we timed out) signal that it is too late
|
||||||
|
synchronized (socket) {
|
||||||
|
if (thread.isAlive()) {
|
||||||
|
thread.interrupt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (exception[0] != null) {
|
||||||
|
if (exception[0] instanceof UnknownHostException)
|
||||||
|
throw (UnknownHostException)exception[0];
|
||||||
|
else
|
||||||
|
throw (IOException)exception[0];
|
||||||
|
}
|
||||||
|
if (socket[0] == null) {
|
||||||
|
throw new InterruptedIOException(NLS.bind(RSEServicesMessages.Socket_timeout, new String[] { host }));
|
||||||
|
}
|
||||||
|
return socket[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
//</copied>
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue