Example #1
0
        public IHandler CreateHandler(
            string connectionId,
            HttpRequestMetadata requestMetadata,
            Stream stream,
            ManualResetEvent stopSignal)
        {
            if (_staticContentResolver == null)
            {
                return(this.CreateNotFoundHandler(connectionId, requestMetadata, stream));
            }

            if (requestMetadata.Line.Method == HttpMethod.Get)
            {
                var info = _staticContentResolver.Resolve(requestMetadata.Line.RequestUri);

                if (info != null)
                {
                    var content = File.ReadAllText(info.FilePath, Encoding.UTF8);
                    return(new StaticContentHandler(
                               connectionId,
                               requestMetadata,
                               stream,
                               info.ContentType,
                               Encoding.UTF8.GetBytes(content)));
                }
            }

            return(this.CreateNotFoundHandler(connectionId, requestMetadata, stream));
        }
Example #2
0
        private void DoSend()
        {
            var buffer = textBoxRequestText.Text.ToAsciiBytes();

            var metadata = HttpRequestMetadata.Parse(buffer, 0);
            var len      = metadata.ToString().Length;
            var content  = buffer.Skip(len).ToArray();

            _client.Send(metadata, content);
        }
Example #3
0
 public StaticContentHandler(
     string connectionId,
     HttpRequestMetadata requestMetadata,
     Stream stream,
     string contentType,
     byte[] content)
     : base(connectionId, requestMetadata, stream)
 {
     this.ContentType = contentType;
     this.Content     = content;
 }
Example #4
0
        public void Send(HttpRequestMetadata metadata, byte[] content)
        {
            var metadataBuffer = metadata.Serialize();

            _stream.Write(metadataBuffer, 0, metadataBuffer.Length);
            this.RawDataSent?.Invoke(metadataBuffer);

            if (content.Length > 0)
            {
                _stream.Write(content, 0, content.Length);
                this.RawDataSent?.Invoke(content);
            }
        }
        public void Parse_InputIsValid_ParsesCorrectly(string input)
        {
            // Arrange
            var buffer = input.ToAsciiBytes();

            // Act
            var requestMetadata = HttpRequestMetadata.Parse(buffer, 3);

            // Assert
            Assert.That(requestMetadata.Line.Method.ToString(), Is.EqualTo("GET"));
            Assert.That(requestMetadata.Line.RequestUri, Is.EqualTo("/"));
            Assert.That(requestMetadata.Line.Version, Is.EqualTo("HTTP/1.1"));

            Assert.That(requestMetadata.Headers.Count(), Is.EqualTo(6));
            Assert.That(requestMetadata.Headers.ElementAt(0).Name, Is.EqualTo("Accept"));
            Assert.That(requestMetadata.Headers.ElementAt(0).Value, Is.EqualTo("text/html, application/xhtml+xml, image/jxr, */*"));

            Assert.That(requestMetadata.Headers.ElementAt(1).Name, Is.EqualTo("Accept-Language"));
            Assert.That(requestMetadata.Headers.ElementAt(1).Value, Is.EqualTo("ru-RU"));

            Assert.That(requestMetadata.Headers.ElementAt(2).Name, Is.EqualTo("User-Agent"));
            Assert.That(requestMetadata.Headers.ElementAt(2).Value, Is.EqualTo("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299"));

            Assert.That(requestMetadata.Headers.ElementAt(3).Name, Is.EqualTo("Accept-Encoding"));
            Assert.That(requestMetadata.Headers.ElementAt(3).Value, Is.EqualTo("gzip, deflate"));

            Assert.That(requestMetadata.Headers.ElementAt(4).Name, Is.EqualTo("Host"));
            Assert.That(requestMetadata.Headers.ElementAt(4).Value, Is.EqualTo("allitebooks.com"));

            Assert.That(requestMetadata.Headers.ElementAt(5).Name, Is.EqualTo("Connection"));
            Assert.That(requestMetadata.Headers.ElementAt(5).Value, Is.EqualTo("Keep-Alive"));


            var expectedString = @"GET / HTTP/1.1
Accept: text/html, application/xhtml+xml, image/jxr, */*
Accept-Language: ru-RU
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299
Accept-Encoding: gzip, deflate
Host: allitebooks.com
Connection: Keep-Alive

";
            var toString       = requestMetadata.ToString();

            Assert.That(toString, Is.EqualTo(expectedString));

            var bytes = requestMetadata.Serialize();

            Assert.That(bytes, Is.EquivalentTo(expectedString.ToAsciiBytes()));
        }
        public void Parse_NoCrLfs_ThrowsBadHttpDataException()
        {
            // Arrange
            var input  = @"жжжGET / HTTP/1.1
Accept: text/html, application/xhtml+xml, image/jxr, */*
Accept-Language: ru-RU
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299
Accept-Encoding: gzip, deflate
Host: allitebooks.com
Connection: Keep-Alive";
            var buffer = input.ToAsciiBytes();

            // Act & Assert
            Assert.Throws <BadHttpDataException>(() => HttpRequestMetadata.Parse(buffer, 3));
        }
        public void Constructor_ValidArguments_RunsOk()
        {
            // Arrange
            var line         = new HttpRequestLine(HttpMethod.Get, "/");
            var headersArray = new[]
            {
                new HttpHeader("Accept", "text/html, application/xhtml+xml, image/jxr, */*"),
                new HttpHeader("Accept-Language", "ru-RU"),
                new HttpHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299"),
                new HttpHeader("Accept-Encoding", "gzip, deflate"),
                new HttpHeader("Host", "allitebooks.com"),
                new HttpHeader("Connection", "Keep-Alive"),
            };
            var headers = new HttpHeaderCollection(headersArray);

            // Act
            var requestMetadata = new HttpRequestMetadata(line, headers);

            // Assert
            Assert.That(requestMetadata.Line.Method.ToString(), Is.EqualTo("GET"));
            Assert.That(requestMetadata.Line.RequestUri, Is.EqualTo("/"));
            Assert.That(requestMetadata.Line.Version, Is.EqualTo("HTTP/1.1"));

            Assert.That(requestMetadata.Headers.Count(), Is.EqualTo(6));
            Assert.That(requestMetadata.Headers.ElementAt(0), Is.SameAs(headersArray[0]));
            Assert.That(requestMetadata.Headers.ElementAt(1), Is.SameAs(headersArray[1]));
            Assert.That(requestMetadata.Headers.ElementAt(2), Is.SameAs(headersArray[2]));
            Assert.That(requestMetadata.Headers.ElementAt(3), Is.SameAs(headersArray[3]));
            Assert.That(requestMetadata.Headers.ElementAt(4), Is.SameAs(headersArray[4]));
            Assert.That(requestMetadata.Headers.ElementAt(5), Is.SameAs(headersArray[5]));

            var expectedString = @"GET / HTTP/1.1
Accept: text/html, application/xhtml+xml, image/jxr, */*
Accept-Language: ru-RU
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299
Accept-Encoding: gzip, deflate
Host: allitebooks.com
Connection: Keep-Alive

";
            var toString       = requestMetadata.ToString();

            Assert.That(toString, Is.EqualTo(expectedString));

            var bytes = requestMetadata.Serialize();

            Assert.That(bytes, Is.EquivalentTo(expectedString.ToAsciiBytes()));
        }
Example #8
0
        private void DoApply()
        {
            var uri = new Uri(comboBoxUri.Text);
            var url = uri.PathAndQuery;

            var line    = new HttpRequestLine(new HttpMethod(comboBoxMethod.Text), url);
            var headers = new HttpHeaderCollection(listViewHeaders.Items
                                                   .Cast <ListViewItem>()
                                                   .Select(item => new HttpHeader(
                                                               item.SubItems[0].Text,
                                                               item.SubItems[1].Text)));

            var metadata = new HttpRequestMetadata(line, headers);

            var metadataText = metadata.ToString();

            textBoxRequestText.Text = metadataText;
        }
Example #9
0
 private IHandler CreateNotFoundHandler(string connectionId, HttpRequestMetadata requestMetadata, Stream stream)
 {
     return(new NotFoundHandler(connectionId, requestMetadata, stream));
 }
Example #10
0
 public HttpRequestMetadataBuilder(HttpRequestMetadata requestMetadata)
 {
     this.Line    = new HttpRequestLineBuilder(requestMetadata.Line);
     this.Headers = new HttpHeaderCollectionBuilder(requestMetadata.Headers);
 }
Example #11
0
        private IHandler ResolveHandler(HttpRequestMetadata metadata)
        {
            var handler = _handlerFactory.CreateHandler(this.Id, metadata, _stream, _stopSignal);

            return(handler);
        }
Example #12
0
 public NotFoundHandler(string connectionId, HttpRequestMetadata requestMetadata, Stream stream)
     : base(connectionId, requestMetadata, stream)
 {
 }
Example #13
0
 protected ContentHandler(string connectionId, HttpRequestMetadata requestMetadata, Stream stream)
 {
     _connectionId        = connectionId;
     this.RequestMetadata = requestMetadata;
     _stream = stream;
 }