コード例 #1
0
            internal MultipartLogEntry(MultipartSection section)
                : base(section.Body, true)
            {
                HeadersReader <StringValues> headers = GetHeaders(section).TryGetValue;

                Term      = ParseHeader(RequestVoteMessage.RecordTermHeader, headers, Int64Parser);
                Timestamp = ParseHeader(HeaderNames.LastModified, headers, Rfc1123Parser);
コード例 #2
0
 private CustomMessage(HeadersReader <StringValues> headers, Stream body, ContentType contentType, long?length)
     : base(headers)
 {
     Mode = ParseHeader(DeliveryModeHeader, headers, DeliveryModeParser);
     RespectLeadership = ParseHeader(RespectLeadershipHeader, headers, BooleanParser);
     Message           = new InboundMessageContent(body, ParseHeader(MessageNameHeader, headers), contentType, length);
 }
コード例 #3
0
 private AppendEntriesMessage(HeadersReader <StringValues> headers)
     : base(headers)
 {
     PrevLogIndex = ParseHeader(PrecedingRecordIndexHeader, headers, Int64Parser);
     PrevLogTerm  = ParseHeader(PrecedingRecordTermHeader, headers, Int64Parser);
     CommitIndex  = ParseHeader(CommitIndexHeader, headers, Int64Parser);
 }
コード例 #4
0
        public async Task ManyHeadersAsync()
        {
            var config = Configuration.For <_ManyHeaders>(Options.Default.NewBuilder().WithRowEnding(RowEndings.CarriageReturnLineFeed).Build());

            var csv =
                string.Join(
                    ",",
                    new[]
            {
                nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader1),
                nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader2),
                nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader3),
                nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader4),
                nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader5),
                nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader6),
                nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader7),
                nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader8),
                nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader9),
                nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader10)
            }
                    );

            await RunAsyncReaderVariants <_ManyHeaders>(
                Options.Default,
                async (config, makeReader) =>
            {
                var c = (ConcreteBoundConfiguration <_ManyHeaders>)config;

                using (var str = makeReader(csv))
                {
                    using var charLookup = ReaderStateMachine.MakeCharacterLookup(c.MemoryPool, c.EscapedValueStartAndStop, c.ValueSeparator, c.EscapeValueEscapeChar, c.CommentChar);
                    using var reader     = new HeadersReader <_ManyHeaders>(c, charLookup, str, new BufferWithPushback(MemoryPool <char> .Shared, 500));
                    var res = await reader.ReadAsync(default);
コード例 #5
0
 private InstallSnapshotMessage(HeadersReader <StringValues> headers, out long snapshotTerm, out DateTimeOffset timestamp)
     : base(headers)
 {
     Index        = ParseHeader(SnapshotIndexHeader, headers, Int64Parser);
     snapshotTerm = ParseHeader(SnapshotTermHeader, headers, Int64Parser);
     timestamp    = ParseHeader(HeaderNames.LastModified, headers, DateTimeParser);
 }
コード例 #6
0
        public void Parse_CorrectToken(string input, string tokenText, TokenType type, int tagLevel)
        {
            var resToken = new HeadersReader().Read(input, 0);

            resToken.Tag.Should().Be(type);
            resToken.Text.Should().Be(tokenText);
            resToken.TagLevel.Should().Be(tagLevel);
        }
コード例 #7
0
            internal ReceivedLogEntry(MultipartSection section)
                : base(section.Body, true)
            {
                HeadersReader <StringValues> headers = section.Headers.TryGetValue;

                Term      = ParseHeader(RequestVoteMessage.RecordTermHeader, headers, Int64Parser);
                Timestamp = ParseHeader(HeaderNames.LastModified, headers, DateTimeParser);
            }
コード例 #8
0
        private protected HttpMessage(HeadersReader <StringValues> headers)
        {
            var address = ParseHeader(NodeIpHeader, headers, IpAddressParser);
            var port    = ParseHeader(NodePortHeader, headers, Int32Parser);

            Sender      = new IPEndPoint(address, port);
            MessageType = GetMessageType(headers);
            Id          = ParseHeader(RequestIdHeader, headers);
        }
コード例 #9
0
 private static IEnumerable <ReadOnlyMemory <char> > ToEnumerable <T>(HeadersReader <T> .HeaderEnumerator e)
 {
     using (e)
     {
         while (e.MoveNext())
         {
             yield return(e.Current);
         }
     }
 }
コード例 #10
0
        public void Should_Do_Multiple_reads_Firstread_PART_Does_NOT_Contain_Separator()
        {
            //Given
            const string data   = "12345678abc\r\n\r\nandrei";
            var          stream = new StubNetworkStream(data);

            //When
            var reader = new HeadersReader(stream, Eight);

            byte[] headers = reader.ReadHeaders();

            //Then
            Assert.Equal("12345678abc\r\n\r\n", Encoding.UTF8.GetString(headers));
        }
コード例 #11
0
        public void Test_ReadHeaders_ReadValue_Smaller_Than_StreamData_MultipleHeaders()
        {
            //Given
            const string data   = "12\r\n1234\r\n12345\r\n";
            var          stream = new StubNetworkStream(data);

            //When
            var reader = new HeadersReader(stream, Three);

            byte[] headers = reader.ReadHeaders();

            //Then
            Assert.Null(headers);
        }
コード例 #12
0
        public void Test_ReadHeaders_For_Simple_Case()
        {
            //Given
            const string data   = "12345\r\n\r\n678";
            var          stream = new StubNetworkStream(data);

            //When
            var reader = new HeadersReader(stream, data.Length);

            byte[] headers = reader.ReadHeaders();

            //Then
            Assert.Equal("12345\r\n\r\n", Encoding.UTF8.GetString(headers));
        }
コード例 #13
0
        public void Test_ContentLength_Header_Should_Return_Negative_InvalidValue()
        {
            //Given
            const string data   = "12\r\nContent-Length: -10\r\n\r\n";
            var          stream = new StubNetworkStream(data);

            //When
            var reader = new HeadersReader(stream, Eight);

            reader.ReadHeaders();

            //Then
            Assert.Equal(-1, reader.ContentLength);
        }
コード例 #14
0
        public void Test_ContentLength_Header_Should_Work_for_UpperCases()
        {
            //Given
            const string data   = "12\r\nContent-Length: 10\r\n\r\n";
            var          stream = new StubNetworkStream(data);

            //When
            var reader = new HeadersReader(stream, Eight);

            reader.ReadHeaders();

            //Then
            Assert.Equal(10, reader.ContentLength);
        }
コード例 #15
0
        public void Test_ContentLength_Header_Should_Return_Zero()
        {
            //Given
            const string data   = "12\r\ncontent-length: 0\r\n\r\n";
            var          stream = new StubNetworkStream(data);

            //When
            var reader = new HeadersReader(stream, Eight);

            reader.ReadHeaders();

            //Then
            Assert.Equal(0, reader.ContentLength);
        }
コード例 #16
0
        public void Test_Chunked_Header_Should_Return_TRUE_CapitalLetters()
        {
            //Given
            const string data   = "12\r\n Transfer - Encoding: chunked\r\n\r\n";
            var          stream = new StubNetworkStream(data);

            //When
            var reader = new HeadersReader(stream, Eight);

            reader.ReadHeaders();

            //Then
            Assert.True(reader.Chunked);
        }
コード例 #17
0
        public void Test_ReadHeaders_Should_Return_Null_When_Separator_Is_Not_Found()
        {
            //Given
            const string data   = "1234andrei";
            var          stream = new StubNetworkStream(data);

            //When
            var reader = new HeadersReader(stream, Two);

            byte[] headers = reader.ReadHeaders();

            //Then
            Assert.Null(headers);
        }
コード例 #18
0
        public void Test_Chunked_Header_Should_Return_False_SimpleCase()
        {
            //Given
            const string data   = "12\r\n Transfer\r\n\r\n";
            var          stream = new StubNetworkStream(data);

            //When
            var reader = new HeadersReader(stream, Eight);

            reader.ReadHeaders();

            //Then
            Assert.False(reader.Chunked);
        }
コード例 #19
0
        public void Test_ReadProcess_ReadSize_Overtakes_StreamData_OneHeader_WasFound()
        {
            //Given
            const string data   = "12\r\n";
            var          stream = new StubNetworkStream(data);

            //When
            var reader = new HeadersReader(stream, Four);

            byte[] headers = reader.ReadHeaders();

            //Then
            Assert.Null(headers);
        }
コード例 #20
0
        public void Test_ReadHeaders_NULL_After_Reading_MoreBytes_than_StreamData()
        {
            //Given
            const string data   = "1234andrei";
            var          stream = new StubNetworkStream(data);

            //When
            var reader = new HeadersReader(stream, Eight);

            byte[] headers = reader.ReadHeaders();

            //Then
            Assert.Null(headers);
        }
コード例 #21
0
        public void Test_ReadHeaders_Headers_are_Stored_Completely_after_Multiple_Reads()
        {
            //Given
            const string data   = "12\r\n34\r\n5678\r\n\r\n";
            var          stream = new StubNetworkStream(data);

            //When
            var reader = new HeadersReader(stream, data.Length);

            byte[] headers = reader.ReadHeaders();

            //Then
            Assert.Equal(data, Encoding.UTF8.GetString(headers));
        }
コード例 #22
0
        public void Test_ReadHeaders_EndLine_Is_AtTheEnd()
        {
            //Given
            const string data   = "12345678\r\n\r\n";
            var          stream = new StubNetworkStream(data);

            //When
            var reader = new HeadersReader(stream, data.Length);

            byte[] headers = reader.ReadHeaders();

            //Then
            Assert.Equal("12345678\r\n\r\n", Encoding.UTF8.GetString(headers));
        }
コード例 #23
0
        public void Should_Correctly_ReadHeaders_EdgeCase_With_MULTIPLE_Reads()
        {
            //Given
            const string data   = "12\r\n123\r\n1234\r\n\r\nandrei";
            var          stream = new StubNetworkStream(data);

            //When
            var reader = new HeadersReader(stream, Two);

            byte[] headers = reader.ReadHeaders();

            //Then
            Assert.Equal("12\r\n123\r\n1234\r\n\r\n", Encoding.UTF8.GetString(headers));
        }
コード例 #24
0
        public void Test_Chunked_Header_Only_First_HeaderPart_is_contained()
        {
            //Given
            const string data   = "12\r\n Transfer - Encoding: \r\n\r\n";
            var          stream = new StubNetworkStream(data);

            //When
            var reader = new HeadersReader(stream, Eight);

            reader.ReadHeaders();

            //Then
            Assert.False(reader.Chunked);
        }
コード例 #25
0
        public void Test_GetRemainder_ReadValue_Smaller_Than_StreamData_MultipleHeaders()
        {
            //Given
            const string data   = "12\r\n1234\r\n12345\r\n\r\nab";
            var          stream = new StubNetworkStream(data);

            //When
            var reader = new HeadersReader(stream, Three);

            reader.ReadHeaders();
            byte[] remainder = reader.Remainder;

            //Then
            Assert.Equal("ab", Encoding.UTF8.GetString(remainder));
        }
コード例 #26
0
        public void Test_GetRemainder_Should_Return_Null_When_Separator_Is_Not_Found()
        {
            //Given
            const string data   = "1234andrei";
            var          stream = new StubNetworkStream(data);

            //When
            var reader = new HeadersReader(stream, Eight);

            reader.ReadHeaders();
            byte[] remainder = reader.Remainder;

            //Then
            Assert.Null(remainder);
        }
コード例 #27
0
        public void Test_GetRemainder_ReadSize_OverTakes_Total_StreamData()
        {
            //Given
            const string data   = "1234\r\n\r\nandrei";
            var          stream = new StubNetworkStream(data);

            //When
            var reader = new HeadersReader(stream, 7);

            reader.ReadHeaders();
            byte[] remainder = reader.Remainder;

            //Then
            Assert.Equal("andrei", Encoding.UTF8.GetString(remainder));
        }
コード例 #28
0
        public void Test_GetRemainder_Should_Return_NULL_After_Multiple_Reads()
        {
            //Given
            const string data   = "1234nandrei\r\n\r\n";
            var          stream = new StubNetworkStream(data);

            //When
            var reader = new HeadersReader(stream, Eight);

            reader.ReadHeaders();
            byte[] remainder = reader.Remainder;

            //Then
            Assert.Null(remainder);
        }
コード例 #29
0
        public void Test_GetRemainder_ReadSize_Overtakes_StreamData_more_Complex_Case()
        {
            //Given
            const string data   = "12\r\n34\r\n\r\naa";
            var          stream = new StubNetworkStream(data);

            //When
            var reader = new HeadersReader(stream, Eight);

            reader.ReadHeaders();
            byte[] remainder = reader.Remainder;

            //Then
            Assert.Equal("aa", Encoding.UTF8.GetString(remainder));
        }
コード例 #30
0
        public void Test_GetRemainder_Should_Return_NULL_For_EdgeCase()
        {
            //Given
            const string data   = "1234\r\nandrei\r\n\r\n";
            var          stream = new StubNetworkStream(data);

            //When
            var reader = new HeadersReader(stream, Two);

            reader.ReadHeaders();
            byte[] remainder = reader.Remainder;

            //Then
            Assert.Null(remainder);
        }