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
ProxyServer(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
BufferPool
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.
Declaration
public IBufferPool BufferPool { get; set; }
Property Value
| Type | Description |
|---|---|
| StreamExtended.IBufferPool |
BufferSize
Buffer size in bytes used throughout this proxy. Default value is 8192 bytes.
Declaration
public int BufferSize { get; set; }
Property Value
| Type | Description |
|---|---|
| Int32 |
CertificateManager
Manages certificates used by this proxy.
Declaration
public CertificateManager CertificateManager { get; }
Property Value
| Type | Description |
|---|---|
| CertificateManager |
CheckCertificateRevocation
Should we check for certificare 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 |
Enable100ContinueBehaviour
Does this proxy uses the HTTP protocol 100 continue behaviour strictly? Broken 100 contunue 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 disable.
Declaration
public bool EnableConnectionPool { 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<ExternalProxy>> GetCustomUpStreamProxyFunc { get; set; }
Property Value
| Type | Description |
|---|---|
| Func<SessionEventArgsBase, Task<ExternalProxy>> |
MaxCachedConnections
Maximum number of concurrent connections per remote host in cache. Only valid when connection pooling is enabled. Default value is 2.
Declaration
public int MaxCachedConnections { get; set; }
Property Value
| Type | Description |
|---|---|
| Int32 |
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 |
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 |
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 ExternalProxy UpStreamHttpProxy { get; set; }
Property Value
| Type | Description |
|---|---|
| ExternalProxy |
UpStreamHttpsProxy
External proxy used for Https requests.
Declaration
public ExternalProxy UpStreamHttpsProxy { get; set; }
Property Value
| Type | Description |
|---|---|
| ExternalProxy |
Methods
AddEndPoint(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()
Dispose the Proxy instance.
Declaration
public void Dispose()
RemoveEndPoint(ProxyEndPoint)
Remove a proxy end point. Will throw error if the end point does'nt exist.
Declaration
public void RemoveEndPoint(ProxyEndPoint endPoint)
Parameters
| Type | Name | Description |
|---|---|---|
| ProxyEndPoint | endPoint | The existing endpoint to remove. |
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()
Start this proxy server instance.
Declaration
public void Start()
Stop()
Stop this proxy server instance.
Declaration
public void Stop()
Events
AfterResponse
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> |
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<TcpClient> OnClientConnectionCreate
Event Type
| Type | Description |
|---|---|
| AsyncEventHandler<TcpClient> |
OnServerConnectionCreate
Customize TcpClient used for server connection upon create.
Declaration
public event AsyncEventHandler<TcpClient> OnServerConnectionCreate
Event Type
| Type | Description |
|---|---|
| AsyncEventHandler<TcpClient> |
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 |