|
@@ -49,20 +49,24 @@ namespace Emby.Dlna.PlayTo
|
|
|
|
|
|
private async Task<XDocument?> SendRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken)
|
|
|
{
|
|
|
- using var response = await _httpClientFactory.CreateClient(NamedClient.Dlna).SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);
|
|
|
+ var client = _httpClientFactory.CreateClient(NamedClient.Dlna);
|
|
|
+ using var response = await client.SendAsync(request, cancellationToken).ConfigureAwait(false);
|
|
|
response.EnsureSuccessStatusCode();
|
|
|
- await using var stream = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);
|
|
|
+ await using MemoryStream ms = new MemoryStream();
|
|
|
+ await response.Content.CopyToAsync(ms, cancellationToken).ConfigureAwait(false);
|
|
|
try
|
|
|
{
|
|
|
return await XDocument.LoadAsync(
|
|
|
- stream,
|
|
|
+ ms,
|
|
|
LoadOptions.None,
|
|
|
cancellationToken).ConfigureAwait(false);
|
|
|
}
|
|
|
catch (XmlException)
|
|
|
{
|
|
|
// try correcting the Xml response with common errors
|
|
|
- var xmlString = await response.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false);
|
|
|
+ ms.Position = 0;
|
|
|
+ using StreamReader sr = new StreamReader(ms);
|
|
|
+ var xmlString = await sr.ReadToEndAsync(cancellationToken).ConfigureAwait(false);
|
|
|
|
|
|
// find and replace unescaped ampersands (&)
|
|
|
xmlString = EscapeAmpersandRegex().Replace(xmlString, "&");
|
|
@@ -70,7 +74,7 @@ namespace Emby.Dlna.PlayTo
|
|
|
try
|
|
|
{
|
|
|
// retry reading Xml
|
|
|
- var xmlReader = new StringReader(xmlString);
|
|
|
+ using var xmlReader = new StringReader(xmlString);
|
|
|
return await XDocument.LoadAsync(
|
|
|
xmlReader,
|
|
|
LoadOptions.None,
|