DelegatingSelectorProvider.java

/*
 * Copyright Radoslav Husar and contributors
 * SPDX-License-Identifier: Apache-2.0
 */
package io.github.rhusar.securenio.channels.spi;

import java.io.IOException;
import java.net.ProtocolFamily;
import java.nio.channels.DatagramChannel;
import java.nio.channels.Pipe;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.nio.channels.spi.AbstractSelector;
import java.nio.channels.spi.SelectorProvider;

/**
 * A {@link SelectorProvider} whose sole purpose is to provide a {@link DelegatingSelector}
 * capable of handling registration of TLS/DTLS-wrapped channels. Channel creation is not supported.
 *
 * @author Radoslav Husar
 */
public class DelegatingSelectorProvider extends SelectorProvider {

    private final SelectorProvider delegate = SelectorProvider.provider();

    @Override
    public AbstractSelector openSelector() throws IOException {
        return new DelegatingSelector(this, delegate.openSelector());
    }

    @Override
    public DatagramChannel openDatagramChannel() {
        throw new UnsupportedOperationException();
    }

    @Override
    public DatagramChannel openDatagramChannel(ProtocolFamily family) {
        throw new UnsupportedOperationException();
    }

    @Override
    public Pipe openPipe() {
        throw new UnsupportedOperationException();
    }

    @Override
    public ServerSocketChannel openServerSocketChannel() {
        throw new UnsupportedOperationException();
    }

    @Override
    public SocketChannel openSocketChannel() {
        throw new UnsupportedOperationException();
    }
}