Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
T
Titanium-Web-Proxy
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Titanium-Web-Proxy
Commits
281c2a00
Commit
281c2a00
authored
May 16, 2017
by
Honfika
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
connection count locking + usings sorted
parent
30125ee1
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
67 additions
and
62 deletions
+67
-62
ProxyTestController.cs
.../Titanium.Web.Proxy.Examples.Basic/ProxyTestController.cs
+5
-5
AssemblyInfo.cs
...ium.Web.Proxy.IntegrationTests/Properties/AssemblyInfo.cs
+0
-1
SslTests.cs
Tests/Titanium.Web.Proxy.IntegrationTests/SslTests.cs
+5
-4
CertificateManagerTests.cs
...s/Titanium.Web.Proxy.UnitTests/CertificateManagerTests.cs
+3
-4
Titanium.Web.Proxy.sln.DotSettings
Titanium.Web.Proxy.sln.DotSettings
+4
-1
SessionEventArgs.cs
Titanium.Web.Proxy/EventArguments/SessionEventArgs.cs
+5
-5
SystemProxy.cs
Titanium.Web.Proxy/Helpers/SystemProxy.cs
+4
-4
Tcp.cs
Titanium.Web.Proxy/Helpers/Tcp.cs
+2
-5
Request.cs
Titanium.Web.Proxy/Http/Request.cs
+1
-1
Response.cs
Titanium.Web.Proxy/Http/Response.cs
+3
-3
CertificateManager.cs
Titanium.Web.Proxy/Network/CertificateManager.cs
+7
-6
TcpConnectionFactory.cs
Titanium.Web.Proxy/Network/Tcp/TcpConnectionFactory.cs
+6
-5
ProxyServer.cs
Titanium.Web.Proxy/ProxyServer.cs
+10
-7
RequestHandler.cs
Titanium.Web.Proxy/RequestHandler.cs
+5
-5
ResponseHandler.cs
Titanium.Web.Proxy/ResponseHandler.cs
+7
-6
No files found.
Examples/Titanium.Web.Proxy.Examples.Basic/ProxyTestController.cs
View file @
281c2a00
using
System
;
using
System.Collections.Generic
;
using
System.IO
;
using
System.Net
;
using
System.Net.Security
;
using
System.Threading.Tasks
;
using
Titanium.Web.Proxy.EventArguments
;
using
Titanium.Web.Proxy.Models
;
...
...
@@ -47,18 +47,18 @@ namespace Titanium.Web.Proxy.Examples.Basic
//Exclude Https addresses you don't want to proxy
//Useful for clients that use certificate pinning
//for example google.com and dropbox.com
ExcludedHttpsHostNameRegex
=
new
List
<
string
>()
{
"dropbox.com"
}
ExcludedHttpsHostNameRegex
=
new
List
<
string
>
{
"dropbox.com"
}
//Include Https addresses you want to proxy (others will be excluded)
//for example github.com
//
IncludedHttpsHostNameRegex = new List<string>()
{ "github.com" }
//
IncludedHttpsHostNameRegex = new List<string>
{ "github.com" }
//You can set only one of the ExcludedHttpsHostNameRegex and IncludedHttpsHostNameRegex properties, otherwise ArgumentException will be thrown
//Use self-issued generic certificate on all https requests
//Optimizes performance by not creating a certificate for each https-enabled domain
//Useful when certificate trust is not required by proxy clients
//
GenericCertificate = new X509Certificate2(Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "genericcert.pfx"), "password")
//GenericCertificate = new X509Certificate2(Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "genericcert.pfx"), "password")
};
//An explicit endpoint is where the client knows about the existence of a proxy
...
...
@@ -189,7 +189,7 @@ namespace Titanium.Web.Proxy.Examples.Basic
public
Task
OnCertificateValidation
(
object
sender
,
CertificateValidationEventArgs
e
)
{
//set IsValid to true/false based on Certificate Errors
if
(
e
.
SslPolicyErrors
==
S
ystem
.
Net
.
Security
.
S
slPolicyErrors
.
None
)
if
(
e
.
SslPolicyErrors
==
SslPolicyErrors
.
None
)
{
e
.
IsValid
=
true
;
}
...
...
Tests/Titanium.Web.Proxy.IntegrationTests/Properties/AssemblyInfo.cs
View file @
281c2a00
using
System.Reflection
;
using
System.Runtime.CompilerServices
;
using
System.Runtime.InteropServices
;
// General Information about an assembly is controlled through the following
...
...
Tests/Titanium.Web.Proxy.IntegrationTests/SslTests.cs
View file @
281c2a00
using
System
;
using
Microsoft.VisualStudio.TestTools.UnitTesting
;
using
System.Diagnostics
;
using
System.Net
;
using
System.Net.Http
;
using
System.Net.Security
;
using
System.Threading.Tasks
;
using
Microsoft.VisualStudio.TestTools.UnitTesting
;
using
Titanium.Web.Proxy.EventArguments
;
using
Titanium.Web.Proxy.Models
;
using
System.Net.Http
;
using
System.Diagnostics
;
namespace
Titanium.Web.Proxy.IntegrationTests
{
...
...
@@ -103,7 +104,7 @@ namespace Titanium.Web.Proxy.IntegrationTests
public
Task
OnCertificateValidation
(
object
sender
,
CertificateValidationEventArgs
e
)
{
//set IsValid to true/false based on Certificate Errors
if
(
e
.
SslPolicyErrors
==
S
ystem
.
Net
.
Security
.
S
slPolicyErrors
.
None
)
if
(
e
.
SslPolicyErrors
==
SslPolicyErrors
.
None
)
{
e
.
IsValid
=
true
;
}
...
...
Tests/Titanium.Web.Proxy.UnitTests/CertificateManagerTests.cs
View file @
281c2a00
using
System
;
using
System.Collections.Generic
;
using
System.Threading.Tasks
;
using
Microsoft.VisualStudio.TestTools.UnitTesting
;
using
Titanium.Web.Proxy.Network
;
using
System.Threading.Tasks
;
using
System.Collections.Generic
;
namespace
Titanium.Web.Proxy.UnitTests
{
...
...
@@ -10,8 +10,7 @@ namespace Titanium.Web.Proxy.UnitTests
public
class
CertificateManagerTests
{
private
static
readonly
string
[]
hostNames
=
new
string
[]
{
"facebook.com"
,
"youtube.com"
,
"google.com"
,
"bing.com"
,
"yahoo.com"
};
=
{
"facebook.com"
,
"youtube.com"
,
"google.com"
,
"bing.com"
,
"yahoo.com"
};
private
readonly
Random
random
=
new
Random
();
...
...
Titanium.Web.Proxy.sln.DotSettings
View file @
281c2a00
...
...
@@ -5,4 +5,7 @@
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateInstanceFields/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateStaticFields/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateStaticReadonly/@EntryIndexedValue"><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=dda2ffa1_002D435c_002D4111_002D88eb_002D1a7c93c382f0/@EntryIndexedValue"><Policy><Descriptor Staticness="Static, Instance" AccessRightKinds="Private" Description="Property (private)"><ElementKinds><Kind Name="PROPERTY" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></Policy></s:String></wpf:ResourceDictionary>
\ No newline at end of file
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=dda2ffa1_002D435c_002D4111_002D88eb_002D1a7c93c382f0/@EntryIndexedValue"><Policy><Descriptor Staticness="Static, Instance" AccessRightKinds="Private" Description="Property (private)"><ElementKinds><Kind Name="PROPERTY" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></Policy></s:String>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EAddAccessorOwnerDeclarationBracesMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateThisQualifierSettings/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
\ No newline at end of file
Titanium.Web.Proxy/EventArguments/SessionEventArgs.cs
View file @
281c2a00
using
System
;
using
System.Collections.Generic
;
using
System.IO
;
using
System.Net
;
using
System.Text
;
using
Titanium.Web.Proxy.Exception
s
;
using
System.Threading.Task
s
;
using
Titanium.Web.Proxy.Decompression
;
using
Titanium.Web.Proxy.Exceptions
;
using
Titanium.Web.Proxy.Extensions
;
using
Titanium.Web.Proxy.Http
;
using
Titanium.Web.Proxy.Http.Responses
;
using
Titanium.Web.Proxy.Extensions
;
using
System.Threading.Tasks
;
using
Titanium.Web.Proxy.Network
;
using
System.Net
;
using
Titanium.Web.Proxy.Models
;
using
Titanium.Web.Proxy.Network
;
namespace
Titanium.Web.Proxy.EventArguments
{
...
...
Titanium.Web.Proxy/Helpers/SystemProxy.cs
View file @
281c2a00
using
System
;
using
System.Runtime.InteropServices
;
using
Microsoft.Win32
;
using
System.Text.RegularExpressions
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Runtime.InteropServices
;
using
System.Text.RegularExpressions
;
using
Microsoft.Win32
;
// Helper classes for setting system proxy settings
namespace
Titanium.Web.Proxy.Helpers
...
...
@@ -84,7 +84,7 @@ namespace Titanium.Web.Proxy.Helpers
var
exisitingContent
=
reg
.
GetValue
(
"ProxyServer"
)
as
string
;
var
existingSystemProxyValues
=
GetSystemProxyValues
(
exisitingContent
);
existingSystemProxyValues
.
RemoveAll
(
x
=>
protocolType
==
ProxyProtocolType
.
Https
?
x
.
IsHttps
:
!
x
.
IsHttps
);
existingSystemProxyValues
.
Add
(
new
HttpSystemProxyValue
()
existingSystemProxyValues
.
Add
(
new
HttpSystemProxyValue
{
HostName
=
hostname
,
IsHttps
=
protocolType
==
ProxyProtocolType
.
Https
,
...
...
Titanium.Web.Proxy/Helpers/Tcp.cs
View file @
281c2a00
...
...
@@ -3,10 +3,9 @@ using System.Collections.Generic;
using
System.IO
;
using
System.Linq
;
using
System.Net.NetworkInformation
;
using
System.Net.Security
;
using
System.Runtime.InteropServices
;
using
System.Security.Authentication
;
using
System.Text
;
using
System.Threading
;
using
System.Threading.Tasks
;
using
Titanium.Web.Proxy.Extensions
;
using
Titanium.Web.Proxy.Models
;
...
...
@@ -15,8 +14,6 @@ using Titanium.Web.Proxy.Shared;
namespace
Titanium.Web.Proxy.Helpers
{
using
System.Net
;
internal
enum
IpVersion
{
Ipv4
=
1
,
...
...
@@ -232,7 +229,7 @@ namespace Titanium.Web.Proxy.Helpers
finally
{
tcpConnection
.
Dispose
();
server
.
ServerConnectionCount
--
;
Interlocked
.
Decrement
(
ref
server
.
serverConnectionCount
)
;
}
}
}
...
...
Titanium.Web.Proxy/Http/Request.cs
View file @
281c2a00
using
System
;
using
System.Collections.Generic
;
using
System.Text
;
using
Titanium.Web.Proxy.Models
;
using
Titanium.Web.Proxy.Extensions
;
using
Titanium.Web.Proxy.Models
;
namespace
Titanium.Web.Proxy.Http
{
...
...
Titanium.Web.Proxy/Http/Response.cs
View file @
281c2a00
using
System.Collections.Generic
;
using
System
;
using
System.Collections.Generic
;
using
System.IO
;
using
System.Text
;
using
Titanium.Web.Proxy.Models
;
using
Titanium.Web.Proxy.Extensions
;
using
System
;
using
Titanium.Web.Proxy.Models
;
namespace
Titanium.Web.Proxy.Http
{
...
...
Titanium.Web.Proxy/Network/CertificateManager.cs
View file @
281c2a00
using
System
;
using
System.Collections.Concurrent
;
using
System.Collections.Generic
;
using
System.IO
;
using
System.Linq
;
using
System.Reflection
;
using
System.Security.Cryptography.X509Certificates
;
using
System.Threading.Tasks
;
using
System.Linq
;
using
System.Collections.Concurrent
;
using
System.IO
;
using
Titanium.Web.Proxy.Network.Certificate
;
using
Titanium.Web.Proxy.Helpers
;
using
Titanium.Web.Proxy.Network.Certificate
;
namespace
Titanium.Web.Proxy.Network
{
...
...
@@ -132,12 +133,12 @@ namespace Titanium.Web.Proxy.Network
private
string
GetRootCertificatePath
()
{
var
assemblyLocation
=
System
.
Reflection
.
Assembly
.
GetExecutingAssembly
().
Location
;
var
assemblyLocation
=
Assembly
.
GetExecutingAssembly
().
Location
;
// dynamically loaded assemblies returns string.Empty location
if
(
assemblyLocation
==
string
.
Empty
)
{
assemblyLocation
=
System
.
Reflection
.
Assembly
.
GetEntryAssembly
().
Location
;
assemblyLocation
=
Assembly
.
GetEntryAssembly
().
Location
;
}
var
path
=
Path
.
GetDirectoryName
(
assemblyLocation
);
...
...
Titanium.Web.Proxy/Network/Tcp/TcpConnectionFactory.cs
View file @
281c2a00
using
System
;
using
System.IO
;
using
System.Linq
;
using
System.Net.Security
;
using
System.Net.Sockets
;
using
System.Text
;
using
System.Threading
;
using
System.Threading.Tasks
;
using
System.IO
;
using
System.Net.Security
;
using
Titanium.Web.Proxy.Extensions
;
using
Titanium.Web.Proxy.Helpers
;
using
Titanium.Web.Proxy.Models
;
using
System.Linq
;
using
Titanium.Web.Proxy.Extensions
;
using
Titanium.Web.Proxy.Shared
;
namespace
Titanium.Web.Proxy.Network.Tcp
...
...
@@ -127,7 +128,7 @@ namespace Titanium.Web.Proxy.Network.Tcp
client
.
LingerState
=
new
LingerOption
(
true
,
0
);
server
.
ServerConnectionCount
++
;
Interlocked
.
Increment
(
ref
server
.
serverConnectionCount
)
;
return
new
TcpConnection
{
...
...
Titanium.Web.Proxy/ProxyServer.cs
View file @
281c2a00
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Net
;
using
System.Net.Sockets
;
using
System.Security.Authentication
;
using
System.Security.Cryptography.X509Certificates
;
using
System.Threading
;
using
System.Threading.Tasks
;
using
Titanium.Web.Proxy.EventArguments
;
using
Titanium.Web.Proxy.Helpers
;
using
Titanium.Web.Proxy.Models
;
using
Titanium.Web.Proxy.Network
;
using
System.Linq
;
using
System.Security.Authentication
;
using
Titanium.Web.Proxy.Network.Tcp
;
using
System.Security.Cryptography.X509Certificates
;
namespace
Titanium.Web.Proxy
{
...
...
@@ -35,6 +36,8 @@ namespace Titanium.Web.Proxy
private
Action
<
Exception
>
exceptionFunc
;
private
bool
trustRootCertificate
;
private
int
clientConnectionCount
;
internal
int
serverConnectionCount
;
/// <summary>
/// A object that creates tcp connection to server
...
...
@@ -229,13 +232,13 @@ namespace Titanium.Web.Proxy
/// <summary>
/// Total number of active client connections
/// </summary>
public
int
ClientConnectionCount
{
get
;
private
set
;
}
public
int
ClientConnectionCount
=>
clientConnectionCount
;
/// <summary>
/// Total number of active server connections
/// </summary>
public
int
ServerConnectionCount
{
get
;
internal
set
;
}
public
int
ServerConnectionCount
=>
serverConnectionCount
;
/// <summary>
/// Constructor
...
...
@@ -596,7 +599,7 @@ namespace Titanium.Web.Proxy
{
Task
.
Run
(
async
()
=>
{
ClientConnectionCount
++
;
Interlocked
.
Increment
(
ref
clientConnectionCount
)
;
//This line is important!
//contributors please don't remove it without discussion
...
...
@@ -617,7 +620,7 @@ namespace Titanium.Web.Proxy
}
finally
{
ClientConnectionCount
--
;
Interlocked
.
Decrement
(
ref
clientConnectionCount
)
;
tcpClient
?.
Close
();
}
});
...
...
Titanium.Web.Proxy/RequestHandler.cs
View file @
281c2a00
...
...
@@ -6,15 +6,15 @@ using System.Net;
using
System.Net.Security
;
using
System.Net.Sockets
;
using
System.Security.Authentication
;
using
Titanium.Web.Proxy.Exception
s
;
using
System.Threading.Task
s
;
using
Titanium.Web.Proxy.EventArguments
;
using
Titanium.Web.Proxy.Exceptions
;
using
Titanium.Web.Proxy.Extensions
;
using
Titanium.Web.Proxy.Helpers
;
using
Titanium.Web.Proxy.Models
;
using
Titanium.Web.Proxy.Shared
;
using
Titanium.Web.Proxy.Http
;
using
System.Threading.Tasks
;
using
Titanium.Web.Proxy.Extensions
;
using
Titanium.Web.Proxy.Models
;
using
Titanium.Web.Proxy.Network.Tcp
;
using
Titanium.Web.Proxy.Shared
;
namespace
Titanium.Web.Proxy
{
...
...
Titanium.Web.Proxy/ResponseHandler.cs
View file @
281c2a00
using
System
;
using
System.Collections.Generic
;
using
System.IO
;
using
Titanium.Web.Proxy.EventArguments
;
using
Titanium.Web.Proxy.Models
;
using
Titanium.Web.Proxy.Compression
;
using
System.Threading
;
using
System.Threading.Tasks
;
using
Titanium.Web.Proxy.Compression
;
using
Titanium.Web.Proxy.EventArguments
;
using
Titanium.Web.Proxy.Exceptions
;
using
Titanium.Web.Proxy.Extensions
;
using
Titanium.Web.Proxy.Http
;
using
Titanium.Web.Proxy.Helpers
;
using
Titanium.Web.Proxy.Http
;
using
Titanium.Web.Proxy.Models
;
using
Titanium.Web.Proxy.Network.Tcp
;
namespace
Titanium.Web.Proxy
...
...
@@ -56,7 +57,7 @@ namespace Titanium.Web.Proxy
if
(
args
.
WebSession
.
ServerConnection
!=
null
)
{
args
.
WebSession
.
ServerConnection
.
Dispose
();
ServerConnectionCount
--
;
Interlocked
.
Decrement
(
ref
serverConnectionCount
)
;
}
var
connection
=
await
GetServerConnection
(
args
);
...
...
@@ -240,7 +241,7 @@ namespace Titanium.Web.Proxy
StreamWriter
clientStreamWriter
,
TcpConnection
serverConnection
)
{
ServerConnectionCount
--
;
Interlocked
.
Decrement
(
ref
serverConnectionCount
)
;
clientStream
?.
Close
();
clientStream
?.
Dispose
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment