Skip to content

Commit

Permalink
=htp Make sure http2 flag is applied to effective context in all cases
Browse files Browse the repository at this point in the history
  • Loading branch information
jrudolph committed Aug 16, 2018
1 parent 6b5b7ed commit afe0f24
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,9 @@ ProblemFilters.exclude[IncompatibleResultTypeProblem]("akka.http.scaladsl.settin
ProblemFilters.exclude[DirectMissingMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl.apply")
ProblemFilters.exclude[DirectMissingMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl.copy")
ProblemFilters.exclude[DirectMissingMethodProblem]("akka.http.scaladsl.settings.Http2ServerSettings#Http2ServerSettingsImpl.this")

# #2149: additions to @DoNotInherit classes

ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.HttpsConnectionContext.withHttp2")
ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.HttpConnectionContext.withHttp2")
ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.http.javadsl.ConnectionContext.withHttp2")
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@ package akka.http.javadsl
import java.util.Locale
import java.util.Optional

import scala.compat.java8.OptionConverters._

import akka.annotation.{ DoNotInherit, InternalApi }
import akka.http.javadsl.model.Uri
import akka.http.scaladsl.HttpConnectionContext
import akka.http.scaladsl.UseHttp2.Negotiated

@DoNotInherit
Expand All @@ -22,11 +23,14 @@ abstract class ConnectHttp {
def http2: UseHttp2

final def effectiveHttpsConnectionContext(fallbackContext: HttpsConnectionContext): HttpsConnectionContext =
connectionContext.orElse(fallbackContext)
connectionContext.asScala
.getOrElse(fallbackContext)
.withHttp2(http2)

def effectiveConnectionContext(fallbackContext: ConnectionContext): ConnectionContext =
if (connectionContext.isPresent) connectionContext.get()
else fallbackContext
final def effectiveConnectionContext(fallbackContext: ConnectionContext): ConnectionContext =
connectionContext.asScala // Optional doesn't deal well with covariance
.getOrElse(fallbackContext)
.withHttp2(http2)

override def toString = s"ConnectHttp($host,$port,$isHttps,$connectionContext,$http2)"
}
Expand Down Expand Up @@ -168,9 +172,6 @@ final class ConnectHttpImpl(val host: String, val port: Int, val http2: UseHttp2
def isHttps: Boolean = false

def connectionContext: Optional[HttpsConnectionContext] = Optional.empty()

override def effectiveConnectionContext(fallbackContext: ConnectionContext): ConnectionContext =
HttpConnectionContext(http2.asScala)
}

/** INTERNAL API */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ abstract class ConnectionContext {
def sslConfig: Option[AkkaSSLConfig]
def http2: UseHttp2

def withHttp2(newValue: UseHttp2): ConnectionContext

@deprecated("'default-http-port' and 'default-https-port' configuration properties are used instead", since = "10.0.11")
def getDefaultPort: Int
}
Expand All @@ -74,13 +76,17 @@ abstract class HttpConnectionContext(override val http2: UseHttp2) extends akka.
override final def isSecure = false
override final def getDefaultPort = 80
override def sslConfig: Option[AkkaSSLConfig] = None

override def withHttp2(newValue: UseHttp2): HttpConnectionContext
}

@DoNotInherit
abstract class HttpsConnectionContext(override val http2: UseHttp2) extends akka.http.javadsl.ConnectionContext {
override final def isSecure = true
override final def getDefaultPort = 443

override def withHttp2(newValue: UseHttp2): HttpsConnectionContext

/** Java API */
def getEnabledCipherSuites: Optional[JCollection[String]]
/** Java API */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import com.typesafe.sslconfig.akka.AkkaSSLConfig
import scala.collection.JavaConverters._
import java.util.{ Optional, Collection JCollection }

import akka.http.javadsl
import akka.http.scaladsl.UseHttp2.Negotiated
import javax.net.ssl._

Expand Down Expand Up @@ -93,10 +94,20 @@ final class HttpsConnectionContext(
override def getEnabledProtocols: Optional[JCollection[String]] = enabledProtocols.map(_.asJavaCollection).asJava
override def getClientAuth: Optional[TLSClientAuth] = clientAuth.asJava
override def getSslParameters: Optional[SSLParameters] = sslParameters.asJava

override def withHttp2(newValue: javadsl.UseHttp2): javadsl.HttpsConnectionContext =
withHttp2(newValue.asScala)
def withHttp2(newValue: UseHttp2): javadsl.HttpsConnectionContext =
new HttpsConnectionContext(sslContext, sslConfig, enabledCipherSuites, enabledProtocols, clientAuth, sslParameters, newValue)
}

sealed class HttpConnectionContext(http2: UseHttp2) extends akka.http.javadsl.HttpConnectionContext(http2) with ConnectionContext {
def this() = this(Negotiated)

override def withHttp2(newValue: javadsl.UseHttp2): javadsl.HttpConnectionContext =
withHttp2(newValue.asScala)
def withHttp2(newValue: UseHttp2): javadsl.HttpConnectionContext =
new HttpConnectionContext(newValue)
}

final object HttpConnectionContext extends HttpConnectionContext(Negotiated) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,10 @@ class ConnectHttpSpec extends WordSpec with Matchers with BeforeAndAfterAll {
val connect = ConnectHttp.toHost("http://127.0.0.1", 8080, UseHttp2.always)
connect.effectiveConnectionContext(httpsContext).http2 should equal(UseHttp2.always)
}
"connect toHostHttps HTTP/2 only" in {
val connect = ConnectHttp.toHostHttps("https://127.0.0.1", 8080, UseHttp2.always)
connect.effectiveConnectionContext(httpsContext).http2 should equal(UseHttp2.always)
}

}
}

0 comments on commit afe0f24

Please sign in to comment.