Show / Hide Table of Contents

# 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.

##### Inheritance

Object
ProxyServer

##### Implements

IDisposable

##### Inherited Members

Object.Equals(Object)
Object.Equals(Object, Object)
Object.GetHashCode()
Object.GetType()
Object.MemberwiseClone()
Object.ReferenceEquals(Object, Object)
Object.ToString()

###### Namespace: Titanium.Web.Proxy

###### Assembly: Titanium.Web.Proxy.dll

##### Syntax

    public class ProxyServer : IDisposable

### Constructors

| Improve this Doc View Source

#### 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?

| Improve this Doc View Source

#### 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 Source

#### 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
--- | ---
IBufferPool |

| Improve this Doc View Source

#### 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 |

| Improve this Doc View Source

#### CertificateManager

Manages certificates used by this proxy.

##### Declaration

    public CertificateManager CertificateManager { get; }

##### Property Value

Type | Description
--- | ---
CertificateManager |

| Improve this Doc View Source

#### 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 |

| Improve this Doc View Source

#### ClientConnectionCount

Total number of active client connections.

##### Declaration

    public int ClientConnectionCount { get; }

##### Property Value

Type | Description
--- | ---
Int32 |

| Improve this Doc View Source

#### 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 |

| Improve this Doc View Source

#### 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 |

| Improve this Doc View Source

#### EnableConnectionPool

Should we enable experimental server connection pool? Defaults to true.

##### Declaration

    public bool EnableConnectionPool { get; set; }

##### Property Value

Type | Description
--- | ---
Boolean |

| Improve this Doc View Source

#### 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 |

| Improve this Doc View Source

#### 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 |

| Improve this Doc View Source

#### 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 |

| Improve this Doc View Source

#### ExceptionFunc

Callback for error events in this proxy instance.

##### Declaration

    public ExceptionHandler ExceptionFunc { get; set; }

##### Property Value

Type | Description
--- | ---
ExceptionHandler |

| Improve this Doc View Source

#### 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 |

| Improve this Doc View Source

#### 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>> |

| Improve this Doc View Source

#### 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 |

| Improve this Doc View Source

#### 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 |

| Improve this Doc View Source

#### ProxyAuthenticationRealm

Realm used during Proxy Basic Authentication.

##### Declaration

    public string ProxyAuthenticationRealm { get; set; }

##### Property Value

Type | Description
--- | ---
String |

| Improve this Doc View Source

#### 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> |

| Improve this Doc View Source

#### 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>> |

| Improve this Doc View Source

#### 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> |

| Improve this Doc View Source

#### ProxyRunning

Is the proxy currently running?

##### Declaration

    public bool ProxyRunning { get; }

##### Property Value

Type | Description
--- | ---
Boolean |

| Improve this Doc View Source

#### 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>> |

| Improve this Doc View Source

#### 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 |

| Improve this Doc View Source

#### ServerConnectionCount

Total number of active server connections.

##### Declaration

    public int ServerConnectionCount { get; }

##### Property Value

Type | Description
--- | ---
Int32 |

| Improve this Doc View Source

#### SupportedSslProtocols

List of supported Ssl versions.

##### Declaration

    public SslProtocols SupportedSslProtocols { get; set; }

##### Property Value

Type | Description
--- | ---
SslProtocols |

| Improve this Doc View Source

#### 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 |

| Improve this Doc View Source

#### ThreadPoolWorkerThread

Customize the minimum ThreadPool size (increase it on a server)

##### Declaration

    public int ThreadPoolWorkerThread { get; set; }

##### Property Value

Type | Description
--- | ---
Int32 |

| Improve this Doc View Source

#### 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 |

| Improve this Doc View Source

#### UpStreamHttpProxy

External proxy used for Http requests.

##### Declaration

    public ExternalProxy UpStreamHttpProxy { get; set; }

##### Property Value

Type | Description
--- | ---
ExternalProxy |

| Improve this Doc View Source

#### UpStreamHttpsProxy

External proxy used for Https requests.

##### Declaration

    public ExternalProxy UpStreamHttpsProxy { get; set; }

##### Property Value

Type | Description
--- | ---
ExternalProxy |

### Methods

| Improve this Doc View Source

#### AddEndPoint(ProxyEndPoint)

Add a proxy end point.

##### Declaration

    public void AddEndPoint(ProxyEndPoint endPoint)

##### Parameters

Type | Name | Description
--- | --- | ---
ProxyEndPoint | endPoint | The proxy endpoint.

| Improve this Doc View Source

#### DisableAllSystemProxies()

Clear all proxy settings for current machine.

##### Declaration

    public void DisableAllSystemProxies()

| Improve this Doc View Source

#### DisableSystemHttpProxy()

Clear HTTP proxy settings of current machine.

##### Declaration

    public void DisableSystemHttpProxy()

| Improve this Doc View Source

#### DisableSystemHttpsProxy()

Clear HTTPS proxy settings of current machine.

##### Declaration

    public void DisableSystemHttpsProxy()

| Improve this Doc View Source

#### DisableSystemProxy(ProxyProtocolType)

Clear the specified proxy setting for current machine.

##### Declaration

    public void DisableSystemProxy(ProxyProtocolType protocolType)

##### Parameters

Type | Name | Description
--- | --- | ---
ProxyProtocolType | protocolType |

| Improve this Doc View Source

#### Dispose()

Dispose the Proxy instance.

##### Declaration

    public void Dispose()

| Improve this Doc View Source

#### 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.

| Improve this Doc View Source

#### RestoreOriginalProxySettings()

Restores the original proxy settings.

##### Declaration

    public void RestoreOriginalProxySettings()

| Improve this Doc View Source

#### 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.

| Improve this Doc View Source

#### 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.

| Improve this Doc View Source

#### 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.

| Improve this Doc View Source

#### Start()

Start this proxy server instance.

##### Declaration

    public void Start()

| Improve this Doc View Source

#### Stop()

Stop this proxy server instance.

##### Declaration

    public void Stop()

### Events

| Improve this Doc View Source

#### AfterResponse

Intercept after response event from server.

##### Declaration

    public event AsyncEventHandler<SessionEventArgs> AfterResponse

##### Event Type

Type | Description
--- | ---
AsyncEventHandler<SessionEventArgs> |

| Improve this Doc View Source

#### BeforeRequest

Intercept request event to server.

##### Declaration

    public event AsyncEventHandler<SessionEventArgs> BeforeRequest

##### Event Type

Type | Description
--- | ---
AsyncEventHandler<SessionEventArgs> |

| Improve this Doc View Source

#### BeforeResponse

Intercept response event from server.

##### Declaration

    public event AsyncEventHandler<SessionEventArgs> BeforeResponse

##### Event Type

Type | Description
--- | ---
AsyncEventHandler<SessionEventArgs> |

| Improve this Doc View Source

#### ClientCertificateSelectionCallback

Event to override client certificate selection during mutual SSL authentication.

##### Declaration

    public event AsyncEventHandler<CertificateSelectionEventArgs> ClientCertificateSelectionCallback

##### Event Type

Type | Description
--- | ---
AsyncEventHandler<CertificateSelectionEventArgs> |

| Improve this Doc View Source

#### ClientConnectionCountChanged

Event occurs when client connection count changed.

##### Declaration

    public event EventHandler ClientConnectionCountChanged

##### Event Type

Type | Description
--- | ---
EventHandler |

| Improve this Doc View Source

#### OnClientConnectionCreate

Customize TcpClient used for client connection upon create.

##### Declaration

    public event AsyncEventHandler<TcpClient> OnClientConnectionCreate

##### Event Type

Type | Description
--- | ---
AsyncEventHandler<TcpClient> |

| Improve this Doc View Source

#### OnServerConnectionCreate

Customize TcpClient used for server connection upon create.

##### Declaration

    public event AsyncEventHandler<TcpClient> OnServerConnectionCreate

##### Event Type

Type | Description
--- | ---
AsyncEventHandler<TcpClient> |

| Improve this Doc View Source

#### 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> |

| Improve this Doc View Source

#### ServerConnectionCountChanged

Event occurs when server connection count changed.

##### Declaration

    public event EventHandler ServerConnectionCountChanged

##### Event Type

Type | Description
--- | ---
EventHandler |

### Implements

System.IDisposable