update stream reading

pull/702/head
Luke Pulverenti 8 years ago
parent 6cebecb88c
commit 011fa515c5

@ -3,6 +3,7 @@ using System.Collections.Specialized;
using System.Globalization; using System.Globalization;
using System.IO; using System.IO;
using System.Text; using System.Text;
using System.Threading.Tasks;
using System.Web; using System.Web;
using ServiceStack; using ServiceStack;
using ServiceStack.Web; using ServiceStack.Web;
@ -32,19 +33,20 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp
return header.Substring(ap + 1, end - ap - 1); return header.Substring(ap + 1, end - ap - 1);
} }
void LoadMultiPart() async Task LoadMultiPart()
{ {
string boundary = GetParameter(ContentType, "; boundary="); string boundary = GetParameter(ContentType, "; boundary=");
if (boundary == null) if (boundary == null)
return; return;
var input = GetSubStream(InputStream); using (var requestStream = GetSubStream(InputStream))
{
//DB: 30/01/11 - Hack to get around non-seekable stream and received HTTP request //DB: 30/01/11 - Hack to get around non-seekable stream and received HTTP request
//Not ending with \r\n? //Not ending with \r\n?
var ms = new MemoryStream(32 * 1024); var ms = new MemoryStream(32 * 1024);
input.CopyTo(ms); await requestStream.CopyToAsync(ms).ConfigureAwait(false);
input = ms;
var input = ms;
ms.WriteByte((byte)'\r'); ms.WriteByte((byte)'\r');
ms.WriteByte((byte)'\n'); ms.WriteByte((byte)'\n');
@ -78,7 +80,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp
files.AddFile(e.Name, sub); files.AddFile(e.Name, sub);
} }
} }
EndSubStream(input); }
} }
public NameValueCollection Form public NameValueCollection Form
@ -91,10 +93,15 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp
files = new HttpFileCollection(); files = new HttpFileCollection();
if (IsContentType("multipart/form-data", true)) if (IsContentType("multipart/form-data", true))
LoadMultiPart(); {
else if ( var task = LoadMultiPart();
IsContentType("application/x-www-form-urlencoded", true)) Task.WaitAll(task);
LoadWwwForm(); }
else if (IsContentType("application/x-www-form-urlencoded", true))
{
var task = LoadWwwForm();
Task.WaitAll(task);
}
form.Protect(); form.Protect();
} }
@ -220,15 +227,16 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp
return String.Compare(ContentType, ct, true, Helpers.InvariantCulture) == 0; return String.Compare(ContentType, ct, true, Helpers.InvariantCulture) == 0;
} }
async Task LoadWwwForm()
void LoadWwwForm()
{ {
using (Stream input = GetSubStream(InputStream)) using (Stream input = GetSubStream(InputStream))
{ {
using (StreamReader s = new StreamReader(input, ContentEncoding)) using (var ms = new MemoryStream())
{
await input.CopyToAsync(ms).ConfigureAwait(false);
ms.Position = 0;
using (StreamReader s = new StreamReader(ms, ContentEncoding))
{ {
StringBuilder key = new StringBuilder(); StringBuilder key = new StringBuilder();
StringBuilder value = new StringBuilder(); StringBuilder value = new StringBuilder();
@ -262,8 +270,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp
} }
if (c == -1) if (c == -1)
AddRawKeyValue(key, value); AddRawKeyValue(key, value);
}
EndSubStream(input);
} }
} }
} }

@ -465,10 +465,6 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp
return stream; return stream;
} }
static void EndSubStream(Stream stream)
{
}
public static string GetHandlerPathIfAny(string listenerUrl) public static string GetHandlerPathIfAny(string listenerUrl)
{ {
if (listenerUrl == null) return null; if (listenerUrl == null) return null;

@ -73,8 +73,8 @@
<HintPath>..\packages\SimpleInjector.3.2.0\lib\net45\SimpleInjector.dll</HintPath> <HintPath>..\packages\SimpleInjector.3.2.0\lib\net45\SimpleInjector.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="SocketHttpListener, Version=1.0.6039.31236, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="SocketHttpListener, Version=1.0.6046.26351, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\SocketHttpListener.1.0.0.33\lib\net45\SocketHttpListener.dll</HintPath> <HintPath>..\packages\SocketHttpListener.1.0.0.35\lib\net45\SocketHttpListener.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />

@ -9,5 +9,5 @@
<package id="morelinq" version="1.4.0" targetFramework="net45" /> <package id="morelinq" version="1.4.0" targetFramework="net45" />
<package id="Patterns.Logging" version="1.0.0.2" targetFramework="net45" /> <package id="Patterns.Logging" version="1.0.0.2" targetFramework="net45" />
<package id="SimpleInjector" version="3.2.0" targetFramework="net45" /> <package id="SimpleInjector" version="3.2.0" targetFramework="net45" />
<package id="SocketHttpListener" version="1.0.0.33" targetFramework="net45" /> <package id="SocketHttpListener" version="1.0.0.35" targetFramework="net45" />
</packages> </packages>
Loading…
Cancel
Save