@@ -85,6 +85,11 @@ private async Task readRequestBodyAsync(CancellationToken cancellationToken)
85
85
// If not already read (not cached yet)
86
86
if ( ! request . IsBodyRead )
87
87
{
88
+ if ( request . IsBodyReceived )
89
+ {
90
+ throw new Exception ( "Request body was already received." ) ;
91
+ }
92
+
88
93
if ( request . HttpVersion == HttpHeader . Version20 )
89
94
{
90
95
// do not send to the remote endpoint
@@ -103,6 +108,7 @@ private async Task readRequestBodyAsync(CancellationToken cancellationToken)
103
108
// Now set the flag to true
104
109
// So that next time we can deliver body from cache
105
110
request . IsBodyRead = true ;
111
+ request . IsBodyReceived = true ;
106
112
}
107
113
else
108
114
{
@@ -115,6 +121,7 @@ private async Task readRequestBodyAsync(CancellationToken cancellationToken)
115
121
// Now set the flag to true
116
122
// So that next time we can deliver body from cache
117
123
request . IsBodyRead = true ;
124
+ request . IsBodyReceived = true ;
118
125
}
119
126
}
120
127
}
@@ -160,6 +167,11 @@ private async Task readResponseBodyAsync(CancellationToken cancellationToken)
160
167
// If not already read (not cached yet)
161
168
if ( ! response . IsBodyRead )
162
169
{
170
+ if ( response . IsBodyReceived )
171
+ {
172
+ throw new Exception ( "Response body was already received." ) ;
173
+ }
174
+
163
175
if ( response . HttpVersion == HttpHeader . Version20 )
164
176
{
165
177
// do not send to the remote endpoint
@@ -178,6 +190,7 @@ private async Task readResponseBodyAsync(CancellationToken cancellationToken)
178
190
// Now set the flag to true
179
191
// So that next time we can deliver body from cache
180
192
response . IsBodyRead = true ;
193
+ response . IsBodyReceived = true ;
181
194
}
182
195
else
183
196
{
@@ -190,6 +203,7 @@ private async Task readResponseBodyAsync(CancellationToken cancellationToken)
190
203
// Now set the flag to true
191
204
// So that next time we can deliver body from cache
192
205
response . IsBodyRead = true ;
206
+ response . IsBodyReceived = true ;
193
207
}
194
208
}
195
209
}
@@ -221,14 +235,15 @@ private async Task<byte[]> readBodyAsync(bool isRequest, CancellationToken cance
221
235
internal async Task SyphonOutBodyAsync ( bool isRequest , CancellationToken cancellationToken )
222
236
{
223
237
var requestResponse = isRequest ? ( RequestResponseBase ) HttpClient . Request : HttpClient . Response ;
224
- if ( requestResponse . IsBodyRead || ! requestResponse . OriginalHasBody )
238
+ if ( requestResponse . IsBodyReceived || ! requestResponse . OriginalHasBody )
225
239
{
226
240
return ;
227
241
}
228
242
229
243
var reader = isRequest ? ( HttpStream ) ClientStream : HttpClient . Connection . Stream ;
230
244
231
245
await reader . CopyBodyAsync ( requestResponse , true , NullWriter . Instance , TransformationMode . None , isRequest , this , cancellationToken ) ;
246
+ requestResponse . IsBodyReceived = true ;
232
247
}
233
248
234
249
/// <summary>
@@ -272,11 +287,15 @@ internal async Task CopyRequestBodyAsync(IHttpStreamWriter writer, Transformatio
272
287
{
273
288
await reader . CopyBodyAsync ( request , false , writer , transformation , true , this , cancellationToken ) ;
274
289
}
290
+
291
+ request . IsBodyReceived = true ;
275
292
}
276
293
277
294
private async Task copyResponseBodyAsync ( IHttpStreamWriter writer , TransformationMode transformation , CancellationToken cancellationToken )
278
295
{
279
- await HttpClient . Connection . Stream . CopyBodyAsync ( HttpClient . Response , false , writer , transformation , false , this , cancellationToken ) ;
296
+ var response = HttpClient . Response ;
297
+ await HttpClient . Connection . Stream . CopyBodyAsync ( response , false , writer , transformation , false , this , cancellationToken ) ;
298
+ response . IsBodyReceived = true ;
280
299
}
281
300
282
301
/// <summary>
0 commit comments