@@ -127,6 +127,13 @@ private ValueTask<int> ReadBytesAsync(Memory<byte> buffer, ProtocolErrorBehavior
127
127
}
128
128
else
129
129
{
130
+ #if NET6_0_OR_GREATER
131
+ var uncompressedData = new byte [ uncompressedLength ] ;
132
+ using var compressedStream = new MemoryStream ( payloadReadBytes . Array ! , payloadReadBytes . Offset , payloadReadBytes . Count ) ;
133
+ using var decompressingStream = new ZLibStream ( compressedStream , CompressionMode . Decompress ) ;
134
+ var bytesRead = decompressingStream . Read ( uncompressedData , 0 , uncompressedLength ) ;
135
+ m_remainingData = new ( uncompressedData , 0 , bytesRead ) ;
136
+ #else
130
137
// check CMF (Compression Method and Flags) and FLG (Flags) bytes for expected values
131
138
var cmf = payloadReadBytes . Array ! [ payloadReadBytes . Offset ] ;
132
139
var flg = payloadReadBytes . Array [ payloadReadBytes . Offset + 1 ] ;
@@ -162,6 +169,7 @@ private ValueTask<int> ReadBytesAsync(Memory<byte> buffer, ProtocolErrorBehavior
162
169
default :
163
170
ValueTaskExtensions . FromException < int > ( new NotSupportedException ( "Invalid Adler-32 checksum of uncompressed data." ) ) ;
164
171
}
172
+ #endif
165
173
}
166
174
167
175
var bytesToRead = Math . Min ( m_remainingData . Count , buffer . Length ) ;
@@ -186,6 +194,10 @@ private ValueTask<int> CompressAndWrite(ArraySegment<byte> remainingUncompressed
186
194
{
187
195
using var compressedStream = new MemoryStream ( ) ;
188
196
197
+ #if NET6_0_OR_GREATER
198
+ using ( var zlibStream = new ZLibStream ( compressedStream , CompressionLevel . Optimal , leaveOpen : true ) )
199
+ zlibStream . Write ( remainingUncompressedData . Array ! , remainingUncompressedData . Offset , remainingUncompressedBytes ) ;
200
+ #else
189
201
// write CMF: 32K window + deflate algorithm
190
202
compressedStream . WriteByte ( 0x78 ) ;
191
203
@@ -200,6 +212,7 @@ private ValueTask<int> CompressAndWrite(ArraySegment<byte> remainingUncompressed
200
212
compressedStream . WriteByte ( ( byte ) ( ( checksum >> 16 ) & 0xFF ) ) ;
201
213
compressedStream . WriteByte ( ( byte ) ( ( checksum >> 8 ) & 0xFF ) ) ;
202
214
compressedStream . WriteByte ( ( byte ) ( checksum & 0xFF ) ) ;
215
+ #endif
203
216
204
217
if ( ! compressedStream . TryGetBuffer ( out compressedData ) )
205
218
throw new InvalidOperationException ( "Couldn't get compressed stream buffer." ) ;
0 commit comments