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
ecfc7ff5
Commit
ecfc7ff5
authored
Jan 05, 2016
by
titanium007
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove code used for HttpWebRequest
parent
c7b20f97
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
28 additions
and
98 deletions
+28
-98
NetFramework.cs
Titanium.Web.Proxy/Helpers/NetFramework.cs
+0
-64
HttpWebClient.cs
Titanium.Web.Proxy/Network/HttpWebClient.cs
+1
-1
TcpConnectionManager.cs
Titanium.Web.Proxy/Network/TcpConnectionManager.cs
+10
-3
ProxyServer.cs
Titanium.Web.Proxy/ProxyServer.cs
+1
-21
RequestHandler.cs
Titanium.Web.Proxy/RequestHandler.cs
+16
-8
Titanium.Web.Proxy.csproj
Titanium.Web.Proxy/Titanium.Web.Proxy.csproj
+0
-1
No files found.
Titanium.Web.Proxy/Helpers/NetFramework.cs
deleted
100644 → 0
View file @
c7b20f97
using
System
;
using
System.Net.Configuration
;
using
System.Reflection
;
namespace
Titanium.Web.Proxy.Helpers
{
public
class
NetFrameworkHelper
{
//Fix bug in .Net 4.0 HttpWebRequest (don't use this for 4.5 and above)
//http://stackoverflow.com/questions/856885/httpwebrequest-to-url-with-dot-at-the-end
public
static
void
UrlPeriodFix
()
{
var
getSyntax
=
typeof
(
UriParser
).
GetMethod
(
"GetSyntax"
,
BindingFlags
.
Static
|
BindingFlags
.
NonPublic
);
var
flagsField
=
typeof
(
UriParser
).
GetField
(
"m_Flags"
,
BindingFlags
.
Instance
|
BindingFlags
.
NonPublic
);
if
(
getSyntax
!=
null
&&
flagsField
!=
null
)
{
foreach
(
var
scheme
in
new
[]
{
"http"
,
"https"
})
{
var
parser
=
(
UriParser
)
getSyntax
.
Invoke
(
null
,
new
object
[]
{
scheme
});
if
(
parser
!=
null
)
{
var
flagsValue
=
(
int
)
flagsField
.
GetValue
(
parser
);
if
((
flagsValue
&
0x1000000
)
!=
0
)
flagsField
.
SetValue
(
parser
,
flagsValue
&
~
0x1000000
);
}
}
}
}
// Enable/disable useUnsafeHeaderParsing.
// See http://o2platform.wordpress.com/2010/10/20/dealing-with-the-server-committed-a-protocol-violation-sectionresponsestatusline/
public
static
bool
ToggleAllowUnsafeHeaderParsing
(
bool
enable
)
{
//Get the assembly that contains the internal class
var
assembly
=
Assembly
.
GetAssembly
(
typeof
(
SettingsSection
));
if
(
assembly
!=
null
)
{
//Use the assembly in order to get the internal type for the internal class
var
settingsSectionType
=
assembly
.
GetType
(
"System.Net.Configuration.SettingsSectionInternal"
);
if
(
settingsSectionType
!=
null
)
{
//Use the internal static property to get an instance of the internal settings class.
//If the static instance isn't created already invoking the property will create it for us.
var
anInstance
=
settingsSectionType
.
InvokeMember
(
"Section"
,
BindingFlags
.
Static
|
BindingFlags
.
GetProperty
|
BindingFlags
.
NonPublic
,
null
,
null
,
new
object
[]
{});
if
(
anInstance
!=
null
)
{
//Locate the private bool field that tells the framework if unsafe header parsing is allowed
var
aUseUnsafeHeaderParsing
=
settingsSectionType
.
GetField
(
"useUnsafeHeaderParsing"
,
BindingFlags
.
NonPublic
|
BindingFlags
.
Instance
);
if
(
aUseUnsafeHeaderParsing
!=
null
)
{
aUseUnsafeHeaderParsing
.
SetValue
(
anInstance
,
enable
);
return
true
;
}
}
}
}
return
false
;
}
}
}
\ No newline at end of file
Titanium.Web.Proxy/Network/HttpWebClient.cs
View file @
ecfc7ff5
...
@@ -26,7 +26,6 @@ namespace Titanium.Web.Proxy.Network
...
@@ -26,7 +26,6 @@ namespace Titanium.Web.Proxy.Network
public
string
RequestHost
{
get
;
set
;
}
public
string
RequestHost
{
get
;
set
;
}
public
string
RequestUrl
{
get
;
internal
set
;
}
public
string
RequestUrl
{
get
;
internal
set
;
}
public
string
RequestHostname
{
get
;
internal
set
;
}
internal
Encoding
RequestEncoding
{
get
;
set
;
}
internal
Encoding
RequestEncoding
{
get
;
set
;
}
internal
Version
RequestHttpVersion
{
get
;
set
;
}
internal
Version
RequestHttpVersion
{
get
;
set
;
}
...
@@ -95,6 +94,7 @@ namespace Titanium.Web.Proxy.Network
...
@@ -95,6 +94,7 @@ namespace Titanium.Web.Proxy.Network
public
void
SetConnection
(
TcpConnection
Connection
)
public
void
SetConnection
(
TcpConnection
Connection
)
{
{
Connection
.
LastAccess
=
DateTime
.
Now
;
ProxyClient
=
Connection
;
ProxyClient
=
Connection
;
}
}
...
...
Titanium.Web.Proxy/Network/TcpConnectionManager.cs
View file @
ecfc7ff5
...
@@ -36,10 +36,9 @@ namespace Titanium.Web.Proxy.Network
...
@@ -36,10 +36,9 @@ namespace Titanium.Web.Proxy.Network
public
static
TcpConnection
GetClient
(
string
Hostname
,
int
port
,
bool
IsSecure
)
public
static
TcpConnection
GetClient
(
string
Hostname
,
int
port
,
bool
IsSecure
)
{
{
TcpConnection
cached
=
null
;
while
(
true
)
while
(
true
)
{
{
TcpConnection
cached
=
null
;
lock
(
ConnectionCache
)
lock
(
ConnectionCache
)
{
{
cached
=
ConnectionCache
.
FirstOrDefault
(
x
=>
x
.
HostName
==
Hostname
&&
x
.
port
==
port
&&
x
.
IsSecure
==
IsSecure
&&
x
.
TcpClient
.
Connected
);
cached
=
ConnectionCache
.
FirstOrDefault
(
x
=>
x
.
HostName
==
Hostname
&&
x
.
port
==
port
&&
x
.
IsSecure
==
IsSecure
&&
x
.
TcpClient
.
Connected
);
...
@@ -55,7 +54,15 @@ namespace Titanium.Web.Proxy.Network
...
@@ -55,7 +54,15 @@ namespace Titanium.Web.Proxy.Network
break
;
break
;
}
}
return
CreateClient
(
Hostname
,
port
,
IsSecure
);
if
(
cached
==
null
)
cached
=
CreateClient
(
Hostname
,
port
,
IsSecure
);
if
(
ConnectionCache
.
Where
(
x
=>
x
.
HostName
==
Hostname
&&
x
.
port
==
port
&&
x
.
IsSecure
==
IsSecure
&&
x
.
TcpClient
.
Connected
).
Count
()
<
2
)
{
Task
.
Factory
.
StartNew
(()
=>
ReleaseClient
(
CreateClient
(
Hostname
,
port
,
IsSecure
)));
}
return
cached
;
}
}
private
static
TcpConnection
CreateClient
(
string
Hostname
,
int
port
,
bool
IsSecure
)
private
static
TcpConnection
CreateClient
(
string
Hostname
,
int
port
,
bool
IsSecure
)
...
...
Titanium.Web.Proxy/ProxyServer.cs
View file @
ecfc7ff5
...
@@ -59,27 +59,7 @@ namespace Titanium.Web.Proxy
...
@@ -59,27 +59,7 @@ namespace Titanium.Web.Proxy
public
static
event
EventHandler
<
SessionEventArgs
>
BeforeResponse
;
public
static
event
EventHandler
<
SessionEventArgs
>
BeforeResponse
;
public
static
void
Initialize
()
public
static
void
Initialize
()
{
{
ServicePointManager
.
Expect100Continue
=
false
;
WebRequest
.
DefaultWebProxy
=
null
;
ServicePointManager
.
DefaultConnectionLimit
=
int
.
MaxValue
;
ServicePointManager
.
DnsRefreshTimeout
=
3
*
60
*
1000
;
//3 minutes
ServicePointManager
.
MaxServicePointIdleTime
=
3
*
60
*
1000
;
//HttpWebRequest certificate validation callback
ServicePointManager
.
ServerCertificateValidationCallback
=
delegate
(
object
s
,
X509Certificate
certificate
,
X509Chain
chain
,
SslPolicyErrors
sslPolicyErrors
)
{
if
(
sslPolicyErrors
==
SslPolicyErrors
.
None
)
return
true
;
return
false
;
};
#if NET40
//Fix a bug in .NET 4.0
NetFrameworkHelper
.
UrlPeriodFix
();
//useUnsafeHeaderParsing
#endif
NetFrameworkHelper
.
ToggleAllowUnsafeHeaderParsing
(
true
);
Task
.
Factory
.
StartNew
(()=>
TcpConnectionManager
.
ClearIdleConnections
());
Task
.
Factory
.
StartNew
(()=>
TcpConnectionManager
.
ClearIdleConnections
());
}
}
...
...
Titanium.Web.Proxy/RequestHandler.cs
View file @
ecfc7ff5
...
@@ -115,13 +115,15 @@ namespace Titanium.Web.Proxy
...
@@ -115,13 +115,15 @@ namespace Titanium.Web.Proxy
private
static
void
HandleHttpSessionRequest
(
TcpClient
client
,
string
httpCmd
,
Stream
clientStream
,
private
static
void
HandleHttpSessionRequest
(
TcpClient
client
,
string
httpCmd
,
Stream
clientStream
,
CustomBinaryReader
clientStreamReader
,
StreamWriter
clientStreamWriter
,
string
secureTunnelHostName
)
CustomBinaryReader
clientStreamReader
,
StreamWriter
clientStreamWriter
,
string
secureTunnelHostName
)
{
{
TcpConnection
connection
=
null
;
string
lastRequestHostName
=
null
;
while
(
true
)
while
(
true
)
{
{
if
(
string
.
IsNullOrEmpty
(
httpCmd
))
if
(
string
.
IsNullOrEmpty
(
httpCmd
))
{
{
Dispose
(
client
,
clientStream
,
clientStreamReader
,
clientStreamWriter
,
null
);
Dispose
(
client
,
clientStream
,
clientStreamReader
,
clientStreamWriter
,
null
);
return
;
break
;
}
}
var
args
=
new
SessionEventArgs
(
BUFFER_SIZE
);
var
args
=
new
SessionEventArgs
(
BUFFER_SIZE
);
...
@@ -156,7 +158,6 @@ namespace Titanium.Web.Proxy
...
@@ -156,7 +158,6 @@ namespace Titanium.Web.Proxy
args
.
ProxySession
.
Request
.
RequestHeaders
=
new
List
<
HttpHeader
>();
args
.
ProxySession
.
Request
.
RequestHeaders
=
new
List
<
HttpHeader
>();
string
tmpLine
;
string
tmpLine
;
while
(!
string
.
IsNullOrEmpty
(
tmpLine
=
clientStreamReader
.
ReadLine
()))
while
(!
string
.
IsNullOrEmpty
(
tmpLine
=
clientStreamReader
.
ReadLine
()))
{
{
var
header
=
tmpLine
.
Split
(
new
char
[]
{
':'
},
2
);
var
header
=
tmpLine
.
Split
(
new
char
[]
{
':'
},
2
);
...
@@ -164,6 +165,7 @@ namespace Titanium.Web.Proxy
...
@@ -164,6 +165,7 @@ namespace Titanium.Web.Proxy
}
}
SetRequestHeaders
(
args
.
ProxySession
.
Request
.
RequestHeaders
,
args
.
ProxySession
);
SetRequestHeaders
(
args
.
ProxySession
.
Request
.
RequestHeaders
,
args
.
ProxySession
);
if
(
args
.
ProxySession
.
Request
.
UpgradeToWebSocket
)
if
(
args
.
ProxySession
.
Request
.
UpgradeToWebSocket
)
{
{
TcpHelper
.
SendRaw
(
clientStreamReader
.
BaseStream
,
httpCmd
,
args
.
ProxySession
.
Request
.
RequestHeaders
,
TcpHelper
.
SendRaw
(
clientStreamReader
.
BaseStream
,
httpCmd
,
args
.
ProxySession
.
Request
.
RequestHeaders
,
...
@@ -179,7 +181,7 @@ namespace Titanium.Web.Proxy
...
@@ -179,7 +181,7 @@ namespace Titanium.Web.Proxy
args
.
Client
.
ClientStream
=
clientStream
;
args
.
Client
.
ClientStream
=
clientStream
;
args
.
Client
.
ClientStreamReader
=
clientStreamReader
;
args
.
Client
.
ClientStreamReader
=
clientStreamReader
;
args
.
Client
.
ClientStreamWriter
=
clientStreamWriter
;
args
.
Client
.
ClientStreamWriter
=
clientStreamWriter
;
args
.
ProxySession
.
Request
.
RequestHost
name
=
args
.
ProxySession
.
Request
.
RequestUri
.
Host
;
args
.
ProxySession
.
Request
.
RequestHost
=
args
.
ProxySession
.
Request
.
RequestUri
.
Host
;
args
.
ProxySession
.
Request
.
RequestUrl
=
args
.
ProxySession
.
Request
.
RequestUri
.
OriginalString
;
args
.
ProxySession
.
Request
.
RequestUrl
=
args
.
ProxySession
.
Request
.
RequestUri
.
OriginalString
;
args
.
Client
.
ClientPort
=
((
IPEndPoint
)
client
.
Client
.
RemoteEndPoint
).
Port
;
args
.
Client
.
ClientPort
=
((
IPEndPoint
)
client
.
Client
.
RemoteEndPoint
).
Port
;
args
.
Client
.
ClientIpAddress
=
((
IPEndPoint
)
client
.
Client
.
RemoteEndPoint
).
Address
;
args
.
Client
.
ClientIpAddress
=
((
IPEndPoint
)
client
.
Client
.
RemoteEndPoint
).
Address
;
...
@@ -198,14 +200,19 @@ namespace Titanium.Web.Proxy
...
@@ -198,14 +200,19 @@ namespace Titanium.Web.Proxy
if
(
args
.
ProxySession
.
Request
.
CancelRequest
)
if
(
args
.
ProxySession
.
Request
.
CancelRequest
)
{
{
Dispose
(
client
,
clientStream
,
clientStreamReader
,
clientStreamWriter
,
args
);
Dispose
(
client
,
clientStream
,
clientStreamReader
,
clientStreamWriter
,
args
);
return
;
break
;
}
}
//construct the web request that we are going to issue on behalf of the client.
//construct the web request that we are going to issue on behalf of the client.
var
connection
=
TcpConnectionManager
.
GetClient
(
args
.
ProxySession
.
Request
.
RequestUri
.
Host
,
args
.
ProxySession
.
Request
.
RequestUri
.
Port
,
args
.
IsHttps
);
connection
=
connection
==
null
?
args
.
ProxySession
.
SetConnection
(
connection
);
TcpConnectionManager
.
GetClient
(
args
.
ProxySession
.
Request
.
RequestUri
.
Host
,
args
.
ProxySession
.
Request
.
RequestUri
.
Port
,
args
.
IsHttps
)
:
lastRequestHostName
!=
args
.
ProxySession
.
Request
.
RequestHost
?
TcpConnectionManager
.
GetClient
(
args
.
ProxySession
.
Request
.
RequestUri
.
Host
,
args
.
ProxySession
.
Request
.
RequestUri
.
Port
,
args
.
IsHttps
)
:
connection
;
lastRequestHostName
=
args
.
ProxySession
.
Request
.
RequestHost
;
args
.
ProxySession
.
SetConnection
(
connection
);
args
.
ProxySession
.
SendRequest
();
args
.
ProxySession
.
SendRequest
();
//If request was modified by user
//If request was modified by user
...
@@ -233,8 +240,6 @@ namespace Titanium.Web.Proxy
...
@@ -233,8 +240,6 @@ namespace Titanium.Web.Proxy
Dispose
(
client
,
clientStream
,
clientStreamReader
,
clientStreamWriter
,
args
);
Dispose
(
client
,
clientStream
,
clientStreamReader
,
clientStreamWriter
,
args
);
return
;
return
;
}
}
else
TcpConnectionManager
.
ReleaseClient
(
connection
);
// read the next request
// read the next request
httpCmd
=
clientStreamReader
.
ReadLine
();
httpCmd
=
clientStreamReader
.
ReadLine
();
...
@@ -245,8 +250,11 @@ namespace Titanium.Web.Proxy
...
@@ -245,8 +250,11 @@ namespace Titanium.Web.Proxy
Dispose
(
client
,
clientStream
,
clientStreamReader
,
clientStreamWriter
,
args
);
Dispose
(
client
,
clientStream
,
clientStreamReader
,
clientStreamWriter
,
args
);
break
;
break
;
}
}
}
}
if
(
connection
!=
null
)
TcpConnectionManager
.
ReleaseClient
(
connection
);
}
}
private
static
void
WriteConnectResponse
(
StreamWriter
clientStreamWriter
,
string
httpVersion
)
private
static
void
WriteConnectResponse
(
StreamWriter
clientStreamWriter
,
string
httpVersion
)
...
...
Titanium.Web.Proxy/Titanium.Web.Proxy.csproj
View file @
ecfc7ff5
...
@@ -93,7 +93,6 @@
...
@@ -93,7 +93,6 @@
<Compile
Include=
"RequestHandler.cs"
/>
<Compile
Include=
"RequestHandler.cs"
/>
<Compile
Include=
"ResponseHandler.cs"
/>
<Compile
Include=
"ResponseHandler.cs"
/>
<Compile
Include=
"Helpers\CustomBinaryReader.cs"
/>
<Compile
Include=
"Helpers\CustomBinaryReader.cs"
/>
<Compile
Include=
"Helpers\NetFramework.cs"
/>
<Compile
Include=
"Helpers\Compression.cs"
/>
<Compile
Include=
"Helpers\Compression.cs"
/>
<Compile
Include=
"ProxyServer.cs"
/>
<Compile
Include=
"ProxyServer.cs"
/>
<Compile
Include=
"EventArguments\SessionEventArgs.cs"
/>
<Compile
Include=
"EventArguments\SessionEventArgs.cs"
/>
...
...
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