From b0a212bcdddd049382a5350365d5873638cf5fc5 Mon Sep 17 00:00:00 2001 From: "marius a. eriksen" Date: Thu, 24 Feb 2011 16:56:01 -0800 Subject: [PATCH] deprecate HTTP codec in builder, move it to "http" instead. --- .../com/twitter/finagle/builder/Codec4J.java | 1 + .../com/twitter/finagle/builder/Http.scala | 1 + .../com/twitter/finagle/http/Codec.scala | 71 +++++++++++++++++++ .../finagle/http/ConnectionManager.scala | 6 ++ 4 files changed, 79 insertions(+) create mode 100644 finagle-core/src/main/scala/com/twitter/finagle/http/Codec.scala diff --git a/finagle-core/src/main/java/com/twitter/finagle/builder/Codec4J.java b/finagle-core/src/main/java/com/twitter/finagle/builder/Codec4J.java index c6e94b966d..f93c9bb28e 100644 --- a/finagle-core/src/main/java/com/twitter/finagle/builder/Codec4J.java +++ b/finagle-core/src/main/java/com/twitter/finagle/builder/Codec4J.java @@ -5,6 +5,7 @@ import com.twitter.finagle.Codec; +@Deprecated public class Codec4J { public static Codec Http = new Http(0); public static Codec HttpWithCompression = new Http(6); diff --git a/finagle-core/src/main/scala/com/twitter/finagle/builder/Http.scala b/finagle-core/src/main/scala/com/twitter/finagle/builder/Http.scala index 790709cce2..3ff34d2c29 100644 --- a/finagle-core/src/main/scala/com/twitter/finagle/builder/Http.scala +++ b/finagle-core/src/main/scala/com/twitter/finagle/builder/Http.scala @@ -6,6 +6,7 @@ import org.jboss.netty.handler.codec.http._ import com.twitter.finagle.Codec import com.twitter.finagle.http._ +@deprecated("Use com.twitter.finagle.http.Http instead") class Http(compressionLevel: Int = 0) extends Codec[HttpRequest, HttpResponse] { val clientPipelineFactory: ChannelPipelineFactory = new ChannelPipelineFactory { diff --git a/finagle-core/src/main/scala/com/twitter/finagle/http/Codec.scala b/finagle-core/src/main/scala/com/twitter/finagle/http/Codec.scala new file mode 100644 index 0000000000..f064cc4247 --- /dev/null +++ b/finagle-core/src/main/scala/com/twitter/finagle/http/Codec.scala @@ -0,0 +1,71 @@ +package com.twitter.finagle.http + +/** + * This puts it all together: The HTTP codec itself. + */ + +import org.jboss.netty.channel.{Channels, ChannelPipelineFactory} +import org.jboss.netty.handler.codec.http._ + +import com.twitter.util.StorageUnit +import com.twitter.conversions.storage._ + +import com.twitter.finagle.Codec + +case class Http( + _compressionLevel: Int = 0, + _maxChunkAggregationBufferSize: StorageUnit = 1.megabyte) + extends Codec[HttpRequest, HttpResponse] { + + def compressionLevel(level: Int) = copy(_compressionLevel = level) + def maxChunkAggregationBufferSize(bufferSize: StorageUnit) = + copy(_maxChunkAggregationBufferSize = bufferSize) + + val clientPipelineFactory: ChannelPipelineFactory = + new ChannelPipelineFactory { + def getPipeline() = { + val pipeline = Channels.pipeline() + pipeline.addLast("httpCodec", new HttpClientCodec()) + pipeline.addLast( + "httpDechunker", + new HttpChunkAggregator(_maxChunkAggregationBufferSize.inBytes.toInt)) + + pipeline.addLast("httpDecompressor", new HttpContentDecompressor) + + pipeline.addLast( + "connectionLifecycleManager", + new ClientConnectionManager) + + pipeline + } + } + + val serverPipelineFactory = + new ChannelPipelineFactory { + def getPipeline() = { + val pipeline = Channels.pipeline() + pipeline.addLast("httpCodec", new HttpServerCodec) + if (_compressionLevel > 0) { + pipeline.addLast( + "httpCompressor", + new HttpContentCompressor(_compressionLevel)) + } + + // Response to ``Expect: Continue'' requests. + pipeline.addLast("respondToExpectContinue", new RespondToExpectContinue) + pipeline.addLast( + "httpDechunker", + new HttpChunkAggregator(_maxChunkAggregationBufferSize.inBytes.toInt)) + + pipeline.addLast( + "connectionLifecycleManager", + new ServerConnectionManager) + + pipeline + } + } +} + +object Http { + def apply() = new Http() +} diff --git a/finagle-core/src/main/scala/com/twitter/finagle/http/ConnectionManager.scala b/finagle-core/src/main/scala/com/twitter/finagle/http/ConnectionManager.scala index 5222aeb051..fc98944912 100644 --- a/finagle-core/src/main/scala/com/twitter/finagle/http/ConnectionManager.scala +++ b/finagle-core/src/main/scala/com/twitter/finagle/http/ConnectionManager.scala @@ -1,5 +1,11 @@ package com.twitter.finagle.http +/** + * The HTTP connection manager implements connection management in + * accordance with RFC 2616 ยง 8. This is just the state machine: the + * codec implementations are in {Server,Client}ConnectionManager. + */ + import org.jboss.netty.handler.codec.http._ class ConnectionManager {