Mercurial Hosting > luan
view src/goodjava/lucene/backup/BackupServer.java @ 1506:d80395468b4e
ssl security in code
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 15 May 2020 18:29:47 -0600 |
parents | 8a7b6b32c691 |
children | 0ba144491a42 |
line wrap: on
line source
package goodjava.lucene.backup; import java.io.File; import java.io.IOException; import java.util.Map; import java.net.Socket; import java.net.ServerSocket; import java.util.concurrent.Executors; import java.util.concurrent.ExecutorService; import javax.net.ssl.SSLServerSocket; import goodjava.util.SoftCacheMap; import goodjava.io.IoUtils; import goodjava.rpc.RpcServer; import goodjava.rpc.RpcCall; import goodjava.logging.Logger; import goodjava.logging.LoggerFactory; public class BackupServer { private static final Logger logger = LoggerFactory.getLogger(BackupServer.class); public static int port = 9101; public static String[] cipherSuites = new String[] { "TLS_DH_anon_WITH_AES_128_GCM_SHA256", "TLS_DH_anon_WITH_AES_128_CBC_SHA256", "TLS_ECDH_anon_WITH_AES_128_CBC_SHA", "TLS_DH_anon_WITH_AES_128_CBC_SHA", "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", "SSL_DH_anon_WITH_3DES_EDE_CBC_SHA", "TLS_ECDH_anon_WITH_RC4_128_SHA", "SSL_DH_anon_WITH_RC4_128_MD5", "SSL_DH_anon_WITH_DES_CBC_SHA", "SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA", "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5", }; private final File backupDir; private static final ExecutorService threadPool = Executors.newCachedThreadPool(); private static final Map<String,Backup> backups = new SoftCacheMap<String,Backup>(); public BackupServer(File backupDir) throws IOException { this.backupDir = backupDir; IoUtils.mkdirs(backupDir); } public synchronized void start() throws IOException { final ServerSocket ss; if( cipherSuites == null ) { ss = new ServerSocket(port); } else { ss = IoUtils.getSSLServerSocketFactory().createServerSocket(port); ((SSLServerSocket)ss).setEnabledCipherSuites(cipherSuites); } threadPool.execute(new Runnable(){public void run() { try { while(!threadPool.isShutdown()) { final Socket socket = ss.accept(); threadPool.execute(new Runnable(){public void run() { handle(socket); }}); } } catch(IOException e) { logger.error("",e); } }}); logger.info("started server on port "+port); } private void handle(Socket socket) { RpcServer rpc = new RpcServer(socket); while( !rpc.isClosed() ) { RpcCall call = rpc.read(); if( call == null ) break; String name = (String)call.args[0]; Backup backup; synchronized(backups) { backup = backups.get(name); if( backup == null ) { backup = new Backup(new File(backupDir,name)); backups.put(name,backup); } } backup.handle(rpc,call); } } }