content: 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 ByteChannel wrapChannel( SocketChannel channel, SelectionKey key ) throws IOException {
  		SSLEngine e = sslcontext.createSSLEngine();
  		e.setUseClientMode( false );
  		return new SSLSocketChannel2( channel, e, exec, key );
  	}
  
  	@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 );
  	}
  }