From d4fe311ec0e019bfcf77c36a375d13c6fcf23dac Mon Sep 17 00:00:00 2001 From: benmmurphy Date: Tue, 7 Feb 2012 18:09:42 +0000 Subject: [PATCH] initial netty spdy progress --- .gitignore | 3 +++ build.sbt | 21 ++++++++++++++++ src/main/scala/SpdyHandler.scala | 16 ++++++++++++ src/main/scala/SpdyServer.scala | 16 ++++++++++++ .../scala/SpdyServerPipelineFactory.scala | 25 +++++++++++++++++++ 5 files changed, 81 insertions(+) create mode 100644 .gitignore create mode 100644 build.sbt create mode 100644 src/main/scala/SpdyHandler.scala create mode 100644 src/main/scala/SpdyServer.scala create mode 100644 src/main/scala/SpdyServerPipelineFactory.scala diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5a69fbc --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +target/ +project/boot/ +project/target/ diff --git a/build.sbt b/build.sbt new file mode 100644 index 0000000..aaa6d86 --- /dev/null +++ b/build.sbt @@ -0,0 +1,21 @@ +name := "SPDY Test" + +version := "1.0" + +scalaVersion := "2.9.0" + +libraryDependencies += "com.ning" % "async-http-client" % "1.6.4" + +libraryDependencies += "io.netty" % "netty" % "3.3.1.Final" + +libraryDependencies += "commons-io" % "commons-io" % "2.0.1" + +libraryDependencies += "org.slf4j" % "slf4j-api" % "1.6.2" + +libraryDependencies += "ch.qos.logback" % "logback-classic" % "0.9.29" + +libraryDependencies += "ch.qos.logback" % "logback-core" % "0.9.29" + + + + diff --git a/src/main/scala/SpdyHandler.scala b/src/main/scala/SpdyHandler.scala new file mode 100644 index 0000000..1c30e96 --- /dev/null +++ b/src/main/scala/SpdyHandler.scala @@ -0,0 +1,16 @@ +import org.jboss.netty.channel._ +import org.jboss.netty.handler._ +import org.jboss.netty.handler.codec.spdy._ +import org.slf4j._ + +class SpdyHandler extends SimpleChannelUpstreamHandler { + val logger:Logger = LoggerFactory.getLogger(classOf[SpdyHandler]); + + override def messageReceived(ctx: ChannelHandlerContext, e: MessageEvent) = { + val frame = e.getMessage().asInstanceOf[SpdySynStreamFrame] + logger.debug("received syn stream", frame) + /* we fall off here when we block */ + + } + +} diff --git a/src/main/scala/SpdyServer.scala b/src/main/scala/SpdyServer.scala new file mode 100644 index 0000000..4be1610 --- /dev/null +++ b/src/main/scala/SpdyServer.scala @@ -0,0 +1,16 @@ +import org.jboss.netty.bootstrap._ +import org.jboss.netty.channel.socket.nio._ +import java.net._ +import java.util.concurrent._ + + +object SpdyServer { + def main(args: Array[String]) { + val bootstrap = new ServerBootstrap(new NioServerSocketChannelFactory( + Executors.newCachedThreadPool(), + Executors.newCachedThreadPool())) + + bootstrap.setPipelineFactory(new SpdyServerPipelineFactory()) + bootstrap.bind(new InetSocketAddress(4567)) + } +} diff --git a/src/main/scala/SpdyServerPipelineFactory.scala b/src/main/scala/SpdyServerPipelineFactory.scala new file mode 100644 index 0000000..f47c5b1 --- /dev/null +++ b/src/main/scala/SpdyServerPipelineFactory.scala @@ -0,0 +1,25 @@ +import org.jboss.netty.channel._ +import org.jboss.netty.channel.Channels._ +import org.jboss.netty.handler.codec.spdy._ +import org.jboss.netty.handler.ssl._ +import javax.net.ssl.SSLEngine + +class SpdyServerPipelineFactory extends ChannelPipelineFactory { + + def createSSLEngine() : SSLEngine = { + null + } + + def getPipeline() : ChannelPipeline = { + val engine = createSSLEngine() + val pipe = pipeline() + + pipe.addLast("ssl", new SslHandler(engine)) + pipe.addLast("decoder", new SpdyFrameDecoder()) + pipe.addLast("encoder", new SpdyFrameEncoder()) + pipe.addLast("handler", new SpdySessionHandler(true)) + pipe.addLast("handler", new SpdyHandler()) + pipe + } +} +