Skip to content

Commit

Permalink
Merge pull request #3618 from raboof/http-header-te-modeling
Browse files Browse the repository at this point in the history
  • Loading branch information
ignasi35 committed Nov 11, 2020
2 parents 664568a + 3de48da commit e956fb4
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ private TransferEncodings() {}
public static final TransferEncoding COMPRESS = akka.http.scaladsl.model.TransferEncodings.compress$.MODULE$;
public static final TransferEncoding DEFLATE = akka.http.scaladsl.model.TransferEncodings.deflate$.MODULE$;
public static final TransferEncoding GZIP = akka.http.scaladsl.model.TransferEncodings.gzip$.MODULE$;
public static final TransferEncoding TRAILERS = akka.http.scaladsl.model.TransferEncodings.trailers$.MODULE$;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/*
* Copyright (C) 2009-2020 Lightbend Inc. <https://www.lightbend.com>
*/

package akka.http.javadsl.model.headers;

/**
* Model for the `Transfer-Encoding` header.
* Specification: http://tools.ietf.org/html/draft-ietf-httpbis-p1-messaging-26#section-3.3.1
*/
public abstract class TE extends akka.http.scaladsl.model.HttpHeader {
public abstract Iterable<akka.http.javadsl.model.TransferEncoding> getAcceptableEncodings();

public static TE create(akka.http.javadsl.model.TransferEncoding... acceptableEncodings) {
return new akka.http.scaladsl.model.headers.TE(akka.http.impl.util.Util.<akka.http.javadsl.model.TransferEncoding, akka.http.scaladsl.model.TransferEncoding>convertArray(acceptableEncodings));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -411,6 +411,7 @@ private[parser] trait CommonRules { this: Parser with StringBuilding =>
| ignoreCase("gzip") ~ OWS ~ push(TransferEncodings.gzip)
| ignoreCase("deflate") ~ OWS ~ push(TransferEncodings.deflate)
| ignoreCase("compress") ~ OWS ~ push(TransferEncodings.compress)
| ignoreCase("trailers") ~ OWS ~ push(TransferEncodings.trailers)
| `transfer-extension`)

def `transfer-extension` = rule {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,7 @@ private[http] object HeaderParser {
"sec-websocket-version",
"set-cookie",
"strict-transport-security",
"te",
"transfer-encoding",
"upgrade",
"user-agent",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,10 @@ private[parser] trait SimpleHeaders { this: Parser with CommonRules with CommonA
}
}

def te = rule {
oneOrMore(`transfer-coding`).separatedBy(listSep) ~ EOI ~> (TE(_))
}

// http://tools.ietf.org/html/rfc7230#section-3.3.1
def `transfer-encoding` = rule {
oneOrMore(`transfer-coding`).separatedBy(listSep) ~ EOI ~> (`Transfer-Encoding`(_))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -980,11 +980,14 @@ final case class `Set-Cookie`(cookie: HttpCookie) extends jm.headers.SetCookie w
object TE extends ModeledCompanion[TE] {
def apply(first: TransferEncoding, more: TransferEncoding*): TE = apply(immutable.Seq(first +: more: _*))
}
final case class TE(acceptableEncodings: immutable.Seq[TransferEncoding]) extends RequestHeader {
final case class TE(acceptableEncodings: immutable.Seq[TransferEncoding]) extends jm.headers.TE with RequestHeader {
def append(encodings: immutable.Seq[TransferEncoding]) = TE(this.acceptableEncodings ++ encodings)
import `Transfer-Encoding`.encodingsRenderer
def renderValue[R <: Rendering](r: R): r.type = r ~~ acceptableEncodings
protected def companion = TE

/** Java API */
def getAcceptableEncodings: Iterable[jm.TransferEncoding] = acceptableEncodings.asJava
}

object `Timeout-Access` extends ModeledCompanion[`Timeout-Access`]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -447,9 +447,18 @@ class HttpHeaderSpec extends AnyFreeSpec with Matchers {
"Strict-Transport-Security: max-age=31536000; includeSubDomains" =!= `Strict-Transport-Security`(maxAge = 31536000, includeSubDomains = true)
}

"TE" in {
"TE: chunked" =!= TE(TransferEncodings.chunked)
"TE: gzip" =!= TE(TransferEncodings.gzip)
"TE: trailers" =!= TE(TransferEncodings.trailers)
"TE: someextension" =!= TE(TransferEncodings.Extension("someextension"))
}

"Transfer-Encoding" in {
"Transfer-Encoding: chunked" =!= `Transfer-Encoding`(TransferEncodings.chunked)
"Transfer-Encoding: gzip" =!= `Transfer-Encoding`(TransferEncodings.gzip)
"Transfer-Encoding: trailers" =!= `Transfer-Encoding`(TransferEncodings.trailers)
"Transfer-Encoding: someextension" =!= `Transfer-Encoding`(TransferEncodings.Extension("someextension"))
}

"Range" in {
Expand Down

0 comments on commit e956fb4

Please sign in to comment.