Commit 222f2776 authored by justcoding121's avatar justcoding121

#425 add client/server connection create events

parent 07557b15
...@@ -61,6 +61,13 @@ namespace Titanium.Web.Proxy.Network.Tcp ...@@ -61,6 +61,13 @@ namespace Titanium.Web.Proxy.Network.Tcp
{ {
tcpClient = new TcpClient(upStreamEndPoint); tcpClient = new TcpClient(upStreamEndPoint);
tcpClient.ReceiveTimeout = proxyServer.ConnectionTimeOutSeconds * 1000;
tcpClient.SendTimeout = proxyServer.ConnectionTimeOutSeconds * 1000;
tcpClient.SendBufferSize = proxyServer.BufferSize;
tcpClient.ReceiveBufferSize = proxyServer.BufferSize;
await proxyServer.InvokeConnectionCreateEvent(tcpClient, false);
// If this proxy uses another external proxy then create a tunnel request for HTTP/HTTPS connections // If this proxy uses another external proxy then create a tunnel request for HTTP/HTTPS connections
if (useUpstreamProxy) if (useUpstreamProxy)
{ {
...@@ -124,8 +131,6 @@ namespace Titanium.Web.Proxy.Network.Tcp ...@@ -124,8 +131,6 @@ namespace Titanium.Web.Proxy.Network.Tcp
#endif #endif
} }
tcpClient.ReceiveTimeout = proxyServer.ConnectionTimeOutSeconds * 1000;
tcpClient.SendTimeout = proxyServer.ConnectionTimeOutSeconds * 1000;
} }
catch (Exception) catch (Exception)
{ {
......
...@@ -279,6 +279,16 @@ namespace Titanium.Web.Proxy ...@@ -279,6 +279,16 @@ namespace Titanium.Web.Proxy
/// </summary> /// </summary>
public event AsyncEventHandler<SessionEventArgs> AfterResponse; public event AsyncEventHandler<SessionEventArgs> AfterResponse;
/// <summary>
/// Customize TcpClient used for client connection upon create.
/// </summary>
public event AsyncEventHandler<TcpClient> OnClientConnectionCreate;
/// <summary>
/// Customize TcpClient used for server connection upon create.
/// </summary>
public event AsyncEventHandler<TcpClient> OnServerConnectionCreate;
/// <summary> /// <summary>
/// Add a proxy end point. /// Add a proxy end point.
/// </summary> /// </summary>
...@@ -654,6 +664,10 @@ namespace Titanium.Web.Proxy ...@@ -654,6 +664,10 @@ namespace Titanium.Web.Proxy
{ {
tcpClient.ReceiveTimeout = ConnectionTimeOutSeconds * 1000; tcpClient.ReceiveTimeout = ConnectionTimeOutSeconds * 1000;
tcpClient.SendTimeout = ConnectionTimeOutSeconds * 1000; tcpClient.SendTimeout = ConnectionTimeOutSeconds * 1000;
tcpClient.SendBufferSize = BufferSize;
tcpClient.ReceiveBufferSize = BufferSize;
await InvokeConnectionCreateEvent(tcpClient, true);
using (var clientConnection = new TcpClientConnection(this, tcpClient)) using (var clientConnection = new TcpClientConnection(this, tcpClient))
{ {
...@@ -729,5 +743,26 @@ namespace Titanium.Web.Proxy ...@@ -729,5 +743,26 @@ namespace Titanium.Web.Proxy
ServerConnectionCountChanged?.Invoke(this, EventArgs.Empty); ServerConnectionCountChanged?.Invoke(this, EventArgs.Empty);
} }
/// <summary>
/// Invoke client/server tcp connection events if subscribed by API user.
/// </summary>
/// <param name="client">The TcpClient object.</param>
/// <param name="isClientConnection">Is this a client connection created event? If not then we would assume that its a server connection create event.</param>
/// <returns></returns>
internal async Task InvokeConnectionCreateEvent(TcpClient client, bool isClientConnection)
{
//client connection created
if (isClientConnection && OnClientConnectionCreate != null)
{
await OnClientConnectionCreate.InvokeAsync(this, client, ExceptionFunc);
}
//server connection created
if (!isClientConnection && OnServerConnectionCreate != null)
{
await OnServerConnectionCreate.InvokeAsync(this, client, ExceptionFunc);
}
}
} }
} }
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