1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-03 14:25:37 +02:00

port range support for daemon

This commit is contained in:
David McKnight 2006-08-01 17:25:48 +00:00
parent 836e33b3fe
commit c13f860b64

View file

@ -23,6 +23,7 @@ import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.BindException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
@ -387,7 +388,7 @@ public class ServerLauncher extends Thread
_connections = new ArrayList();
init(DEFAULT_DAEMON_PORT);
init(DEFAULT_DAEMON_PORT + "");
}
/**
@ -406,8 +407,7 @@ public class ServerLauncher extends Thread
_path = pluginPath.trim();
_connections = new ArrayList();
int port = Integer.parseInt(portStr);
init(port);
init(portStr);
}
private String getKeyStoreLocation()
@ -425,47 +425,117 @@ public class ServerLauncher extends Thread
*
* @param port the daemon port
*/
public void init(int port)
public void init(String portStr)
{
// create server socket from port
_sslProperties = new ServerSSLProperties();
// determine if portStr is a port range or just a port
String[] range = portStr.split("-");
if (range.length == 2)
{
int lPort = 0;
int hPort = 0;
try
{
lPort = Integer.parseInt(range[0]);
hPort = Integer.parseInt(range[1]);
}
catch (Exception e)
{
}
try
{
if (_sslProperties.usingSSL())
{
String keyStoreFileName = getKeyStoreLocation();
String keyStorePassword = getKeyStorePassword();
try
boolean socketBound = false;
for (int i = lPort; i < hPort && !socketBound; i++)
{
// create server socket from port
try
{
SSLContext sslContext = DStoreSSLContext.getServerSSLContext(keyStoreFileName, keyStorePassword);
if (_sslProperties.usingSSL())
{
String keyStoreFileName = getKeyStoreLocation();
String keyStorePassword = getKeyStorePassword();
_serverSocket = sslContext.getServerSocketFactory().createServerSocket(port);
try
{
SSLContext sslContext = DStoreSSLContext.getServerSSLContext(keyStoreFileName, keyStorePassword);
_serverSocket = sslContext.getServerSocketFactory().createServerSocket(i);
}
catch (Exception e)
{
e.printStackTrace();
}
}
else
{
_serverSocket = new ServerSocket(i);
}
if (_serverSocket != null && _serverSocket.getLocalPort() > 0)
{
socketBound = true;
System.out.println("Daemon running on: " + InetAddress.getLocalHost().getHostName() + ", port: " + i);
}
}
catch (Exception e)
catch (UnknownHostException e)
{
System.err.println("Networking problem, can't resolve local host");
e.printStackTrace();
System.exit(-1);
}
catch (BindException e)
{
System.err.println("socket taken on "+i);
// keep going
}
catch (IOException e)
{
System.err.println("Failure to create ServerSocket");
e.printStackTrace();
System.exit(-1);
}
}
else
}
else
{
int port = Integer.parseInt(portStr);
try
{
_serverSocket = new ServerSocket(port);
if (_sslProperties.usingSSL())
{
String keyStoreFileName = getKeyStoreLocation();
String keyStorePassword = getKeyStorePassword();
try
{
SSLContext sslContext = DStoreSSLContext.getServerSSLContext(keyStoreFileName, keyStorePassword);
_serverSocket = sslContext.getServerSocketFactory().createServerSocket(port);
}
catch (Exception e)
{
e.printStackTrace();
}
}
else
{
_serverSocket = new ServerSocket(port);
}
System.out.println("Daemon running on: " + InetAddress.getLocalHost().getHostName() + ", port: " + port);
}
catch (UnknownHostException e)
{
System.err.println("Networking problem, can't resolve local host");
e.printStackTrace();
System.exit(-1);
}
catch (IOException e)
{
System.err.println("Failure to create ServerSocket");
e.printStackTrace();
System.exit(-1);
}
System.out.println("Daemon running on: " + InetAddress.getLocalHost().getHostName() + ", port: " + port);
}
catch (UnknownHostException e)
{
System.err.println("Networking problem, can't resolve local host");
e.printStackTrace();
System.exit(-1);
}
catch (IOException e)
{
System.err.println("Failure to create ServerSocket");
e.printStackTrace();
System.exit(-1);
}
}