public void AddInSteps() { var slize = CreateSlice(@"GET / HTTP/1.1 Connection: Keep-Alive HOST: localhost Content-Length: 0 "); var stream = new SliceStream(slize, 1); _parser.Parse(stream); stream.SetLength(10); _parser.Parse(stream); Assert.False(_completed); stream.SetLength(16); _parser.Parse(stream); Assert.False(_completed); stream.SetLength(78); _parser.Parse(stream); Assert.True(_completed); Assert.Equal("Keep-Alive", _request.Headers["Connection"].Value); Assert.Equal("localhost", _request.Headers["HOST"].Value); Assert.Equal("0", _request.Headers["Content-Length"].Value); }
public void ParseHeader_SkipBody() { const string HttpPost = @"POST / HTTP/1.1 Host: localhost:8080 Connection: keep-alive Content-Length: 11 Origin: http://localhost:8080 X-Requested-With: XMLHttpRequest User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Accept: */* Referer: http://localhost:8080/ajaxPost.html Accept-Encoding: gzip,deflate,sdch Accept-Language: sv,en;q=0.8,en-US;q=0.6 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 Cookie: ASP.NET_SessionId=5vkr4tfivb1ybu1sm4u4kahy; GriffinLanguageSwitcher=sv-se; __RequestVerificationToken=LiTSJATsiqh8zlcft_3gZwvY8HpcCUkirm307njxIZLdsJSYyqaV2st1tunH8sMvMwsVrj3W4dDoV8ECZRhU4s6DhTvd2F-WFkgApDBB-CA1; .ASPXAUTH=BF8BE1C246428B10B49AE867BEDF9748DB3842285BC1AF1EC44AD80281C4AE084B75F0AE13EAF1BE7F71DD26D0CE69634E83C4846625DC7E4D976CA1845914E2CC7A7CF2C522EA5586623D9B73B0AE433337FC59CF6AF665DC135491E78978EF hello=world"; string actual = ""; var buffer = new BufferSlice(Encoding.ASCII.GetBytes(HttpPost), 0, HttpPost.Length); var stream = new SliceStream(buffer, buffer.Count); var parser = new HttpHeaderParser(); parser.HeaderParsed += (sender, args) => actual = args.Value; parser.Parse(stream); Assert.Equal("ASP.NET_SessionId=5vkr4tfivb1ybu1sm4u4kahy; GriffinLanguageSwitcher=sv-se; __RequestVerificationToken=LiTSJATsiqh8zlcft_3gZwvY8HpcCUkirm307njxIZLdsJSYyqaV2st1tunH8sMvMwsVrj3W4dDoV8ECZRhU4s6DhTvd2F-WFkgApDBB-CA1; .ASPXAUTH=BF8BE1C246428B10B49AE867BEDF9748DB3842285BC1AF1EC44AD80281C4AE084B75F0AE13EAF1BE7F71DD26D0CE69634E83C4846625DC7E4D976CA1845914E2CC7A7CF2C522EA5586623D9B73B0AE433337FC59CF6AF665DC135491E78978EF", actual); Assert.Equal('h', (char)buffer.Buffer[stream.Position]); }
public void Write_WrongOffset() { var slice = new BufferSlice(5); var stream = new SliceStream(slice); var mammasBullar = Encoding.UTF8.GetBytes("Mammas bullar smakar godast."); Assert.Throws<ArgumentOutOfRangeException>(() => stream.Write(mammasBullar, -1, 1)); }
public void Write_TooSmallInternalBuffer() { var slice = new BufferSlice(5); var stream = new SliceStream(slice); var mammasBullar = Encoding.UTF8.GetBytes("Mammas bullar smakar godast."); Assert.Throws<ArgumentOutOfRangeException>(() => stream.Write(mammasBullar, 0, 6)); }
/// <summary> /// Will serialize messages /// </summary> /// <param name="message"></param> public virtual void Write(object message) { var formatter = _formatterFactory.CreateSerializer(); var buffer = new BufferSlice(65535); var writer = new SliceStream(buffer); formatter.Serialize(message, writer); writer.Position = 0; Send(buffer, (int) writer.Length); }
public void Test() { var slice = new BufferSlice(65535); var stream = new SliceStream(slice); Assert.Equal(0, stream.Position); Assert.Equal(0, stream.Length); Assert.Equal(65535, ((IBufferWrapper)stream).Capacity); }
public void Parse() { var buffer = Encoding.ASCII.GetBytes("GET / HTTP/1.1\r\nSERVER: LOCALHOST\r\n\r\n"); var slice = new BufferSlice(buffer, 0, buffer.Length); var reader = new SliceStream(slice); var parser = new HttpHeaderParser(); parser.HeaderParsed += (sender, args) => Console.WriteLine(args.Name + ": " + args.Value); parser.Parse(reader); }
public void Write_Single() { var slice = new BufferSlice(65535); var stream = new SliceStream(slice); var mammasBullar = Encoding.UTF8.GetBytes("Mammas bullar smakar godast."); stream.Write(mammasBullar, 0, mammasBullar.Length); Assert.Equal(mammasBullar.Length, stream.Position); Assert.Equal(mammasBullar.Length, stream.Length); // must be able to write after the last byte. stream.Position = mammasBullar.Length; }
/// <summary> /// Send a HTTP message /// </summary> /// <param name="message">Message to send</param> public void Send(IMessage message) { if (message == null) throw new ArgumentNullException("message"); var slice = _stack.Pop(); var stream = new SliceStream(slice); var serializer = new HttpHeaderSerializer(); serializer.SerializeResponse((IResponse) message, stream); Context.Send(slice, (int) stream.Length); if (message.ContentLength > 0 && message.Body == null) throw new InvalidOperationException("A content length is specified, but the Body stream is null."); if (message.Body != null) Context.Send(message.Body); if (message.ProtocolVersion == "HTTP/1.0") Context.Close(); }
/// <summary> /// Process message /// </summary> /// <param name="context"></param> /// <param name="message"></param> public void HandleDownstream(IPipelineHandlerContext context, IPipelineMessage message) { var msg = message as SendHttpResponse; if (msg == null) { context.SendDownstream(message); return; } var slice = _pool.Pop(); var serializer = new HttpHeaderSerializer(); var stream = new SliceStream(slice); serializer.SerializeResponse(msg.Response, stream); context.SendDownstream(new SendSlice(slice, (int) stream.Length)); if (msg.Response.Body != null) context.SendDownstream(new SendStream(msg.Response.Body)); if (!msg.Response.KeepAlive) context.SendDownstream(new Close()); }
public void ReadLongerThanBuffer() { var slice = new BufferSlice(65535); var stream = new SliceStream(slice); var expected = "Mammas bullar smakar godast"; var mammasBullar = Encoding.UTF8.GetBytes(expected); stream.Write(mammasBullar, 0, mammasBullar.Length); var buffer = new byte[100]; stream.Position = 0; Assert.Equal(expected.Length, stream.Read(buffer, 0, 1024)); Assert.Equal(expected, Encoding.UTF8.GetString(buffer, 0, expected.Length)); }
public void Read_TwoTimes() { var slice = new BufferSlice(65535); var stream = new SliceStream(slice); var mammasBullar = Encoding.UTF8.GetBytes("Mammas bullar smakar godast."); stream.Write(mammasBullar, 0, mammasBullar.Length); var buffer = new byte[10]; stream.Position = 0; stream.Read(buffer, 0, 6); var buffer2 = new byte[10]; stream.Read(buffer2, 0, 7); Assert.Equal("Mammas", Encoding.UTF8.GetString(buffer, 0, 6)); Assert.Equal(" bullar", Encoding.UTF8.GetString(buffer2, 0, 7)); }
public void Position_SetGet() { var slice = new BufferSlice(65535); var stream = new SliceStream(slice); var mammasBullar = Encoding.UTF8.GetBytes("Mammas bullar smakar godast."); stream.Write(mammasBullar, 0, mammasBullar.Length); stream.Position = 2; Assert.Equal(2, stream.Position); }
public void Write_ThenMovePositionOutOfRange() { var slice = new BufferSlice(65535); var stream = new SliceStream(slice); var mammasBullar = Encoding.UTF8.GetBytes("Mammas bullar smakar godast."); stream.Write(mammasBullar, 0, mammasBullar.Length); Assert.Throws<ArgumentOutOfRangeException>(() => stream.Position = mammasBullar.Length + 1); Assert.Throws<ArgumentOutOfRangeException>(() => stream.Position = -1); }