1010using Titanium . Web . Proxy . Http . Responses ;
1111using Titanium . Web . Proxy . Models ;
1212using Titanium . Web . Proxy . Network ;
13+ using Titanium . Web . Proxy . Network . Tcp ;
1314using Titanium . Web . Proxy . StreamExtended . Network ;
1415
1516namespace Titanium . Web . Proxy . EventArguments
@@ -35,8 +36,8 @@ public class SessionEventArgs : SessionEventArgsBase
3536 /// <summary>
3637 /// Constructor to initialize the proxy
3738 /// </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 )
4041 {
4142 }
4243
@@ -64,14 +65,9 @@ public bool ReRequest
6465 /// </summary>
6566 public event EventHandler < MultipartRequestPartSentEventArgs > ? MultipartRequestPartSent ;
6667
67- private CustomBufferedStream getStreamReader ( bool isRequest )
68+ private HttpStream getStream ( bool isRequest )
6869 {
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 ;
7571 }
7672
7773 /// <summary>
@@ -197,21 +193,19 @@ private async Task readResponseBodyAsync(CancellationToken cancellationToken)
197193
198194 private async Task < byte [ ] > readBodyAsync ( bool isRequest , CancellationToken cancellationToken )
199195 {
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 ) ;
212198
213- return bodyStream . ToArray ( ) ;
199+ if ( isRequest )
200+ {
201+ await CopyRequestBodyAsync ( http , TransformationMode . Uncompress , cancellationToken ) ;
214202 }
203+ else
204+ {
205+ await CopyResponseBodyAsync ( http , TransformationMode . Uncompress , cancellationToken ) ;
206+ }
207+
208+ return bodyStream . ToArray ( ) ;
215209 }
216210
217211 /// <summary>
@@ -229,18 +223,16 @@ internal async Task SyphonOutBodyAsync(bool isRequest, CancellationToken cancell
229223 return ;
230224 }
231225
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 ) ;
237229 }
238230
239231 /// <summary>
240232 /// This is called when the request is PUT/POST/PATCH to read the body
241233 /// </summary>
242234 /// <returns></returns>
243- internal async Task CopyRequestBodyAsync ( HttpWriter writer , TransformationMode transformation , CancellationToken cancellationToken )
235+ internal async Task CopyRequestBodyAsync ( IHttpStreamWriter writer , TransformationMode transformation , CancellationToken cancellationToken )
244236 {
245237 var request = HttpClient . Request ;
246238
@@ -249,7 +241,7 @@ internal async Task CopyRequestBodyAsync(HttpWriter writer, TransformationMode t
249241 // send the request body bytes to server
250242 if ( contentLength > 0 && hasMulipartEventSubscribers && request . IsMultipartFormData )
251243 {
252- var reader = getStreamReader ( true ) ;
244+ var reader = getStream ( true ) ;
253245 var boundary = HttpHelper . GetBoundaryFromContentType ( request . ContentType ) ;
254246
255247 using ( var copyStream = new CopyStream ( reader , writer , BufferPool ) )
@@ -279,14 +271,14 @@ internal async Task CopyRequestBodyAsync(HttpWriter writer, TransformationMode t
279271 }
280272 }
281273
282- internal async Task CopyResponseBodyAsync ( HttpWriter writer , TransformationMode transformation , CancellationToken cancellationToken )
274+ internal async Task CopyResponseBodyAsync ( IHttpStreamWriter writer , TransformationMode transformation , CancellationToken cancellationToken )
283275 {
284276 await copyBodyAsync ( false , false , writer , transformation , OnDataReceived , cancellationToken ) ;
285277 }
286278
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 )
288280 {
289- var stream = getStreamReader ( isRequest ) ;
281+ var stream = getStream ( isRequest ) ;
290282
291283 var requestResponse = isRequest ? ( RequestResponseBase ) HttpClient . Request : HttpClient . Response ;
292284
@@ -313,10 +305,8 @@ private async Task copyBodyAsync(bool isRequest, bool useOriginalHeaderValues, H
313305
314306 try
315307 {
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 ) ;
320310 }
321311 finally
322312 {
0 commit comments