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);
}
}