mirror of
https://github.com/AlexMacocian/MTSC.git
synced 2026-07-25 08:22:17 +00:00
Make HttpHandler and HttpRoutingHandler take ownership of fragmented messages, and discard messages that don't broadcast the entire headers first
This commit is contained in:
+11
-11
@@ -110,11 +110,11 @@ namespace MTSC.UnitTests
|
||||
request.Headers[HttpMessage.EntityHeaders.ContentLength] = request.BodyString.Length.ToString();
|
||||
byte[] message = request.GetPackedRequest();
|
||||
|
||||
client.QueueMessage(message.Take(5).ToArray());
|
||||
client.QueueMessage(message.Take(message.Length - request.BodyString.Length).ToArray());
|
||||
Thread.Sleep(300);
|
||||
client.QueueMessage(message.Skip(5).Take(message.Length - request.BodyString.Length - 5).ToArray());
|
||||
client.QueueMessage(message.Skip(message.Length - request.BodyString.Length).Take(10).ToArray());
|
||||
Thread.Sleep(300);
|
||||
client.QueueMessage(message.Skip(message.Length - request.BodyString.Length).ToArray());
|
||||
client.QueueMessage(message.Skip(message.Length - request.BodyString.Length + 10).Take(request.BodyString.Length - 10).ToArray());
|
||||
Stopwatch sw = new Stopwatch();
|
||||
sw.Start();
|
||||
while (receivedMessage == null)
|
||||
@@ -150,11 +150,11 @@ namespace MTSC.UnitTests
|
||||
request.Headers[HttpMessage.EntityHeaders.ContentLength] = request.BodyString.Length.ToString();
|
||||
byte[] message = request.GetPackedRequest();
|
||||
|
||||
client.QueueMessage(message.Take(5).ToArray());
|
||||
client.QueueMessage(message.Take(message.Length - request.BodyString.Length).ToArray());
|
||||
Thread.Sleep(300);
|
||||
client.QueueMessage(message.Skip(5).Take(message.Length - request.BodyString.Length - 5).ToArray());
|
||||
client.QueueMessage(message.Skip(message.Length - request.BodyString.Length).Take(10).ToArray());
|
||||
Thread.Sleep(3300);
|
||||
client.QueueMessage(message.Skip(message.Length - request.BodyString.Length).ToArray());
|
||||
client.QueueMessage(message.Skip(message.Length - request.BodyString.Length + 10).Take(request.BodyString.Length - 10).ToArray());
|
||||
Stopwatch sw = new Stopwatch();
|
||||
sw.Start();
|
||||
while (receivedMessage == null)
|
||||
@@ -189,11 +189,11 @@ namespace MTSC.UnitTests
|
||||
Array.Fill<byte>(request.Body, 50);
|
||||
byte[] message = request.GetPackedRequest();
|
||||
|
||||
client.QueueMessage(message.Take(5).ToArray());
|
||||
Thread.Sleep(50);
|
||||
client.QueueMessage(message.Skip(5).Take(message.Length - request.BodyString.Length - 5).ToArray());
|
||||
Thread.Sleep(50);
|
||||
client.QueueMessage(message.Skip(message.Length - request.BodyString.Length).ToArray());
|
||||
client.QueueMessage(message.Take(message.Length - request.BodyString.Length).ToArray());
|
||||
Thread.Sleep(5);
|
||||
client.QueueMessage(message.Skip(message.Length - request.BodyString.Length).Take(10).ToArray());
|
||||
Thread.Sleep(5);
|
||||
client.QueueMessage(message.Skip(message.Length - request.BodyString.Length + 10).Take(request.BodyString.Length - 10).ToArray());
|
||||
Stopwatch sw = new Stopwatch();
|
||||
sw.Start();
|
||||
while (receivedMessage == null)
|
||||
|
||||
+3
-3
@@ -5,12 +5,12 @@
|
||||
<TargetFrameworks>netcoreapp2.1;net48;netstandard2.0;netcoreapp3.0;netcoreapp3.1</TargetFrameworks>
|
||||
<ApplicationIcon />
|
||||
<StartupObject />
|
||||
<Version>2.5</Version>
|
||||
<Version>2.5.1</Version>
|
||||
<Authors>Alexandru-Victor Macocian</Authors>
|
||||
<Product>MTSC</Product>
|
||||
<Description>Modular TCP Server and Client</Description>
|
||||
<AssemblyVersion>0.2.5</AssemblyVersion>
|
||||
<FileVersion>0.2.5</FileVersion>
|
||||
<AssemblyVersion>0.2.5.1</AssemblyVersion>
|
||||
<FileVersion>0.2.5.1</FileVersion>
|
||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||
<Platforms>AnyCPU;x64</Platforms>
|
||||
<PackageProjectUrl>https://github.com/AlexMacocian/MTSC</PackageProjectUrl>
|
||||
|
||||
@@ -105,7 +105,7 @@ namespace MTSC.ServerSide.Handlers
|
||||
server.LogDebug($"Discarded message. Message size [{previousBytes.Length + trimmedMessageBytes.Length}] > [{MaximumRequestSize}]");
|
||||
client.Resources.RemoveResource<FragmentedMessage>();
|
||||
QueueResponse(client, new HttpResponse { StatusCode = StatusCodes.BadRequest, BodyString = $"Request disallowed because it exceeds [{MaximumRequestSize}] bytes!" });
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
byte[] repackagingBuffer = new byte[previousBytes.Length + trimmedMessageBytes.Length];
|
||||
Array.Copy(previousBytes, 0, repackagingBuffer, 0, previousBytes.Length);
|
||||
@@ -119,7 +119,7 @@ namespace MTSC.ServerSide.Handlers
|
||||
// Discard the message if it is too big
|
||||
server.LogDebug($"Discarded message. Message size [{message.MessageBytes.Length}] > [{MaximumRequestSize}]");
|
||||
QueueResponse(client, new HttpResponse { StatusCode = StatusCodes.BadRequest, BodyString = $"Request disallowed because it exceeds [{MaximumRequestSize}] bytes!" });
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
messageBytes = trimmedMessageBytes;
|
||||
}
|
||||
@@ -130,7 +130,7 @@ namespace MTSC.ServerSide.Handlers
|
||||
else
|
||||
{
|
||||
HandleIncompleteRequest(client, server, messageBytes, partialRequest);
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch (Exception ex) when (
|
||||
@@ -144,9 +144,8 @@ namespace MTSC.ServerSide.Handlers
|
||||
ex is IncompleteRequestException ||
|
||||
ex is InvalidPostFormException)
|
||||
{
|
||||
server.LogDebug(ex.Message);
|
||||
server.LogDebug(ex.StackTrace);
|
||||
HandleIncompleteRequest(client, server, messageBytes);
|
||||
server.LogDebug("Malformed request, not saving!");
|
||||
server.LogDebug(ex.Message + "\n" + ex.StackTrace);
|
||||
return false;
|
||||
}
|
||||
catch (Exception e)
|
||||
|
||||
@@ -102,7 +102,7 @@ namespace MTSC.ServerSide.Handlers
|
||||
server.LogDebug($"Discarded message. Message size [{previousBytes.Length + trimmedMessageBytes.Length}] > [{MaximumRequestSize}]");
|
||||
client.Resources.RemoveResource<FragmentedMessage>();
|
||||
QueueResponse(client, new HttpResponse { StatusCode = StatusCodes.BadRequest, BodyString = $"Request disallowed because it exceeds [{MaximumRequestSize}] bytes!" });
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
byte[] repackagingBuffer = new byte[previousBytes.Length + trimmedMessageBytes.Length];
|
||||
Array.Copy(previousBytes, 0, repackagingBuffer, 0, previousBytes.Length);
|
||||
@@ -116,7 +116,7 @@ namespace MTSC.ServerSide.Handlers
|
||||
// Discard the message if it is too big
|
||||
server.LogDebug($"Discarded message. Message size [{trimmedMessageBytes.Length}] > [{MaximumRequestSize}]");
|
||||
QueueResponse(client, new HttpResponse { StatusCode = StatusCodes.BadRequest, BodyString = $"Request disallowed because it exceeds [{MaximumRequestSize}] bytes!" });
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
messageBytes = trimmedMessageBytes;
|
||||
}
|
||||
@@ -126,7 +126,7 @@ namespace MTSC.ServerSide.Handlers
|
||||
else
|
||||
{
|
||||
HandleIncompleteRequest(client, server, messageBytes, partialRequest);
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch (Exception ex) when (
|
||||
@@ -140,9 +140,8 @@ namespace MTSC.ServerSide.Handlers
|
||||
ex is IncompleteRequestException ||
|
||||
ex is InvalidPostFormException)
|
||||
{
|
||||
server.LogDebug(ex.Message);
|
||||
server.LogDebug(ex.StackTrace);
|
||||
HandleIncompleteRequest(client, server, messageBytes);
|
||||
server.LogDebug("Malformed request, not saving!");
|
||||
server.LogDebug(ex.Message + "\n" + ex.StackTrace);
|
||||
return false;
|
||||
}
|
||||
catch (Exception e)
|
||||
|
||||
Reference in New Issue
Block a user