예제 #1
0
        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);
                }
        }
예제 #2
0
        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);
                }
        }