10
10
using Titanium . Web . Proxy . Http . Responses ;
11
11
using Titanium . Web . Proxy . Models ;
12
12
using Titanium . Web . Proxy . Network ;
13
+ using Titanium . Web . Proxy . Network . Tcp ;
13
14
using Titanium . Web . Proxy . StreamExtended . Network ;
14
15
15
16
namespace Titanium . Web . Proxy . EventArguments
@@ -35,8 +36,8 @@ public class SessionEventArgs : SessionEventArgsBase
35
36
/// <summary>
36
37
/// Constructor to initialize the proxy
37
38
/// </summary>
38
- internal SessionEventArgs ( ProxyServer server , ProxyEndPoint endPoint , ProxyClient proxyClient , ConnectRequest ? connectRequest , CancellationTokenSource cancellationTokenSource )
39
- : base ( server , endPoint , proxyClient , connectRequest , new Request ( ) , cancellationTokenSource )
39
+ internal SessionEventArgs ( ProxyServer server , ProxyEndPoint endPoint , TcpClientConnection clientConnection , HttpClientStream clientStream , ConnectRequest ? connectRequest , CancellationTokenSource cancellationTokenSource )
40
+ : base ( server , endPoint , clientConnection , clientStream , connectRequest , new Request ( ) , cancellationTokenSource )
40
41
{
41
42
}
42
43
@@ -64,14 +65,9 @@ public bool ReRequest
64
65
/// </summary>
65
66
public event EventHandler < MultipartRequestPartSentEventArgs > ? MultipartRequestPartSent ;
66
67
67
- private CustomBufferedStream getStreamReader ( bool isRequest )
68
+ private HttpStream getStream ( bool isRequest )
68
69
{
69
- return isRequest ? ProxyClient . ClientStream : HttpClient . Connection . Stream ;
70
- }
71
-
72
- private HttpWriter getStreamWriter ( bool isRequest )
73
- {
74
- return isRequest ? ( HttpWriter ) ProxyClient . ClientStreamWriter : HttpClient . Connection . StreamWriter ;
70
+ return isRequest ? ( HttpStream ) ClientStream : HttpClient . Connection . Stream ;
75
71
}
76
72
77
73
/// <summary>
@@ -197,21 +193,19 @@ private async Task readResponseBodyAsync(CancellationToken cancellationToken)
197
193
198
194
private async Task < byte [ ] > readBodyAsync ( bool isRequest , CancellationToken cancellationToken )
199
195
{
200
- using ( var bodyStream = new MemoryStream ( ) )
201
- {
202
- var writer = new HttpWriter ( bodyStream , BufferPool ) ;
203
-
204
- if ( isRequest )
205
- {
206
- await CopyRequestBodyAsync ( writer , TransformationMode . Uncompress , cancellationToken ) ;
207
- }
208
- else
209
- {
210
- await CopyResponseBodyAsync ( writer , TransformationMode . Uncompress , cancellationToken ) ;
211
- }
196
+ using var bodyStream = new MemoryStream ( ) ;
197
+ using var http = new HttpStream ( bodyStream , BufferPool ) ;
212
198
213
- return bodyStream . ToArray ( ) ;
199
+ if ( isRequest )
200
+ {
201
+ await CopyRequestBodyAsync ( http , TransformationMode . Uncompress , cancellationToken ) ;
214
202
}
203
+ else
204
+ {
205
+ await CopyResponseBodyAsync ( http , TransformationMode . Uncompress , cancellationToken ) ;
206
+ }
207
+
208
+ return bodyStream . ToArray ( ) ;
215
209
}
216
210
217
211
/// <summary>
@@ -229,18 +223,16 @@ internal async Task SyphonOutBodyAsync(bool isRequest, CancellationToken cancell
229
223
return ;
230
224
}
231
225
232
- using ( var bodyStream = new MemoryStream ( ) )
233
- {
234
- var writer = new HttpWriter ( bodyStream , BufferPool ) ;
235
- await copyBodyAsync ( isRequest , true , writer , TransformationMode . None , null , cancellationToken ) ;
236
- }
226
+ using var bodyStream = new MemoryStream ( ) ;
227
+ using var http = new HttpStream ( bodyStream , BufferPool ) ;
228
+ await copyBodyAsync ( isRequest , true , http , TransformationMode . None , null , cancellationToken ) ;
237
229
}
238
230
239
231
/// <summary>
240
232
/// This is called when the request is PUT/POST/PATCH to read the body
241
233
/// </summary>
242
234
/// <returns></returns>
243
- internal async Task CopyRequestBodyAsync ( HttpWriter writer , TransformationMode transformation , CancellationToken cancellationToken )
235
+ internal async Task CopyRequestBodyAsync ( IHttpStreamWriter writer , TransformationMode transformation , CancellationToken cancellationToken )
244
236
{
245
237
var request = HttpClient . Request ;
246
238
@@ -249,7 +241,7 @@ internal async Task CopyRequestBodyAsync(HttpWriter writer, TransformationMode t
249
241
// send the request body bytes to server
250
242
if ( contentLength > 0 && hasMulipartEventSubscribers && request . IsMultipartFormData )
251
243
{
252
- var reader = getStreamReader ( true ) ;
244
+ var reader = getStream ( true ) ;
253
245
var boundary = HttpHelper . GetBoundaryFromContentType ( request . ContentType ) ;
254
246
255
247
using ( var copyStream = new CopyStream ( reader , writer , BufferPool ) )
@@ -279,14 +271,14 @@ internal async Task CopyRequestBodyAsync(HttpWriter writer, TransformationMode t
279
271
}
280
272
}
281
273
282
- internal async Task CopyResponseBodyAsync ( HttpWriter writer , TransformationMode transformation , CancellationToken cancellationToken )
274
+ internal async Task CopyResponseBodyAsync ( IHttpStreamWriter writer , TransformationMode transformation , CancellationToken cancellationToken )
283
275
{
284
276
await copyBodyAsync ( false , false , writer , transformation , OnDataReceived , cancellationToken ) ;
285
277
}
286
278
287
- private async Task copyBodyAsync ( bool isRequest , bool useOriginalHeaderValues , HttpWriter writer , TransformationMode transformation , Action < byte [ ] , int , int > ? onCopy , CancellationToken cancellationToken )
279
+ private async Task copyBodyAsync ( bool isRequest , bool useOriginalHeaderValues , IHttpStreamWriter writer , TransformationMode transformation , Action < byte [ ] , int , int > ? onCopy , CancellationToken cancellationToken )
288
280
{
289
- var stream = getStreamReader ( isRequest ) ;
281
+ var stream = getStream ( isRequest ) ;
290
282
291
283
var requestResponse = isRequest ? ( RequestResponseBase ) HttpClient . Request : HttpClient . Response ;
292
284
@@ -313,10 +305,8 @@ private async Task copyBodyAsync(bool isRequest, bool useOriginalHeaderValues, H
313
305
314
306
try
315
307
{
316
- using ( var bufStream = new CustomBufferedStream ( s , BufferPool , true ) )
317
- {
318
- await writer . CopyBodyAsync ( bufStream , false , - 1 , onCopy , cancellationToken ) ;
319
- }
308
+ var http = new HttpStream ( s , BufferPool , true ) ;
309
+ await writer . CopyBodyAsync ( http , false , - 1 , onCopy , cancellationToken ) ;
320
310
}
321
311
finally
322
312
{
0 commit comments