aboutsummaryrefslogtreecommitdiff
path: root/SocketHttpListener.Portable
diff options
context:
space:
mode:
Diffstat (limited to 'SocketHttpListener.Portable')
-rw-r--r--SocketHttpListener.Portable/Net/HttpConnection.cs6
-rw-r--r--SocketHttpListener.Portable/Net/HttpListenerRequest.cs13
-rw-r--r--SocketHttpListener.Portable/Net/HttpListenerResponse.cs4
3 files changed, 14 insertions, 9 deletions
diff --git a/SocketHttpListener.Portable/Net/HttpConnection.cs b/SocketHttpListener.Portable/Net/HttpConnection.cs
index 8e472117e..67dd5c958 100644
--- a/SocketHttpListener.Portable/Net/HttpConnection.cs
+++ b/SocketHttpListener.Portable/Net/HttpConnection.cs
@@ -204,12 +204,12 @@ namespace SocketHttpListener.Net
return i_stream;
}
- public Stream GetResponseStream()
+ public Stream GetResponseStream(HttpListenerRequest request)
{
// TODO: can we get this stream before reading the input?
if (o_stream == null)
{
- if (context.Response.SendChunked)
+ if (context.Response.SendChunked || request == null || request.HasExpect100Continue)
{
o_stream = new ResponseStream(stream, context.Response, _memoryStreamFactory, _textEncoding);
}
@@ -490,7 +490,7 @@ namespace SocketHttpListener.Net
{
if (!context.Request.IsWebSocketRequest || force_close)
{
- Stream st = GetResponseStream();
+ Stream st = GetResponseStream(context.Request);
if (st != null)
st.Dispose();
diff --git a/SocketHttpListener.Portable/Net/HttpListenerRequest.cs b/SocketHttpListener.Portable/Net/HttpListenerRequest.cs
index 5631fc0a1..767f1c542 100644
--- a/SocketHttpListener.Portable/Net/HttpListenerRequest.cs
+++ b/SocketHttpListener.Portable/Net/HttpListenerRequest.cs
@@ -179,16 +179,21 @@ namespace SocketHttpListener.Net
}
}
- if (String.Compare(Headers["Expect"], "100-continue", StringComparison.OrdinalIgnoreCase) == 0)
+ if (HasExpect100Continue)
{
- var output = context.Connection.GetResponseStream();
-
+ var output = (ResponseStream)context.Connection.GetResponseStream(this);
+
var _100continue = _textEncoding.GetASCIIEncoding().GetBytes("HTTP/1.1 100 Continue\r\n\r\n");
- //output.InternalWrite(_100continue, 0, _100continue.Length);
+ output.InternalWrite(_100continue, 0, _100continue.Length);
}
}
+ public bool HasExpect100Continue
+ {
+ get { return String.Compare(Headers["Expect"], "100-continue", StringComparison.OrdinalIgnoreCase) == 0; }
+ }
+
static bool MaybeUri(string s)
{
int p = s.IndexOf(':');
diff --git a/SocketHttpListener.Portable/Net/HttpListenerResponse.cs b/SocketHttpListener.Portable/Net/HttpListenerResponse.cs
index 93358cae4..8c610d725 100644
--- a/SocketHttpListener.Portable/Net/HttpListenerResponse.cs
+++ b/SocketHttpListener.Portable/Net/HttpListenerResponse.cs
@@ -149,7 +149,7 @@ namespace SocketHttpListener.Net
get
{
if (output_stream == null)
- output_stream = context.Connection.GetResponseStream();
+ output_stream = context.Connection.GetResponseStream(context.Request);
return output_stream;
}
}
@@ -489,7 +489,7 @@ namespace SocketHttpListener.Net
int preamble = encoding.GetPreamble().Length;
if (output_stream == null)
- output_stream = context.Connection.GetResponseStream();
+ output_stream = context.Connection.GetResponseStream(context.Request);
/* Assumes that the ms was at position 0 */
ms.Position = preamble;