mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-09-07 20:08:59 +02:00
commit
af127bcafd
4 changed files with 14 additions and 48 deletions
|
@ -161,10 +161,8 @@ namespace ServiceStack
|
||||||
var responseText = result as string;
|
var responseText = result as string;
|
||||||
if (responseText != null)
|
if (responseText != null)
|
||||||
{
|
{
|
||||||
if (response.ContentType == null || response.ContentType == "text/html")
|
|
||||||
response.ContentType = defaultContentType;
|
|
||||||
|
|
||||||
var bytes = Encoding.UTF8.GetBytes(responseText);
|
var bytes = Encoding.UTF8.GetBytes(responseText);
|
||||||
|
response.SetContentLength(bytes.Length);
|
||||||
await response.OutputStream.WriteAsync(bytes, 0, bytes.Length).ConfigureAwait(false);
|
await response.OutputStream.WriteAsync(bytes, 0, bytes.Length).ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -204,12 +204,12 @@ namespace SocketHttpListener.Net
|
||||||
return i_stream;
|
return i_stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Stream GetResponseStream(HttpListenerRequest request)
|
public Stream GetResponseStream(bool isExpect100Continue = false)
|
||||||
{
|
{
|
||||||
// TODO: can we get this stream before reading the input?
|
// TODO: can we get this stream before reading the input?
|
||||||
if (o_stream == null)
|
if (o_stream == null)
|
||||||
{
|
{
|
||||||
if (context.Response.SendChunked || request == null || request.HasExpect100Continue)
|
if (context.Response.SendChunked || isExpect100Continue || context.Response.ContentLength64 <= 0)
|
||||||
{
|
{
|
||||||
o_stream = new ResponseStream(stream, context.Response, _memoryStreamFactory, _textEncoding);
|
o_stream = new ResponseStream(stream, context.Response, _memoryStreamFactory, _textEncoding);
|
||||||
}
|
}
|
||||||
|
@ -438,7 +438,9 @@ namespace SocketHttpListener.Net
|
||||||
str = String.Format("<h1>{0}</h1>", description);
|
str = String.Format("<h1>{0}</h1>", description);
|
||||||
|
|
||||||
byte[] error = context.Response.ContentEncoding.GetBytes(str);
|
byte[] error = context.Response.ContentEncoding.GetBytes(str);
|
||||||
response.Close(error, false);
|
response.ContentLength64 = error.Length;
|
||||||
|
response.OutputStream.Write(error, 0, (int)error.Length);
|
||||||
|
response.Close();
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
@ -490,9 +492,11 @@ namespace SocketHttpListener.Net
|
||||||
{
|
{
|
||||||
if (!context.Request.IsWebSocketRequest || force_close)
|
if (!context.Request.IsWebSocketRequest || force_close)
|
||||||
{
|
{
|
||||||
Stream st = GetResponseStream(context.Request);
|
Stream st = GetResponseStream();
|
||||||
if (st != null)
|
if (st != null)
|
||||||
|
{
|
||||||
st.Dispose();
|
st.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
o_stream = null;
|
o_stream = null;
|
||||||
}
|
}
|
||||||
|
@ -514,16 +518,6 @@ namespace SocketHttpListener.Net
|
||||||
|
|
||||||
if (!force_close && context.Request.FlushInput())
|
if (!force_close && context.Request.FlushInput())
|
||||||
{
|
{
|
||||||
if (chunked && context.Response.ForceCloseChunked == false)
|
|
||||||
{
|
|
||||||
// Don't close. Keep working.
|
|
||||||
reuses++;
|
|
||||||
Unbind();
|
|
||||||
Init();
|
|
||||||
BeginReadRequest();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
reuses++;
|
reuses++;
|
||||||
Unbind();
|
Unbind();
|
||||||
Init();
|
Init();
|
||||||
|
|
|
@ -179,9 +179,9 @@ namespace SocketHttpListener.Net
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HasExpect100Continue)
|
if (String.Compare(Headers["Expect"], "100-continue", StringComparison.OrdinalIgnoreCase) == 0)
|
||||||
{
|
{
|
||||||
var output = (ResponseStream)context.Connection.GetResponseStream(this);
|
var output = (ResponseStream)context.Connection.GetResponseStream(true);
|
||||||
|
|
||||||
var _100continue = _textEncoding.GetASCIIEncoding().GetBytes("HTTP/1.1 100 Continue\r\n\r\n");
|
var _100continue = _textEncoding.GetASCIIEncoding().GetBytes("HTTP/1.1 100 Continue\r\n\r\n");
|
||||||
|
|
||||||
|
@ -189,11 +189,6 @@ namespace SocketHttpListener.Net
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool HasExpect100Continue
|
|
||||||
{
|
|
||||||
get { return String.Compare(Headers["Expect"], "100-continue", StringComparison.OrdinalIgnoreCase) == 0; }
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool MaybeUri(string s)
|
static bool MaybeUri(string s)
|
||||||
{
|
{
|
||||||
int p = s.IndexOf(':');
|
int p = s.IndexOf(':');
|
||||||
|
|
|
@ -30,8 +30,6 @@ namespace SocketHttpListener.Net
|
||||||
internal bool HeadersSent;
|
internal bool HeadersSent;
|
||||||
internal object headers_lock = new object();
|
internal object headers_lock = new object();
|
||||||
|
|
||||||
bool force_close_chunked;
|
|
||||||
|
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
private readonly ITextEncoding _textEncoding;
|
private readonly ITextEncoding _textEncoding;
|
||||||
|
|
||||||
|
@ -50,11 +48,6 @@ namespace SocketHttpListener.Net
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal bool ForceCloseChunked
|
|
||||||
{
|
|
||||||
get { return force_close_chunked; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public Encoding ContentEncoding
|
public Encoding ContentEncoding
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
@ -149,7 +142,7 @@ namespace SocketHttpListener.Net
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (output_stream == null)
|
if (output_stream == null)
|
||||||
output_stream = context.Connection.GetResponseStream(context.Request);
|
output_stream = context.Connection.GetResponseStream();
|
||||||
return output_stream;
|
return output_stream;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -327,7 +320,7 @@ namespace SocketHttpListener.Net
|
||||||
headers.Add(name, value);
|
headers.Add(name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Close(bool force)
|
private void Close(bool force)
|
||||||
{
|
{
|
||||||
if (force)
|
if (force)
|
||||||
{
|
{
|
||||||
|
@ -345,20 +338,6 @@ namespace SocketHttpListener.Net
|
||||||
Close(false);
|
Close(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Close(byte[] responseEntity, bool willBlock)
|
|
||||||
{
|
|
||||||
if (disposed)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (responseEntity == null)
|
|
||||||
throw new ArgumentNullException("responseEntity");
|
|
||||||
|
|
||||||
//TODO: if willBlock -> BeginWrite + Close ?
|
|
||||||
ContentLength64 = responseEntity.Length;
|
|
||||||
OutputStream.Write(responseEntity, 0, (int)content_length);
|
|
||||||
Close(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Redirect(string url)
|
public void Redirect(string url)
|
||||||
{
|
{
|
||||||
StatusCode = 302; // Found
|
StatusCode = 302; // Found
|
||||||
|
@ -489,7 +468,7 @@ namespace SocketHttpListener.Net
|
||||||
|
|
||||||
int preamble = encoding.GetPreamble().Length;
|
int preamble = encoding.GetPreamble().Length;
|
||||||
if (output_stream == null)
|
if (output_stream == null)
|
||||||
output_stream = context.Connection.GetResponseStream(context.Request);
|
output_stream = context.Connection.GetResponseStream();
|
||||||
|
|
||||||
/* Assumes that the ms was at position 0 */
|
/* Assumes that the ms was at position 0 */
|
||||||
ms.Position = preamble;
|
ms.Position = preamble;
|
||||||
|
|
Loading…
Reference in a new issue