Commit fffd905c authored by Brickner_cp's avatar Brickner_cp

HTTP

parent bb960354
...@@ -49,15 +49,24 @@ namespace PcapDotNet.Packets.Test ...@@ -49,15 +49,24 @@ namespace PcapDotNet.Packets.Test
[TestMethod] [TestMethod]
public void HttpParsingTest() public void HttpParsingTest()
{ {
// Request First Line
TestHttpRequest(""); TestHttpRequest("");
TestHttpRequest(" "); TestHttpRequest(" ");
TestHttpRequest("G", "G");
TestHttpRequest("GET", "GET"); TestHttpRequest("GET", "GET");
TestHttpRequest("GET ", "GET", "");
TestHttpRequest("GET /url", "GET", "/url"); TestHttpRequest("GET /url", "GET", "/url");
TestHttpRequest("GET /url ", "GET", "/url");
TestHttpRequest("GET /url H", "GET", "/url");
TestHttpRequest("GET /url HTTP/", "GET", "/url");
TestHttpRequest("GET /url HTTP/1.0", "GET", "/url", HttpVersion.Version10); TestHttpRequest("GET /url HTTP/1.0", "GET", "/url", HttpVersion.Version10);
TestHttpRequest("GET /url HTTP/1.1", "GET", "/url", HttpVersion.Version11); TestHttpRequest("GET /url HTTP/1.1", "GET", "/url", HttpVersion.Version11);
TestHttpRequest("GET /url HTTP/1.1A", "GET", "/url", HttpVersion.Version11);
TestHttpRequest("GET /url HTTP/1.1", "GET", "/url"); TestHttpRequest("GET /url HTTP/1.1", "GET", "/url");
TestHttpRequest("GET HTTP/1.1", "GET", "", HttpVersion.Version11); TestHttpRequest("GET HTTP/1.1", "GET", "", HttpVersion.Version11);
TestHttpRequest("GET /url HTTP/1.1\r\n", "GET", "/url", HttpVersion.Version11, HttpHeader.Empty);
// Request Header
TestHttpRequest("GET /url HTTP/1.1\r\n" + TestHttpRequest("GET /url HTTP/1.1\r\n" +
"Cache-Control: no-cache\r\n", "Cache-Control: no-cache\r\n",
"GET", "/url", HttpVersion.Version11, "GET", "/url", HttpVersion.Version11,
...@@ -112,12 +121,63 @@ namespace PcapDotNet.Packets.Test ...@@ -112,12 +121,63 @@ namespace PcapDotNet.Packets.Test
new HttpField("abc", ""), new HttpField("abc", ""),
new HttpField("B", "C"))); new HttpField("B", "C")));
TestHttpRequest("GET /url HTTP/1.1\r\n" +
"A:B\r\n" +
"B",
"GET", "/url", HttpVersion.Version11,
new HttpHeader(new HttpField("A", "B")));
TestHttpRequest("GET /url HTTP/1.1\r\n" +
"A:B\r\n" +
"B\r\n",
"GET", "/url", HttpVersion.Version11,
new HttpHeader(new HttpField("A", "B")));
TestHttpRequest("GET /url HTTP/1.1\r\n" +
"A:B\r\n" +
"B\r\n" +
"C:D\r\n",
"GET", "/url", HttpVersion.Version11,
new HttpHeader(new HttpField("A", "B")));
TestHttpRequest("GET /url HTTP/1.1\r\n" +
"A:B\r\n" +
"B:",
"GET", "/url", HttpVersion.Version11,
new HttpHeader(new HttpField("A", "B")));
TestHttpRequest("GET /url HTTP/1.1\r\n" +
"A:B\r\n" +
"B:\r\n",
"GET", "/url", HttpVersion.Version11,
new HttpHeader(new HttpField("A", "B"),
new HttpField("B", string.Empty)));
TestHttpRequest("GET /url HTTP/1.1\r\n" +
"A:B\r\n" +
"B:\r\n" +
"C:D\r\n",
"GET", "/url", HttpVersion.Version11,
new HttpHeader(new HttpField("A", "B"),
new HttpField("B", string.Empty),
new HttpField("C", "D")));
// Request Body
TestHttpRequest("GET /url HTTP/1.1\r\n" + TestHttpRequest("GET /url HTTP/1.1\r\n" +
"\r\n", "\r\n",
"GET", "/url", HttpVersion.Version11, "GET", "/url", HttpVersion.Version11,
new HttpHeader(), HttpHeader.Empty,
string.Empty); string.Empty);
TestHttpRequest("GET /url HTTP/1.1\r\n" +
"Content-Length: 10\r\n" +
"\r\n" +
"1234567890",
"GET", "/url", HttpVersion.Version11,
new HttpHeader(new HttpContentLengthField(10)),
"1234567890");
// Response
TestHttpResponse("HTTP/"); TestHttpResponse("HTTP/");
TestHttpResponse("HTTP/1"); TestHttpResponse("HTTP/1");
...@@ -132,6 +192,8 @@ namespace PcapDotNet.Packets.Test ...@@ -132,6 +192,8 @@ namespace PcapDotNet.Packets.Test
TestHttpResponse("HTTP/1.1 200 OK", HttpVersion.Version11); TestHttpResponse("HTTP/1.1 200 OK", HttpVersion.Version11);
TestHttpResponse("HTTP/1.1 200 OK", HttpVersion.Version11, 200, " OK"); TestHttpResponse("HTTP/1.1 200 OK", HttpVersion.Version11, 200, " OK");
// Response Header
TestHttpResponse("HTTP/1.1 200 OK\r\n" + TestHttpResponse("HTTP/1.1 200 OK\r\n" +
"Cache-Control: no-cache\r\n", "Cache-Control: no-cache\r\n",
HttpVersion.Version11, 200, "OK", HttpVersion.Version11, 200, "OK",
...@@ -144,6 +206,8 @@ namespace PcapDotNet.Packets.Test ...@@ -144,6 +206,8 @@ namespace PcapDotNet.Packets.Test
new HttpHeader( new HttpHeader(
new HttpTransferEncodingField("chunked", "a", "b", "c", "d", "e;f=g;h=\"ijk lmn\""))); new HttpTransferEncodingField("chunked", "a", "b", "c", "d", "e;f=g;h=\"ijk lmn\"")));
// Respone Body
TestHttpResponse("HTTP/1.1 200 OK\r\n" + TestHttpResponse("HTTP/1.1 200 OK\r\n" +
"\r\n" + "\r\n" +
"Body", "Body",
...@@ -173,6 +237,15 @@ namespace PcapDotNet.Packets.Test ...@@ -173,6 +237,15 @@ namespace PcapDotNet.Packets.Test
"body 12345\r\n" + "body 12345\r\n" +
"0\r\n"); "0\r\n");
TestHttpResponse("HTTP/1.1 200 OK\r\n" +
"Transfer-Encoding: chunked\r\n" +
"\r\n" +
"g\r\n" +
"12345678901234567890\r\n" +
"0\r\n",
HttpVersion.Version11, 200, "OK", new HttpHeader(new HttpTransferEncodingField("chunked")),
string.Empty);
TestHttpResponse("HTTP/1.1 200 OK\r\n" + TestHttpResponse("HTTP/1.1 200 OK\r\n" +
"Content-Length: 16\r\n" + "Content-Length: 16\r\n" +
"\r\n" + "\r\n" +
...@@ -254,7 +327,7 @@ namespace PcapDotNet.Packets.Test ...@@ -254,7 +327,7 @@ namespace PcapDotNet.Packets.Test
HttpResponseDatagram response = (HttpResponseDatagram)http; HttpResponseDatagram response = (HttpResponseDatagram)http;
Assert.AreEqual(expectedStatusCode, response.StatusCode, "StatusCode " + httpString); Assert.AreEqual(expectedStatusCode, response.StatusCode, "StatusCode " + httpString);
Assert.AreEqual(expectedReasonPhrase == null ? null : new Datagram(Encoding.ASCII.GetBytes(expectedReasonPhrase)), response.ReasonPhrase, "ReasonPhrase " + httpString); Assert.AreEqual(expectedReasonPhrase == null ? null : new Datagram(Encoding.ASCII.GetBytes(expectedReasonPhrase)), response.ReasonPhrase, "ReasonPhrase " + httpString);
Assert.AreEqual(expectedBody, response.Body); Assert.AreEqual(expectedBody, response.Body, "Body " + httpString);
} }
private static Packet BuildPacket(string httpString) private static Packet BuildPacket(string httpString)
......
...@@ -7,30 +7,6 @@ using PcapDotNet.Base; ...@@ -7,30 +7,6 @@ using PcapDotNet.Base;
namespace PcapDotNet.Packets.Http namespace PcapDotNet.Packets.Http
{ {
public class HttpTransferCoding
{
public HttpTransferCoding(string codingName, ReadOnlyCollection<HttpParameter> parameters)
{
CodingName = codingName;
Parameters = parameters;
}
public string CodingName { get; private set; }
public ReadOnlyCollection<HttpParameter> Parameters { get; private set; }
}
public class HttpParameter
{
public HttpParameter(string attribute, Datagram value)
{
Attribute = attribute;
Value = value;
}
public string Attribute { get; private set; }
public Datagram Value { get; private set; }
}
internal class HttpParser internal class HttpParser
{ {
public HttpParser(byte[] buffer) public HttpParser(byte[] buffer)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment