package net.i2p.sam; import java.io.IOException; import java.net.ServerSocket; import java.net.SocketAddress; /* requires Java 7 */ import java.net.SocketOption; import java.nio.ByteBuffer; import java.nio.channels.SocketChannel; import java.nio.channels.ServerSocketChannel; import java.nio.channels.spi.SelectorProvider; import java.util.Collections; import java.util.Set; import javax.net.ssl.SSLServerSocket; import javax.net.ssl.SSLSocket; /** * Simple wrapper for a SSLServerSocket. * Cannot be used for asynch ops. * * @since 0.9.24 */ class SSLServerSocketChannel extends ServerSocketChannel { private final SSLServerSocket _socket; public SSLServerSocketChannel(SSLServerSocket socket) { super(SelectorProvider.provider()); _socket = socket; } //// ServerSocketChannel abstract methods public SocketChannel accept() throws IOException { return new SSLSocketChannel((SSLSocket)_socket.accept()); } public ServerSocket socket() { return _socket; } /** requires Java 7 */ public ServerSocketChannel bind(SocketAddress local, int backlog) { throw new UnsupportedOperationException(); } /** requires Java 7 */ public <T> ServerSocketChannel setOption(SocketOption<T> name, T value) { return this; } //// AbstractSelectableChannel abstract methods public void implCloseSelectableChannel() throws IOException { _socket.close(); } public void implConfigureBlocking(boolean block) throws IOException { if (!block) throw new UnsupportedOperationException(); } //// NetworkChannel interface methods public SocketAddress getLocalAddress() { return _socket.getLocalSocketAddress(); } public <T> T getOption(SocketOption<T> name) { return null; } public Set<SocketOption<?>> supportedOptions() { return Collections.emptySet(); } }