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.ToString()
Object.Equals(Object)
Object.Equals(Object, Object)
Object.ReferenceEquals(Object, Object)
Object.GetHashCode()
Object.GetType()
Object.MemberwiseClone()

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

#### AuthenticateUserFunc

A callback to authenticate clients. Parameters are username and password as provided by client. Should return true for successful authentication.

##### Declaration

    public Func<string, string, Task<bool>> AuthenticateUserFunc { get; set; }

##### Property Value

Type | Description
--- | ---
Func<String, String, Task<Boolean>> |

#### BufferPool

The buffer pool used throughout this proxy instance.

##### Declaration

    public IBufferPool BufferPool { get; set; }

##### Property Value

Type | Description
--- | ---
StreamExtended.IBufferPool |

#### BufferSize

Buffer size used throughout this proxy.

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

##### 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 Tcp server connection pool? Defaults to false.

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

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

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

##### Declaration

    public int MaxCachedConnections { get; set; }

##### Property Value

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

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

#### ProxyRealm

Realm used during Proxy Basic Authentication.

##### Declaration

    public string ProxyRealm { get; set; }

##### Property Value

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

#### ProxyRunning

Is the proxy currently running?

##### Declaration

    public bool ProxyRunning { get; }

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

#### 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<System.Net.Sockets.TcpClient> |

#### OnServerConnectionCreate

Customize TcpClient used for server connection upon create.

##### Declaration

    public event AsyncEventHandler<TcpClient> OnServerConnectionCreate

##### Event Type

Type | Description
--- | ---
AsyncEventHandler<System.Net.Sockets.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 |

### Implements

System.IDisposable