package org.java_websocket.server; import java.io.IOException; import java.net.Socket; import java.nio.channels.ByteChannel; import java.nio.channels.SelectionKey; import java.nio.channels.SocketChannel; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLEngine; import org.java_websocket.SSLSocketChannel2; import org.java_websocket.WebSocketAdapter; import org.java_websocket.WebSocketImpl; import org.java_websocket.drafts.Draft; public class DefaultSSLWebSocketServerFactory implements WebSocketServer.WebSocketServerFactory { protected SSLContext sslcontext; protected ExecutorService exec; public DefaultSSLWebSocketServerFactory(SSLContext sslContext) { this(sslContext, Executors.newSingleThreadScheduledExecutor()); } public DefaultSSLWebSocketServerFactory(SSLContext sslContext, ExecutorService exec) { if (sslContext == null || exec == null) throw new IllegalArgumentException(); this.sslcontext = sslContext; this.exec = exec; } @Override public WebSocketImpl createWebSocket(WebSocketAdapter a, Draft d, Socket c) { return new WebSocketImpl(a, d); } @Override public WebSocketImpl createWebSocket(WebSocketAdapter a, List<Draft> d, Socket s) { return new WebSocketImpl(a, d); } @Override public ByteChannel wrapChannel(SocketChannel channel, SelectionKey key) throws IOException { SSLEngine e = sslcontext.createSSLEngine(); e.setUseClientMode(false); return new SSLSocketChannel2(channel, e, exec, key); } }