mirror of
https://github.com/GravitLauncher/Launcher
synced 2025-03-20 16:18:24 +03:00
130 lines
4.9 KiB
Java
130 lines
4.9 KiB
Java
package pro.gravit.launchserver.websocket;
|
|
|
|
import java.io.IOException;
|
|
import java.net.InetSocketAddress;
|
|
import java.net.Socket;
|
|
import java.security.KeyManagementException;
|
|
import java.security.KeyStore;
|
|
import java.security.KeyStoreException;
|
|
import java.security.NoSuchAlgorithmException;
|
|
import java.security.SecureRandom;
|
|
import java.security.UnrecoverableKeyException;
|
|
import java.security.cert.CertificateException;
|
|
import java.util.Set;
|
|
|
|
import javax.net.ssl.KeyManagerFactory;
|
|
import javax.net.ssl.SSLContext;
|
|
import javax.net.ssl.SSLServerSocketFactory;
|
|
import javax.net.ssl.TrustManager;
|
|
|
|
import pro.gravit.launcher.ssl.LauncherKeyStore;
|
|
import pro.gravit.launcher.ssl.LauncherTrustManager;
|
|
import pro.gravit.launchserver.LaunchServer;
|
|
import pro.gravit.utils.helper.LogHelper;
|
|
|
|
@SuppressWarnings({"unused", "rawtypes"})
|
|
public final class NettyServerSocketHandler implements Runnable, AutoCloseable {
|
|
private SSLServerSocketFactory ssf;
|
|
|
|
public volatile boolean logConnections = Boolean.getBoolean("launcher.logConnections");
|
|
|
|
public LauncherNettyServer nettyServer;
|
|
|
|
// API
|
|
private Set<Socket> sockets;
|
|
|
|
private transient final LaunchServer server;
|
|
|
|
public NettyServerSocketHandler(LaunchServer server) {
|
|
this.server = server;
|
|
}
|
|
|
|
@Override
|
|
public void close() {
|
|
//TODO: Close Impl
|
|
}
|
|
|
|
public SSLContext SSLContextInit() throws NoSuchAlgorithmException, UnrecoverableKeyException, KeyStoreException, KeyManagementException, IOException, CertificateException {
|
|
TrustManager[] trustAllCerts = new TrustManager[]{
|
|
new LauncherTrustManager()
|
|
};
|
|
KeyStore ks = LauncherKeyStore.getKeyStore("keystore", "PSP1000");
|
|
|
|
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory
|
|
.getDefaultAlgorithm());
|
|
kmf.init(ks, "PSP1000".toCharArray());
|
|
SSLContext sc = SSLContext.getInstance("TLSv1.2");
|
|
sc.init(kmf.getKeyManagers(), trustAllCerts, new SecureRandom());
|
|
return sc;
|
|
}
|
|
|
|
@Override
|
|
public void run() {
|
|
/*SSLContext sc = null;
|
|
try {
|
|
sc = SSLContextInit();
|
|
} catch (NoSuchAlgorithmException e) {
|
|
e.printStackTrace();
|
|
} catch (UnrecoverableKeyException e) {
|
|
e.printStackTrace();
|
|
} catch (KeyStoreException e) {
|
|
e.printStackTrace();
|
|
} catch (KeyManagementException e) {
|
|
e.printStackTrace();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
} catch (CertificateException e) {
|
|
e.printStackTrace();
|
|
}*/
|
|
//System.setProperty( "javax.net.ssl.keyStore","keystore");
|
|
//System.setProperty( "javax.net.ssl.keyStorePassword","PSP1000");
|
|
/*try {
|
|
Selector selector = Selector.open();
|
|
ServerSocketChannel serverChannel = ServerSocketChannel.open();
|
|
serverChannel.configureBlocking(false);
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}*/
|
|
LogHelper.info("Starting netty server socket thread");
|
|
//SSLEngine engine = sc.createSSLEngine();
|
|
//engine.setUseClientMode(false);
|
|
nettyServer = new LauncherNettyServer(server);
|
|
for (LaunchServer.NettyBindAddress address : server.config.netty.binds) {
|
|
nettyServer.bind(new InetSocketAddress(address.address, address.port));
|
|
}
|
|
/*
|
|
try (SSLServerSocket serverSocket = (SSLServerSocket) ssf.createServerSocket()) {
|
|
serverSocket.setEnabledProtocols(new String[] {"TLSv1.2"});
|
|
if (!this.serverSocket.compareAndSet(null, serverSocket)) {
|
|
throw new IllegalStateException("Previous socket wasn't closed");
|
|
}
|
|
|
|
// Set socket params
|
|
serverSocket.setReuseAddress(true);
|
|
serverSocket.setPerformancePreferences(1, 0, 2);
|
|
//serverSocket.setReceiveBufferSize(0x10000);
|
|
serverSocket.bind(server.config.getSocketAddress());
|
|
LogHelper.info("Server socket thread successfully started");
|
|
// Listen for incoming connections
|
|
while (serverSocket.isBound()) {
|
|
SSLSocket socket = (SSLSocket) serverSocket.accept();
|
|
sockets.add(socket);
|
|
socket.startHandshake();
|
|
// Invoke pre-connect listener
|
|
long id = idCounter.incrementAndGet();
|
|
if (listener != null && !listener.onConnect(id, socket.getInetAddress())) {
|
|
continue; // Listener didn't accepted this connection
|
|
}
|
|
|
|
// Reply in separate thread
|
|
threadPool.execute(new ResponseThread(server, id, socket));
|
|
}
|
|
} catch (IOException e) {
|
|
// Ignore error after close/rebind
|
|
if (serverSocket.get() != null) {
|
|
LogHelper.error(e);
|
|
}
|
|
}
|
|
*/
|
|
}
|
|
}
|