public int GetKeepAliveValueFor(string request) { int?keepAlive = null; var settings = new HttpParserSettings { OnMessageBegin = parser => 0, OnStatus = (parser, status, len) => 0, OnHeaderField = (parser, field, len) => 0, OnHeaderValue = (parser, value, len) => 0, OnHeadersComplete = parser => { keepAlive = HttpParserNative.ShouldKeepAlive(parser); return(0); }, OnBody = (parser, body, len) => 0, OnMessageComplete = parser => { keepAlive = HttpParserNative.ShouldKeepAlive(parser); return(0); } }; var requestBytes = Encoding.UTF8.GetBytes(request); var length = new UIntPtr((uint)requestBytes.Length); using (var parser = AllocateForParser()) using (var pin = new BytePin(requestBytes)) { HttpParserNative.Init(parser.IntPtr, HttpParserType.Response); var parsed = HttpParserNative.Execute(parser.IntPtr, ref settings, pin[0], length); var error = HttpParserNative.ErrorMessageString(parser.IntPtr); Assert.AreEqual("success", error); Assert.AreEqual(length, parsed); Assert.IsNotNull(keepAlive); return(keepAlive.Value); } }
public void ExecuteCallbacks() { const string request = "HTTP/1.1 200 OK\r\n" + "Date: Fri, 31 Dec 1999 23:59:59 GMT\r\n" + "Content-Type: text/plain\r\n" + "Content-Length: 42\r\n" + "some-footer: some-value\r\n" + "another-footer: another-value\r\n" + "\r\n" + "abcdefghijklmnopqrstuvwxyz1234567890abcdef"; var events = new List <string>(); var settings = new HttpParserSettings { OnMessageBegin = parser => { events.Add("OnMessageBegin"); return(0); }, OnStatus = (parser, status, len) => { events.Add(GetString(status, len)); return(0); }, OnHeaderField = (parser, field, len) => { events.Add(GetString(field, len)); return(0); }, OnHeaderValue = (parser, value, len) => { events.Add(GetString(value, len)); return(0); }, OnHeadersComplete = parser => { events.Add("OnHeadersComplete"); return(0); }, OnBody = (parser, body, len) => { events.Add("OnBody"); events.Add(GetString(body, len)); return(0); }, OnMessageComplete = parser => { events.Add("OnMessageComplete"); return(0); } }; var requestBytes = Encoding.UTF8.GetBytes(request); var length = new UIntPtr((uint)requestBytes.Length); using (var parser = AllocateForParser()) using (var pin = new BytePin(requestBytes)) { HttpParserNative.Init(parser.IntPtr, HttpParserType.Response); var parsed = HttpParserNative.Execute(parser.IntPtr, ref settings, pin[0], length); var error = HttpParserNative.ErrorMessageString(parser.IntPtr); Assert.AreEqual("success", error); Assert.AreEqual(length, parsed); CollectionAssert.AreEqual(new [] { "OnMessageBegin", "OK", "Date", "Fri, 31 Dec 1999 23:59:59 GMT", "Content-Type", "text/plain", "Content-Length", "42", "some-footer", "some-value", "another-footer", "another-value", "OnHeadersComplete", "OnBody", "abcdefghijklmnopqrstuvwxyz1234567890abcdef", "OnMessageComplete" }, events); } }