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)); }
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); }
public StaticContentHandler( string connectionId, HttpRequestMetadata requestMetadata, Stream stream, string contentType, byte[] content) : base(connectionId, requestMetadata, stream) { this.ContentType = contentType; this.Content = content; }
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())); }
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; }
private IHandler CreateNotFoundHandler(string connectionId, HttpRequestMetadata requestMetadata, Stream stream) { return(new NotFoundHandler(connectionId, requestMetadata, stream)); }
public HttpRequestMetadataBuilder(HttpRequestMetadata requestMetadata) { this.Line = new HttpRequestLineBuilder(requestMetadata.Line); this.Headers = new HttpHeaderCollectionBuilder(requestMetadata.Headers); }
private IHandler ResolveHandler(HttpRequestMetadata metadata) { var handler = _handlerFactory.CreateHandler(this.Id, metadata, _stream, _stopSignal); return(handler); }
public NotFoundHandler(string connectionId, HttpRequestMetadata requestMetadata, Stream stream) : base(connectionId, requestMetadata, stream) { }
protected ContentHandler(string connectionId, HttpRequestMetadata requestMetadata, Stream stream) { _connectionId = connectionId; this.RequestMetadata = requestMetadata; _stream = stream; }