Skip to content

Commit 8204c81

Browse files
committed
Second potential fix issue #83: Infinite stuck.
1 parent 1956dcb commit 8204c81

File tree

1 file changed

+25
-10
lines changed

1 file changed

+25
-10
lines changed

Leaf.xNet/~Http/HttpResponse.cs

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -978,19 +978,13 @@ private void ParseCookieFromHeader(string headerValue)
978978
#region Загрузка тела сообщения
979979

980980
// ReSharper disable once ReturnTypeCanBeEnumerable.Local
981-
private BytesWrapper[] GetMessageBodySource()
981+
private IEnumerable<BytesWrapper> GetMessageBodySource()
982982
{
983-
bool isNonUtf8ContentEncoding =
984-
_headers.ContainsKey("Content-Encoding") &&
985-
// Yandex oauth fix
986-
!string.Equals(_headers["Content-Encoding"], "utf-8", StringComparison.OrdinalIgnoreCase);
987-
988-
var result = isNonUtf8ContentEncoding
983+
var result = _headers.ContainsKey("Content-Encoding") && _headers["Content-Encoding"].Equals("gzip", StringComparison.OrdinalIgnoreCase)
989984
? GetMessageBodySourceZip()
990985
: GetMessageBodySourceStd();
991-
992-
// It's a fix of response get stuck response issue #83: https://github.com/csharp-leaf/Leaf.xNet/issues/83
993-
return result.ToArray();
986+
987+
return result; // .ToArray(); - it will break Chunked requests.
994988
}
995989

996990
// Загрузка обычных данных.
@@ -1016,7 +1010,27 @@ private IEnumerable<BytesWrapper> GetMessageBodySourceZip()
10161010
return ReceiveMessageBody(GetZipStream(streamWrapper));
10171011
}
10181012

1013+
private static byte[] GetResponse(Stream stream)
1014+
{
1015+
using (var memoryStream = new MemoryStream())
1016+
{
1017+
stream.CopyTo(memoryStream);
1018+
return memoryStream.ToArray();
1019+
}
1020+
}
1021+
10191022
// Загрузка тела сообщения неизвестной длины.
1023+
private static IEnumerable<BytesWrapper> ReceiveMessageBody(Stream stream)
1024+
{
1025+
// It's a fix of response get stuck response issue #83: https://github.com/csharp-leaf/Leaf.xNet/issues/83
1026+
var bytesWrapper = new BytesWrapper();
1027+
var responseBytes = GetResponse(stream);
1028+
bytesWrapper.Value = responseBytes;
1029+
bytesWrapper.Length = responseBytes.Length;
1030+
return new[] { bytesWrapper };
1031+
}
1032+
1033+
/*
10201034
private IEnumerable<BytesWrapper> ReceiveMessageBody(Stream stream)
10211035
{
10221036
var bytesWrapper = new BytesWrapper();
@@ -1087,6 +1101,7 @@ private IEnumerable<BytesWrapper> ReceiveMessageBody(Stream stream)
10871101
yield return bytesWrapper;
10881102
}
10891103
}
1104+
*/
10901105

10911106
// Загрузка тела сообщения известной длины.
10921107
private IEnumerable<BytesWrapper> ReceiveMessageBody(long contentLength)

0 commit comments

Comments
 (0)