Class ProxyServer | Titanium Web Proxy

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 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. Buffer size should be at least 10 bytes.

Declaration
public IBufferPool BufferPool { get; set; }
Property Value
Type Description
IBufferPool
| 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

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
| Improve this Doc View Source

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>>
| 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 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
| 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<IExternalProxy>> GetCustomUpStreamProxyFunc { get; set; }
Property Value
Type Description
Func<SessionEventArgsBase, Task<IExternalProxy>>
| 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 4.

Declaration
public int MaxCachedConnections { get; set; }
Property Value
Type Description
Int32
| Improve this Doc View Source

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

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
| 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 IExternalProxy UpStreamHttpProxy { get; set; }
Property Value
Type Description
IExternalProxy
| Improve this Doc View Source

UpStreamHttpsProxy

External proxy used for Https requests.

Declaration
public IExternalProxy UpStreamHttpsProxy { get; set; }
Property Value
Type Description
IExternalProxy
| Improve this Doc View Source

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 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()

Declaration
| Improve this Doc View Source

Dispose(Boolean)

Declaration
protected virtual void Dispose(bool disposing)
Parameters
Type Name Description
Boolean disposing
| Improve this Doc View Source

Finalize()

Declaration
protected void Finalize()
| 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(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.

| Improve this Doc View Source

Stop()

Stop this proxy server instance.

Declaration

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

BeforeUpStreamConnectRequest

Intercept connect request sent to upstream proxy.

Declaration
public event AsyncEventHandler<ConnectRequest> BeforeUpStreamConnectRequest
Event Type
Type Description
AsyncEventHandler<ConnectRequest>
| 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<Socket> OnClientConnectionCreate
Event Type
Type Description
AsyncEventHandler<Socket>
| Improve this Doc View Source

OnServerConnectionCreate

Customize TcpClient used for server connection upon create.

Declaration
public event AsyncEventHandler<Socket> OnServerConnectionCreate
Event Type
Type Description
AsyncEventHandler<Socket>
| 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