public void UpgradesPipelineInSameMethodInvocation() { var httpServerCodec = new HttpServerCodec(); var factory = new UpgradeFactory(); var testInStackFrame = new ChannelHandler(); var upgradeHandler = new HttpServerUpgradeHandler(httpServerCodec, factory); var channel = new EmbeddedChannel(testInStackFrame, httpServerCodec, upgradeHandler); const string UpgradeString = "GET / HTTP/1.1\r\n" + "Host: example.com\r\n" + "Connection: Upgrade, HTTP2-Settings\r\n" + "Upgrade: nextprotocol\r\n" + "HTTP2-Settings: AAMAAABkAAQAAP__\r\n\r\n"; IByteBuffer upgrade = Unpooled.CopiedBuffer(Encoding.ASCII.GetBytes(UpgradeString)); Assert.False(channel.WriteInbound(upgrade)); //Assert.Null(channel.Pipeline.Get<HttpServerCodec>()); //Assert.NotNull(channel.Pipeline.Get("marker")); channel.Flush(); Assert.Null(channel.Pipeline.Get <HttpServerCodec>()); Assert.NotNull(channel.Pipeline.Get("marker")); var upgradeMessage = channel.ReadOutbound <IByteBuffer>(); const string ExpectedHttpResponse = "HTTP/1.1 101 Switching Protocols\r\n" + "connection: upgrade\r\n" + "upgrade: nextprotocol\r\n\r\n"; Assert.Equal(ExpectedHttpResponse, upgradeMessage.ToString(Encoding.ASCII)); Assert.True(upgradeMessage.Release()); Assert.False(channel.FinishAndReleaseAll()); }
void ConfigureClearText(IChannel ch) { IChannelPipeline p = ch.Pipeline; HttpServerCodec sourceCodec = new HttpServerCodec(); HttpServerUpgradeHandler upgradeHandler = new HttpServerUpgradeHandler(sourceCodec, UpgradeCodecFactory); CleartextHttp2ServerUpgradeHandler cleartextHttp2ServerUpgradeHandler = new CleartextHttp2ServerUpgradeHandler(sourceCodec, upgradeHandler, new HelloWorldHttp2HandlerBuilder().Build()); p.AddLast(cleartextHttp2ServerUpgradeHandler); p.AddLast(new HttpMessageHandler(this.maxHttpContentLength)); p.AddLast(new UserEventLogger()); }
/// <summary> /// Creates the channel handler provide cleartext HTTP/2 upgrade from HTTP /// upgrade or prior knowledge. /// </summary> /// <param name="httpServerCodec">the http server codec</param> /// <param name="httpServerUpgradeHandler">the http server upgrade handler for HTTP/2</param> /// <param name="http2ServerHandler">the http2 server handler, will be added into pipeline /// when starting HTTP/2 by prior knowledge</param> public CleartextHttp2ServerUpgradeHandler(HttpServerCodec httpServerCodec, HttpServerUpgradeHandler httpServerUpgradeHandler, IChannelHandler http2ServerHandler) { if (httpServerCodec is null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.httpServerCodec); } if (httpServerUpgradeHandler is null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.httpServerUpgradeHandler); } if (http2ServerHandler is null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.http2ServerHandler); } _httpServerCodec = httpServerCodec; _httpServerUpgradeHandler = httpServerUpgradeHandler; _http2ServerHandler = http2ServerHandler; }