fix header parsing

This commit is contained in:
subhra74 2021-12-06 14:05:37 +01:00
parent 8f53ab3249
commit 2906470ea4
5 changed files with 51 additions and 4 deletions

View File

@ -35,6 +35,7 @@ namespace HttpServer
{
key = headerLine.Substring(0, index).Trim();
value = headerLine.Substring(index + 1).Trim();
return;
}
throw new IOException("Invalid header");
}
@ -61,12 +62,14 @@ namespace HttpServer
byte[]? body = null;
var io = tcp.GetStream();
var first = true;
//var lines = LineReader.ReadLines(io);
foreach (var line in LineReader.ReadLines(io))
{
if (first)
{
path = ParseRequestStatusLine(line);
first = false;
continue;
}
ParseHeader(line, out string headerName, out string headerValue);
var values = headers.GetValueOrDefault(headerName, new List<string>());

View File

@ -56,7 +56,6 @@ namespace HttpServer
catch (Exception ex)
{
Log.Debug(ex, ex.Message);
throw;
}
finally
{

View File

@ -1,8 +1,8 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using TraceLog;
namespace HttpServer
{
@ -10,6 +10,9 @@ namespace HttpServer
{
internal static IEnumerable<string> ReadLines(Stream stream)
{
//try
//{
// var lines = new List<string>();
var buffer = new StringBuilder();
while (true)
{
@ -18,10 +21,19 @@ namespace HttpServer
if (x == '\n')
{
if (buffer.Length == 0) yield break;
yield return buffer.ToString();
var line = buffer.ToString();
buffer = new StringBuilder();
yield return line;
}
if (x != '\r') buffer.Append((char)x);
else if (x != '\r') buffer.Append((char)x);
}
//return lines;
//}
//catch (Exception e)
//{
// Log.Debug(e, "Error parsing headers");
// throw e;
//}
}
}
}

View File

@ -0,0 +1,32 @@
using HttpServer;
using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace XDM.SystemTests
{
class NanoServerTests
{
[Test]
public void TestServer()
{
var me = new ManualResetEvent(false);
var server = new NanoServer(IPAddress.Loopback, 5454);
server.RequestReceived += (a, b) =>
{
me.Set();
};
server.Start();
//new Thread(() => server.Start());
//Thread.Sleep(200000000);
////var wr = WebRequest.CreateHttp("http://127.0.0.1:5454/hello");
////wr.GetResponse().GetResponseStream().Close();
//me.WaitOne();
}
}
}

View File

@ -19,6 +19,7 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\HttpServer\HttpServer.csproj" />
<ProjectReference Include="..\MediaParser.Hls\MediaParser.csproj" />
<ProjectReference Include="..\MockServer\MockServer.csproj" />
<ProjectReference Include="..\XDM_CoreFx\XDM.Core.csproj" />