KSSLSocketFactoryDefault.kt

package org.knio.core.net.ssl

import org.knio.core.context.KnioContext
import java.net.InetAddress
import java.net.InetSocketAddress
import javax.net.ssl.SSLContext

internal class KSSLSocketFactoryDefault(
    private val sslContext: SSLContext,
    private val context: KnioContext
): KSSLSocketFactory {
    override suspend fun createSocket(): KSSLSocket {

        return KSSLSocketImpl (
            channel = context.channelFactory.openSocketChannel(),
            sslEngine = sslContext.createSSLEngine(),
            useClientMode = true,
            context = context
        )
    }

    override suspend fun createSocket(host: String, port: Int) = createSocket().apply {
        connect(InetSocketAddress(host, port))
    }

    override suspend fun createSocket(
        host: String,
        port: Int,
        localHost: InetAddress,
        localPort: Int
    ) = createSocket().apply {
        connect(InetSocketAddress(host, port))
        bind(InetSocketAddress(localHost, localPort))
    }

    override suspend fun createSocket(host: InetAddress, port: Int) = createSocket().apply {
        connect(InetSocketAddress(host, port))
    }

    override suspend fun createSocket(
        address: InetAddress,
        port: Int,
        localAddress: InetAddress,
        localPort: Int
    ) = createSocket().apply {
        connect(InetSocketAddress(address, port))
        bind(InetSocketAddress(localAddress, localPort))
    }

    override suspend fun getDefaultCipherSuites(): Array<String> = sslContext.defaultSSLParameters.cipherSuites

    override suspend fun getSupportedCipherSuites(): Array<String> = sslContext.supportedSSLParameters.cipherSuites
}