Commit 6fc1fd69 authored by Honfika's avatar Honfika

Call OnDataReceived/OnDataSend events when

parent 77831099
...@@ -290,7 +290,7 @@ namespace Titanium.Web.Proxy.EventArguments ...@@ -290,7 +290,7 @@ namespace Titanium.Web.Proxy.EventArguments
} }
else else
{ {
await writer.CopyBodyAsync(reader, request.IsChunked, contentLength, removeChunkedEncoding); await writer.CopyBodyAsync(reader, request.IsChunked, contentLength, removeChunkedEncoding, OnDataSent);
} }
} }
...@@ -299,7 +299,7 @@ namespace Titanium.Web.Proxy.EventArguments ...@@ -299,7 +299,7 @@ namespace Titanium.Web.Proxy.EventArguments
var response = WebSession.Response; var response = WebSession.Response;
var reader = WebSession.ServerConnection.StreamReader; var reader = WebSession.ServerConnection.StreamReader;
await writer.CopyBodyAsync(reader, response.IsChunked, response.ContentLength, removeChunkedEncoding); await writer.CopyBodyAsync(reader, response.IsChunked, response.ContentLength, removeChunkedEncoding, OnDataReceived);
} }
/// <summary> /// <summary>
......
...@@ -153,15 +153,16 @@ namespace Titanium.Web.Proxy.Helpers ...@@ -153,15 +153,16 @@ namespace Titanium.Web.Proxy.Helpers
/// <param name="isChunked"></param> /// <param name="isChunked"></param>
/// <param name="contentLength"></param> /// <param name="contentLength"></param>
/// <param name="removeChunkedEncoding"></param> /// <param name="removeChunkedEncoding"></param>
/// <param name="onCopy"></param>
/// <returns></returns> /// <returns></returns>
internal Task CopyBodyAsync(CustomBinaryReader streamReader, bool isChunked, long contentLength, bool removeChunkedEncoding) internal Task CopyBodyAsync(CustomBinaryReader streamReader, bool isChunked, long contentLength, bool removeChunkedEncoding, Action<byte[], int, int> onCopy)
{ {
//For chunked request we need to read data as they arrive, until we reach a chunk end symbol //For chunked request we need to read data as they arrive, until we reach a chunk end symbol
if (isChunked) if (isChunked)
{ {
//Need to revist, find any potential bugs //Need to revist, find any potential bugs
//send the body bytes to server in chunks //send the body bytes to server in chunks
return CopyBodyChunkedAsync(streamReader, removeChunkedEncoding); return CopyBodyChunkedAsync(streamReader, removeChunkedEncoding, onCopy);
} }
//http 1.0 //http 1.0
...@@ -171,7 +172,7 @@ namespace Titanium.Web.Proxy.Helpers ...@@ -171,7 +172,7 @@ namespace Titanium.Web.Proxy.Helpers
} }
//If not chunked then its easy just read the amount of bytes mentioned in content length header //If not chunked then its easy just read the amount of bytes mentioned in content length header
return CopyBytesFromStream(streamReader, contentLength); return CopyBytesFromStream(streamReader, contentLength, onCopy);
} }
/// <summary> /// <summary>
...@@ -197,8 +198,9 @@ namespace Titanium.Web.Proxy.Helpers ...@@ -197,8 +198,9 @@ namespace Titanium.Web.Proxy.Helpers
/// </summary> /// </summary>
/// <param name="reader"></param> /// <param name="reader"></param>
/// <param name="removeChunkedEncoding"></param> /// <param name="removeChunkedEncoding"></param>
/// <param name="onCopy"></param>
/// <returns></returns> /// <returns></returns>
private async Task CopyBodyChunkedAsync(CustomBinaryReader reader, bool removeChunkedEncoding) private async Task CopyBodyChunkedAsync(CustomBinaryReader reader, bool removeChunkedEncoding, Action<byte[], int, int> onCopy)
{ {
while (true) while (true)
{ {
...@@ -212,7 +214,7 @@ namespace Titanium.Web.Proxy.Helpers ...@@ -212,7 +214,7 @@ namespace Titanium.Web.Proxy.Helpers
if (chunkSize != 0) if (chunkSize != 0)
{ {
await CopyBytesFromStream(reader, chunkSize); await CopyBytesFromStream(reader, chunkSize, onCopy);
} }
if (!removeChunkedEncoding) if (!removeChunkedEncoding)
...@@ -235,8 +237,9 @@ namespace Titanium.Web.Proxy.Helpers ...@@ -235,8 +237,9 @@ namespace Titanium.Web.Proxy.Helpers
/// </summary> /// </summary>
/// <param name="reader"></param> /// <param name="reader"></param>
/// <param name="count"></param> /// <param name="count"></param>
/// <param name="onCopy"></param>
/// <returns></returns> /// <returns></returns>
private async Task CopyBytesFromStream(CustomBinaryReader reader, long count) private async Task CopyBytesFromStream(CustomBinaryReader reader, long count, Action<byte[], int, int> onCopy)
{ {
var buffer = reader.Buffer; var buffer = reader.Buffer;
long remainingBytes = count; long remainingBytes = count;
...@@ -258,6 +261,8 @@ namespace Titanium.Web.Proxy.Helpers ...@@ -258,6 +261,8 @@ namespace Titanium.Web.Proxy.Helpers
remainingBytes -= bytesRead; remainingBytes -= bytesRead;
await WriteAsync(buffer, 0, bytesRead); await WriteAsync(buffer, 0, bytesRead);
onCopy?.Invoke(buffer, 0, bytesRead);
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment