All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.henricook.tls.TLSConnectionWrapper.scala Maven / Gradle / Ivy

The newest version!
package com.henricook.tls

import java.nio.channels.SocketChannel

import org.bouncycastle.crypto.tls.{AlertDescription, TlsFatalAlert}

import scala.concurrent.Promise
import scala.util.control.Exception

trait TLSConnectionWrapper {
  protected val handshake: Promise[Boolean] = Promise()

  protected def onError(message: String, exc: Throwable): Unit = {}

  protected def onInfo(message: String): Unit = {}

  protected def wrapException[T](message: String)(f: ⇒ T): T = {
    val catcher = Exception.allCatch.withApply { exc ⇒
      handshake.tryFailure(exc)
      if (exc.isInstanceOf[TlsFatalAlert]) throw exc
      else {
        onError(message, exc)
        throw new TlsFatalAlert(
          AlertDescription.internal_error,
          new TLSException(message, exc)
        )
      }
    }
    catcher(f)
  }

  def apply(connection: SocketChannel): SocketChannel
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy