public void HttpRequestLineParserConstructorTest() { HttpUnsortedRequest requestLine = new HttpUnsortedRequest(); Assert.NotNull(requestLine); Assert.ThrowsArgumentGreaterThanOrEqualTo( () => new HttpRequestLineParser(requestLine, ParserData.MinRequestLineSize - 1), "maxRequestLineSize", ParserData.MinRequestLineSize.ToString(), ParserData.MinRequestLineSize - 1 ); HttpRequestLineParser parser = new HttpRequestLineParser( requestLine, ParserData.MinRequestLineSize ); Assert.NotNull(parser); Assert.ThrowsArgumentNull( () => { new HttpRequestLineParser(null, ParserData.MinRequestLineSize); }, "httpRequest" ); }
private static ParserState ParseBufferInSteps( HttpRequestLineParser parser, byte[] buffer, int readsize, out int totalBytesConsumed ) { ParserState state = ParserState.Invalid; totalBytesConsumed = 0; while (totalBytesConsumed <= buffer.Length) { int size = Math.Min(buffer.Length - totalBytesConsumed, readsize); byte[] parseBuffer = new byte[size]; Buffer.BlockCopy(buffer, totalBytesConsumed, parseBuffer, 0, size); int bytesConsumed = 0; state = parser.ParseBuffer(parseBuffer, parseBuffer.Length, ref bytesConsumed); totalBytesConsumed += bytesConsumed; if (state != ParserState.NeedMoreData) { return(state); } } return(state); }
public void RequestLineParserNullBuffer() { HttpUnsortedRequest requestLine = new HttpUnsortedRequest(); HttpRequestLineParser parser = new HttpRequestLineParser(requestLine, ParserData.MinRequestLineSize); Assert.NotNull(parser); int bytesConsumed = 0; Assert.ThrowsArgumentNull(() => { parser.ParseBuffer(null, 0, ref bytesConsumed); }, "buffer"); }
public void HttpRequestLineParserConstructorTest() { HttpUnsortedRequest requestLine = new HttpUnsortedRequest(); Assert.NotNull(requestLine); Assert.ThrowsArgumentGreaterThanOrEqualTo(() => new HttpRequestLineParser(requestLine, ParserData.MinRequestLineSize - 1), "maxRequestLineSize", ParserData.MinRequestLineSize.ToString(), ParserData.MinRequestLineSize - 1); HttpRequestLineParser parser = new HttpRequestLineParser(requestLine, ParserData.MinRequestLineSize); Assert.NotNull(parser); Assert.ThrowsArgumentNull(() => { new HttpRequestLineParser(null, ParserData.MinRequestLineSize); }, "httpRequest"); }
public void RequestLineParserMinimumBuffer() { byte[] data = CreateBuffer("G", "/", "HTTP/1.1"); HttpUnsortedRequest requestLine = new HttpUnsortedRequest(); HttpRequestLineParser parser = new HttpRequestLineParser(requestLine, ParserData.MinRequestLineSize); Assert.NotNull(parser); int bytesConsumed = 0; ParserState state = parser.ParseBuffer(data, data.Length, ref bytesConsumed); Assert.Equal(ParserState.Done, state); Assert.Equal(data.Length, bytesConsumed); ValidateResult(requestLine, "G", "/", new Version("1.1")); }
public void RequestLineParserRejectsInvalidVersion(string invalidVersion) { byte[] data = CreateBuffer("GET", "/", invalidVersion); for (var cnt = 1; cnt <= data.Length; cnt++) { HttpUnsortedRequest requestLine = new HttpUnsortedRequest(); HttpRequestLineParser parser = new HttpRequestLineParser(requestLine, 256); Assert.NotNull(parser); int totalBytesConsumed = 0; ParserState state = ParseBufferInSteps(parser, data, cnt, out totalBytesConsumed); Assert.Equal(ParserState.Invalid, state); } }
/// <summary> /// Initializes a new instance of the <see cref="HttpRequestHeaderParser"/> class. /// </summary> /// <param name="httpRequest">The parsed HTTP request without any header sorting.</param> /// <param name="maxRequestLineSize">The max length of the HTTP request line.</param> /// <param name="maxHeaderSize">The max length of the HTTP header.</param> public HttpRequestHeaderParser(HttpUnsortedRequest httpRequest, int maxRequestLineSize, int maxHeaderSize) { if (httpRequest == null) { throw Error.ArgumentNull("httpRequest"); } _httpRequest = httpRequest; // Create request line parser _requestLineParser = new HttpRequestLineParser(_httpRequest, maxRequestLineSize); // Create header parser _headerParser = new InternetMessageFormatHeaderParser(_httpRequest.HttpHeaders, maxHeaderSize); }
public void RequestLineParserRejectsLws() { byte[] data = CreateBuffer("GET", "/", "HTTP/1.1", true); for (var cnt = 1; cnt <= data.Length; cnt++) { HttpUnsortedRequest requestLine = new HttpUnsortedRequest(); HttpRequestLineParser parser = new HttpRequestLineParser(requestLine, data.Length); Assert.NotNull(parser); int totalBytesConsumed = 0; ParserState state = ParseBufferInSteps(parser, data, cnt, out totalBytesConsumed); Assert.Equal(ParserState.Invalid, state); } }
public void RequestLineParserAcceptsValidVersion(Version version) { byte[] data = CreateBuffer("GET", "/", String.Format("HTTP/{0}", version.ToString(2))); for (var cnt = 1; cnt <= data.Length; cnt++) { HttpUnsortedRequest requestLine = new HttpUnsortedRequest(); HttpRequestLineParser parser = new HttpRequestLineParser(requestLine, 256); Assert.NotNull(parser); int totalBytesConsumed = 0; ParserState state = ParseBufferInSteps(parser, data, cnt, out totalBytesConsumed); Assert.Equal(data.Length, totalBytesConsumed); ValidateResult(requestLine, "GET", "/", version); } }
public void RequestLineParserAcceptsCustomMethods(HttpMethod method) { byte[] data = CreateBuffer(method.ToString(), "/", "HTTP/1.1"); for (var cnt = 1; cnt <= data.Length; cnt++) { HttpUnsortedRequest requestLine = new HttpUnsortedRequest(); HttpRequestLineParser parser = new HttpRequestLineParser(requestLine, data.Length); Assert.NotNull(parser); int totalBytesConsumed = 0; ParserState state = ParseBufferInSteps(parser, data, cnt, out totalBytesConsumed); Assert.Equal(ParserState.Done, state); Assert.Equal(data.Length, totalBytesConsumed); ValidateResult(requestLine, method.ToString(), "/", new Version("1.1")); } }
public void RequestLineParserRejectsInvalidMethod() { foreach (string invalidMethod in ParserData.InvalidMethods) { byte[] data = CreateBuffer(invalidMethod, "/", "HTTP/1.1"); for (var cnt = 1; cnt <= data.Length; cnt++) { HttpUnsortedRequest requestLine = new HttpUnsortedRequest(); HttpRequestLineParser parser = new HttpRequestLineParser(requestLine, 256); Assert.NotNull(parser); int totalBytesConsumed = 0; ParserState state = ParseBufferInSteps(parser, data, cnt, out totalBytesConsumed); Assert.Equal(ParserState.Invalid, state); } } }
public void RequestLineParserAcceptsStandardMethods(HttpMethod method) { byte[] data = CreateBuffer(method.ToString(), "/", "HTTP/1.1"); for (var cnt = 1; cnt <= data.Length; cnt++) { HttpUnsortedRequest requestLine = new HttpUnsortedRequest(); HttpRequestLineParser parser = new HttpRequestLineParser(requestLine, data.Length); Assert.NotNull(parser); int totalBytesConsumed = 0; ParserState state = ParseBufferInSteps(parser, data, cnt, out totalBytesConsumed); Assert.Equal(ParserState.Done, state); Assert.Equal(data.Length, totalBytesConsumed); ValidateResult(requestLine, method.ToString(), "/", new Version("1.1")); } }
private static ParserState ParseBufferInSteps(HttpRequestLineParser parser, byte[] buffer, int readsize, out int totalBytesConsumed) { ParserState state = ParserState.Invalid; totalBytesConsumed = 0; while (totalBytesConsumed <= buffer.Length) { int size = Math.Min(buffer.Length - totalBytesConsumed, readsize); byte[] parseBuffer = new byte[size]; Buffer.BlockCopy(buffer, totalBytesConsumed, parseBuffer, 0, size); int bytesConsumed = 0; state = parser.ParseBuffer(parseBuffer, parseBuffer.Length, ref bytesConsumed); totalBytesConsumed += bytesConsumed; if (state != ParserState.NeedMoreData) { return state; } } return state; }
public void RequestLineParserRejectsInvalidUri() { foreach (string invalidRequestUri in ParserData.InvalidRequestUris) { byte[] data = CreateBuffer("GET", invalidRequestUri, "HTTP/1.1"); for (var cnt = 1; cnt <= data.Length; cnt++) { HttpUnsortedRequest requestLine = new HttpUnsortedRequest(); HttpRequestLineParser parser = new HttpRequestLineParser(requestLine, 256); Assert.NotNull(parser); int totalBytesConsumed = 0; ParserState state = ParseBufferInSteps(parser, data, cnt, out totalBytesConsumed); Assert.Equal(ParserState.Invalid, state); } } }