Class ProxyServer
This class is the backbone of proxy. One can create as many instances as needed. However care should be taken to avoid using the same listening ports across multiple instances.
Implements
Inherited Members
Namespace: Titanium.Web.Proxy
Assembly: Titanium.Web.Proxy.dll
Syntax
public class ProxyServer : IDisposable
Constructors
| Improve this Doc View SourceProxyServer(Boolean, Boolean, Boolean)
Initializes a new instance of ProxyServer class with provided parameters.
Declaration
public ProxyServer(bool userTrustRootCertificate = true, bool machineTrustRootCertificate = false, bool trustRootCertificateAsAdmin = false)
Parameters
Type | Name | Description |
---|---|---|
Boolean | userTrustRootCertificate | Should fake HTTPS certificate be trusted by this machine's user certificate store? |
Boolean | machineTrustRootCertificate | Should fake HTTPS certificate be trusted by this machine's certificate store? |
Boolean | trustRootCertificateAsAdmin | Should we attempt to trust certificates with elevated permissions by prompting for UAC if required? |
ProxyServer(String, String, Boolean, Boolean, Boolean)
Initializes a new instance of ProxyServer class with provided parameters.
Declaration
public ProxyServer(string rootCertificateName, string rootCertificateIssuerName, bool userTrustRootCertificate = true, bool machineTrustRootCertificate = false, bool trustRootCertificateAsAdmin = false)
Parameters
Type | Name | Description |
---|---|---|
String | rootCertificateName | Name of the root certificate. |
String | rootCertificateIssuerName | Name of the root certificate issuer. |
Boolean | userTrustRootCertificate | Should fake HTTPS certificate be trusted by this machine's user certificate store? |
Boolean | machineTrustRootCertificate | Should fake HTTPS certificate be trusted by this machine's certificate store? |
Boolean | trustRootCertificateAsAdmin | Should we attempt to trust certificates with elevated permissions by prompting for UAC if required? |
Properties
| Improve this Doc View SourceBufferPool
The buffer pool used throughout this proxy instance. Set custom implementations by implementing this interface. By default this uses DefaultBufferPool implementation available in StreamExtended library package. Buffer size should be at least 10 bytes.
Declaration
public IBufferPool BufferPool { get; set; }
Property Value
Type | Description |
---|---|
IBufferPool |
CertificateManager
Manages certificates used by this proxy.
Declaration
public CertificateManager CertificateManager { get; }
Property Value
Type | Description |
---|---|
CertificateManager |
CheckCertificateRevocation
Should we check for certificate revocation during SSL authentication to servers Note: If enabled can reduce performance. Defaults to false.
Declaration
public X509RevocationMode CheckCertificateRevocation { get; set; }
Property Value
Type | Description |
---|---|
X509RevocationMode |
ClientConnectionCount
Total number of active client connections.
Declaration
public int ClientConnectionCount { get; }
Property Value
Type | Description |
---|---|
Int32 |
ConnectionTimeOutSeconds
Seconds client/server connection are to be kept alive when waiting for read/write to complete. This will also determine the pool eviction time when connection pool is enabled. Default value is 60 seconds.
Declaration
public int ConnectionTimeOutSeconds { get; set; }
Property Value
Type | Description |
---|---|
Int32 |
ConnectTimeOutSeconds
Seconds server connection are to wait for connection to be established. Default value is 20 seconds.
Declaration
public int ConnectTimeOutSeconds { get; set; }
Property Value
Type | Description |
---|---|
Int32 |
CustomUpStreamProxyFailureFunc
A callback to provide a chance for an upstream proxy failure to be handled by a new upstream proxy. User should return the ExternalProxy object with valid credentials or null.
Declaration
public Func<SessionEventArgsBase, Task<IExternalProxy>> CustomUpStreamProxyFailureFunc { get; set; }
Property Value
Type | Description |
---|---|
Func<SessionEventArgsBase, Task<IExternalProxy>> |
Enable100ContinueBehaviour
Does this proxy uses the HTTP protocol 100 continue behaviour strictly? Broken 100 continue implementations on server/client may cause problems if enabled. Defaults to false.
Declaration
public bool Enable100ContinueBehaviour { get; set; }
Property Value
Type | Description |
---|---|
Boolean |
EnableConnectionPool
Should we enable experimental server connection pool. Defaults to false. When you enable connection pooling, instead of creating a new TCP connection to server for each client TCP connection, we check if a server connection is available in our cached pool. If it is available in our pool, created from earlier requests to the same server, we will reuse those idle connections. There is also a ConnectionTimeOutSeconds parameter, which determine the eviction time for inactive server connections. This will help to reduce TCP connection establishment cost, both the wall clock time and CPU cycles.
Declaration
public bool EnableConnectionPool { get; set; }
Property Value
Type | Description |
---|---|
Boolean |
EnableHttp2
Enable disable HTTP/2 support. Warning: HTTP/2 support is very limited
- only enabled when both client and server supports it (no protocol changing in proxy)
- cannot modify the request/response (e.g header modifications in BeforeRequest/Response events are ignored)
Declaration
public bool EnableHttp2 { get; set; }
Property Value
Type | Description |
---|---|
Boolean |
EnableTcpServerConnectionPrefetch
Should we enable tcp server connection prefetching? When enabled, as soon as we receive a client connection we concurrently initiate corresponding server connection process using CONNECT hostname or SNI hostname on a separate task so that after parsing client request we will have the server connection immediately ready or in the process of getting ready. If a server connection is available in cache then this prefetch task will immediately return with the available connection from cache. Defaults to true.
Declaration
public bool EnableTcpServerConnectionPrefetch { get; set; }
Property Value
Type | Description |
---|---|
Boolean |
EnableWinAuth
Enable disable Windows Authentication (NTLM/Kerberos). Note: NTLM/Kerberos will always send local credentials of current user running the proxy process. This is because a man in middle attack with Windows domain authentication is not currently supported. Defaults to false.
Declaration
public bool EnableWinAuth { get; set; }
Property Value
Type | Description |
---|---|
Boolean |
ExceptionFunc
Callback for error events in this proxy instance.
Declaration
public ExceptionHandler ExceptionFunc { get; set; }
Property Value
Type | Description |
---|---|
ExceptionHandler |
ForwardToUpstreamGateway
Gets or sets a value indicating whether requests will be chained to upstream gateway. Defaults to false.
Declaration
public bool ForwardToUpstreamGateway { get; set; }
Property Value
Type | Description |
---|---|
Boolean |
GetCustomUpStreamProxyFunc
A callback to provide authentication credentials for up stream proxy this proxy is using for HTTP(S) requests. User should return the ExternalProxy object with valid credentials.
Declaration
public Func<SessionEventArgsBase, Task<IExternalProxy>> GetCustomUpStreamProxyFunc { get; set; }
Property Value
Type | Description |
---|---|
Func<SessionEventArgsBase, Task<IExternalProxy>> |
MaxCachedConnections
Maximum number of concurrent connections per remote host in cache. Only valid when connection pooling is enabled. Default value is 4.
Declaration
public int MaxCachedConnections { get; set; }
Property Value
Type | Description |
---|---|
Int32 |
NetworkFailureRetryAttempts
Number of times to retry upon network failures when connection pool is enabled.
Declaration
public int NetworkFailureRetryAttempts { get; set; }
Property Value
Type | Description |
---|---|
Int32 |
NoDelay
Gets or sets a Boolean value that specifies whether server and client stream Sockets are using the Nagle algorithm. Defaults to true, no nagle algorithm is used.
Declaration
public bool NoDelay { get; set; }
Property Value
Type | Description |
---|---|
Boolean |
ProxyAuthenticationRealm
Realm used during Proxy Basic Authentication.
Declaration
public string ProxyAuthenticationRealm { get; set; }
Property Value
Type | Description |
---|---|
String |
ProxyAuthenticationSchemes
A collection of scheme types, e.g. basic, NTLM, Kerberos, Negotiate, to return if scheme authentication is required. Works in relation with ProxySchemeAuthenticateFunc.
Declaration
public IEnumerable<string> ProxyAuthenticationSchemes { get; set; }
Property Value
Type | Description |
---|---|
IEnumerable<String> |
ProxyBasicAuthenticateFunc
A callback to authenticate proxy clients via basic authentication. Parameters are username and password as provided by client. Should return true for successful authentication.
Declaration
public Func<SessionEventArgsBase, string, string, Task<bool>> ProxyBasicAuthenticateFunc { get; set; }
Property Value
Type | Description |
---|---|
Func<SessionEventArgsBase, String, String, Task<Boolean>> |
ProxyEndPoints
A list of IpAddress and port this proxy is listening to.
Declaration
public List<ProxyEndPoint> ProxyEndPoints { get; set; }
Property Value
Type | Description |
---|---|
List<ProxyEndPoint> |
ProxyRunning
Is the proxy currently running?
Declaration
public bool ProxyRunning { get; }
Property Value
Type | Description |
---|---|
Boolean |
ProxySchemeAuthenticateFunc
A pluggable callback to authenticate clients by scheme instead of requiring basic authentication through ProxyBasicAuthenticateFunc. Parameters are current working session, schemeType, and token as provided by a calling client. Should return success for successful authentication, continuation if the package requests, or failure.
Declaration
public Func<SessionEventArgsBase, string, string, Task<ProxyAuthenticationContext>> ProxySchemeAuthenticateFunc { get; set; }
Property Value
Type | Description |
---|---|
Func<SessionEventArgsBase, String, String, Task<ProxyAuthenticationContext>> |
ReuseSocket
Should we reuse client/server tcp sockets. Default is true (disabled for linux/macOS due to bug in .Net core).
Declaration
public bool ReuseSocket { get; set; }
Property Value
Type | Description |
---|---|
Boolean |
ServerConnectionCount
Total number of active server connections.
Declaration
public int ServerConnectionCount { get; }
Property Value
Type | Description |
---|---|
Int32 |
SupportedServerSslProtocols
List of supported Server Ssl versions. Using SslProtocol.None means to require the same SSL protocol as the proxy client.
Declaration
public SslProtocols SupportedServerSslProtocols { get; set; }
Property Value
Type | Description |
---|---|
SslProtocols |
SupportedSslProtocols
List of supported Ssl versions.
Declaration
public SslProtocols SupportedSslProtocols { get; set; }
Property Value
Type | Description |
---|---|
SslProtocols |
TcpTimeWaitSeconds
Number of seconds to linger when Tcp connection is in TIME_WAIT state. Default value is 30.
Declaration
public int TcpTimeWaitSeconds { get; set; }
Property Value
Type | Description |
---|---|
Int32 |
ThreadPoolWorkerThread
Customize the minimum ThreadPool size (increase it on a server)
Declaration
public int ThreadPoolWorkerThread { get; set; }
Property Value
Type | Description |
---|---|
Int32 |
UpStreamEndPoint
Local adapter/NIC endpoint where proxy makes request via. Defaults via any IP addresses of this machine.
Declaration
public IPEndPoint UpStreamEndPoint { get; set; }
Property Value
Type | Description |
---|---|
IPEndPoint |
UpStreamHttpProxy
External proxy used for Http requests.
Declaration
public IExternalProxy UpStreamHttpProxy { get; set; }
Property Value
Type | Description |
---|---|
IExternalProxy |
UpStreamHttpsProxy
External proxy used for Https requests.
Declaration
public IExternalProxy UpStreamHttpsProxy { get; set; }
Property Value
Type | Description |
---|---|
IExternalProxy |
UpstreamProxyConfigurationScript
If set, the upstream proxy will be detected by a script that will be loaded from the provided Uri
Declaration
public Uri UpstreamProxyConfigurationScript { get; set; }
Property Value
Type | Description |
---|---|
Uri |
Methods
| Improve this Doc View SourceAddEndPoint(ProxyEndPoint)
Add a proxy end point.
Declaration
public void AddEndPoint(ProxyEndPoint endPoint)
Parameters
Type | Name | Description |
---|---|---|
ProxyEndPoint | endPoint | The proxy endpoint. |
DisableAllSystemProxies()
Clear all proxy settings for current machine.
Declaration
public void DisableAllSystemProxies()
DisableSystemHttpProxy()
Clear HTTP proxy settings of current machine.
Declaration
public void DisableSystemHttpProxy()
DisableSystemHttpsProxy()
Clear HTTPS proxy settings of current machine.
Declaration
public void DisableSystemHttpsProxy()
DisableSystemProxy(ProxyProtocolType)
Clear the specified proxy setting for current machine.
Declaration
public void DisableSystemProxy(ProxyProtocolType protocolType)
Parameters
Type | Name | Description |
---|---|---|
ProxyProtocolType | protocolType |
Dispose()
Declaration
public void Dispose()
Dispose(Boolean)
Declaration
protected virtual void Dispose(bool disposing)
Parameters
Type | Name | Description |
---|---|---|
Boolean | disposing |
Finalize()
Declaration
protected void Finalize()
RemoveEndPoint(ProxyEndPoint)
Remove a proxy end point. Will throw error if the end point doesn't exist.
Declaration
public void RemoveEndPoint(ProxyEndPoint endPoint)
Parameters
Type | Name | Description |
---|---|---|
ProxyEndPoint | endPoint | The existing endpoint to remove. |
RestoreOriginalProxySettings()
Restores the original proxy settings.
Declaration
public void RestoreOriginalProxySettings()
SetAsSystemHttpProxy(ExplicitProxyEndPoint)
Set the given explicit end point as the default proxy server for current machine.
Declaration
public void SetAsSystemHttpProxy(ExplicitProxyEndPoint endPoint)
Parameters
Type | Name | Description |
---|---|---|
ExplicitProxyEndPoint | endPoint | The explicit endpoint. |
SetAsSystemHttpsProxy(ExplicitProxyEndPoint)
Set the given explicit end point as the default proxy server for current machine.
Declaration
public void SetAsSystemHttpsProxy(ExplicitProxyEndPoint endPoint)
Parameters
Type | Name | Description |
---|---|---|
ExplicitProxyEndPoint | endPoint | The explicit endpoint. |
SetAsSystemProxy(ExplicitProxyEndPoint, ProxyProtocolType)
Set the given explicit end point as the default proxy server for current machine.
Declaration
public void SetAsSystemProxy(ExplicitProxyEndPoint endPoint, ProxyProtocolType protocolType)
Parameters
Type | Name | Description |
---|---|---|
ExplicitProxyEndPoint | endPoint | The explicit endpoint. |
ProxyProtocolType | protocolType | The proxy protocol type. |
Start(Boolean)
Start this proxy server instance.
Declaration
public void Start(bool changeSystemProxySettings = true)
Parameters
Type | Name | Description |
---|---|---|
Boolean | changeSystemProxySettings | Whether or not clear any system proxy settings which is pointing to our own endpoint (causing a cycle). E.g due to ungracious proxy shutdown before. |
Stop()
Stop this proxy server instance.
Declaration
public void Stop()
Events
| Improve this Doc View SourceAfterResponse
Intercept after response event from server.
Declaration
public event AsyncEventHandler<SessionEventArgs> AfterResponse
Event Type
Type | Description |
---|---|
AsyncEventHandler<SessionEventArgs> |
BeforeRequest
Intercept request event to server.
Declaration
public event AsyncEventHandler<SessionEventArgs> BeforeRequest
Event Type
Type | Description |
---|---|
AsyncEventHandler<SessionEventArgs> |
BeforeResponse
Intercept response event from server.
Declaration
public event AsyncEventHandler<SessionEventArgs> BeforeResponse
Event Type
Type | Description |
---|---|
AsyncEventHandler<SessionEventArgs> |
BeforeUpStreamConnectRequest
Intercept connect request sent to upstream proxy.
Declaration
public event AsyncEventHandler<ConnectRequest> BeforeUpStreamConnectRequest
Event Type
Type | Description |
---|---|
AsyncEventHandler<ConnectRequest> |
ClientCertificateSelectionCallback
Event to override client certificate selection during mutual SSL authentication.
Declaration
public event AsyncEventHandler<CertificateSelectionEventArgs> ClientCertificateSelectionCallback
Event Type
Type | Description |
---|---|
AsyncEventHandler<CertificateSelectionEventArgs> |
ClientConnectionCountChanged
Event occurs when client connection count changed.
Declaration
public event EventHandler ClientConnectionCountChanged
Event Type
Type | Description |
---|---|
EventHandler |
OnClientConnectionCreate
Customize TcpClient used for client connection upon create.
Declaration
public event AsyncEventHandler<Socket> OnClientConnectionCreate
Event Type
Type | Description |
---|---|
AsyncEventHandler<Socket> |
OnServerConnectionCreate
Customize TcpClient used for server connection upon create.
Declaration
public event AsyncEventHandler<Socket> OnServerConnectionCreate
Event Type
Type | Description |
---|---|
AsyncEventHandler<Socket> |
ServerCertificateValidationCallback
Event to override the default verification logic of remote SSL certificate received during authentication.
Declaration
public event AsyncEventHandler<CertificateValidationEventArgs> ServerCertificateValidationCallback
Event Type
Type | Description |
---|---|
AsyncEventHandler<CertificateValidationEventArgs> |
ServerConnectionCountChanged
Event occurs when server connection count changed.
Declaration
public event EventHandler ServerConnectionCountChanged
Event Type
Type | Description |
---|---|
EventHandler |