Commit ebab5eda authored by FlorianHockmann's avatar FlorianHockmann

Move common behavior up to HttpDatagram

IsValidStart in HttpDatagram now implements the property with the template method pattern. HttpRequestDatagram and HttpResponseDatagram only override CalculateIsValidStart().
parent d7ece16d
......@@ -239,7 +239,23 @@ namespace PcapDotNet.Packets.Http
/// </summary>
public Datagram Body { get; private set; }
public virtual bool IsValidStart => false;
/// <summary>
/// True if this datagram contains a valid start for an HTTP message.
/// </summary>
public bool IsValidStart
{
get
{
if (_isValidStart == null)
_isValidStart = CalculateIsValidStart();
return _isValidStart.Value;
}
}
/// <summary>
/// Calculate whether the HTTP datagram has a valid start.
/// </summary>
protected abstract bool CalculateIsValidStart();
internal static HttpDatagram CreateDatagram(byte[] buffer, int offset, int length)
{
......@@ -357,5 +373,7 @@ namespace PcapDotNet.Packets.Http
}
private static readonly byte[] _httpSlash = Encoding.ASCII.GetBytes("HTTP/");
private bool? _isValidStart;
}
}
\ No newline at end of file
......@@ -46,20 +46,13 @@ namespace PcapDotNet.Packets.Http
Body = Body,
};
}
/// <summary>
/// An HTTP Request has a valid start if it contains a method, an URI, and a version.
/// </summary>
public override bool IsValidStart
protected override bool CalculateIsValidStart()
{
get
{
if (_isValidStart == null)
{
_isValidStart = Method != null && !string.IsNullOrEmpty(Uri) && Version != null;
}
return _isValidStart.Value;
}
return Method != null && !string.IsNullOrEmpty(Uri) && Version != null;
}
internal HttpRequestDatagram(byte[] buffer, int offset, int length)
......@@ -114,7 +107,5 @@ namespace PcapDotNet.Packets.Http
{
return header.ContentLength != null;
}
private bool? _isValidStart;
}
}
\ No newline at end of file
......@@ -53,16 +53,9 @@ namespace PcapDotNet.Packets.Http
/// <summary>
/// A HTTP response has a valid start if it contains a version and a status code.
/// </summary>
public override bool IsValidStart
protected override bool CalculateIsValidStart()
{
get
{
if (_isValidStart == null)
{
_isValidStart = Version != null && StatusCode != null;
}
return _isValidStart.Value;
}
return Version != null && StatusCode != null;
}
internal HttpResponseDatagram(byte[] buffer, int offset, int length)
......@@ -119,7 +112,5 @@ namespace PcapDotNet.Packets.Http
return false;
return true;
}
private bool? _isValidStart;
}
}
\ No newline at end of file
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