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
cc339f80
Commit
cc339f80
authored
May 16, 2017
by
Honfika
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
move Dispose all to finally blocks
parent
282634a9
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
50 additions
and
106 deletions
+50
-106
CustomBinaryReader.cs
Titanium.Web.Proxy/Helpers/CustomBinaryReader.cs
+1
-1
ProxyServer.cs
Titanium.Web.Proxy/ProxyServer.cs
+1
-2
RequestHandler.cs
Titanium.Web.Proxy/RequestHandler.cs
+46
-101
ResponseHandler.cs
Titanium.Web.Proxy/ResponseHandler.cs
+2
-2
No files found.
Titanium.Web.Proxy/Helpers/CustomBinaryReader.cs
View file @
cc339f80
...
@@ -22,7 +22,7 @@ namespace Titanium.Web.Proxy.Helpers
...
@@ -22,7 +22,7 @@ namespace Titanium.Web.Proxy.Helpers
private
static
readonly
ConcurrentQueue
<
byte
[
]>
buffers
private
static
readonly
ConcurrentQueue
<
byte
[
]>
buffers
=
new
ConcurrentQueue
<
byte
[
]>
();
=
new
ConcurrentQueue
<
byte
[
]>
();
private
volatile
bool
disposed
=
false
;
private
volatile
bool
disposed
;
internal
CustomBinaryReader
(
CustomBufferedStream
stream
,
int
bufferSize
)
internal
CustomBinaryReader
(
CustomBufferedStream
stream
,
int
bufferSize
)
{
{
...
...
Titanium.Web.Proxy/ProxyServer.cs
View file @
cc339f80
...
@@ -383,8 +383,7 @@ namespace Titanium.Web.Proxy
...
@@ -383,8 +383,7 @@ namespace Titanium.Web.Proxy
#if !DEBUG
#if !DEBUG
firefoxProxySettingsManager
.
AddFirefox
();
firefoxProxySettingsManager
.
AddFirefox
();
#endif
#endif
Console
.
WriteLine
(
"Set endpoint at Ip {0} and port: {1} as System HTTPS Proxy"
,
Console
.
WriteLine
(
"Set endpoint at Ip {0} and port: {1} as System HTTPS Proxy"
,
endPoint
.
IpAddress
,
endPoint
.
Port
);
endPoint
.
IpAddress
,
endPoint
.
Port
);
}
}
/// <summary>
/// <summary>
...
...
Titanium.Web.Proxy/RequestHandler.cs
View file @
cc339f80
...
@@ -117,6 +117,7 @@ namespace Titanium.Web.Proxy
...
@@ -117,6 +117,7 @@ namespace Titanium.Web.Proxy
//Successfully managed to authenticate the client using the fake certificate
//Successfully managed to authenticate the client using the fake certificate
await
sslStream
.
AuthenticateAsServerAsync
(
certificate
,
false
,
await
sslStream
.
AuthenticateAsServerAsync
(
certificate
,
false
,
SupportedSslProtocols
,
false
);
SupportedSslProtocols
,
false
);
//HTTPS server created - we can now decrypt the client's traffic
//HTTPS server created - we can now decrypt the client's traffic
clientStream
=
new
CustomBufferedStream
(
sslStream
,
BufferSize
);
clientStream
=
new
CustomBufferedStream
(
sslStream
,
BufferSize
);
...
@@ -138,6 +139,7 @@ namespace Titanium.Web.Proxy
...
@@ -138,6 +139,7 @@ namespace Titanium.Web.Proxy
{
{
//Siphon out CONNECT request headers
//Siphon out CONNECT request headers
await
clientStreamReader
.
ReadAndIgnoreAllLinesAsync
();
await
clientStreamReader
.
ReadAndIgnoreAllLinesAsync
();
//write back successfull CONNECT response
//write back successfull CONNECT response
await
WriteConnectResponse
(
clientStreamWriter
,
version
);
await
WriteConnectResponse
(
clientStreamWriter
,
version
);
...
@@ -172,8 +174,7 @@ namespace Titanium.Web.Proxy
...
@@ -172,8 +174,7 @@ namespace Titanium.Web.Proxy
//So for HTTPS requests we would start SSL negotiation right away without expecting a CONNECT request from client
//So for HTTPS requests we would start SSL negotiation right away without expecting a CONNECT request from client
private
async
Task
HandleClient
(
TransparentProxyEndPoint
endPoint
,
TcpClient
tcpClient
)
private
async
Task
HandleClient
(
TransparentProxyEndPoint
endPoint
,
TcpClient
tcpClient
)
{
{
var
disposed
=
false
;
bool
disposed
=
false
;
var
clientStream
=
new
CustomBufferedStream
(
tcpClient
.
GetStream
(),
BufferSize
);
var
clientStream
=
new
CustomBufferedStream
(
tcpClient
.
GetStream
(),
BufferSize
);
clientStream
.
ReadTimeout
=
ConnectionTimeOutSeconds
*
1000
;
clientStream
.
ReadTimeout
=
ConnectionTimeOutSeconds
*
1000
;
...
@@ -182,52 +183,39 @@ namespace Titanium.Web.Proxy
...
@@ -182,52 +183,39 @@ namespace Titanium.Web.Proxy
CustomBinaryReader
clientStreamReader
=
null
;
CustomBinaryReader
clientStreamReader
=
null
;
StreamWriter
clientStreamWriter
=
null
;
StreamWriter
clientStreamWriter
=
null
;
if
(
endPoint
.
EnableSsl
)
try
{
{
var
sslStream
=
new
SslStream
(
clientStream
,
true
);
if
(
endPoint
.
EnableSsl
)
{
var
sslStream
=
new
SslStream
(
clientStream
,
true
);
clientStream
=
new
CustomBufferedStream
(
sslStream
,
BufferSize
);
//implement in future once SNI supported by SSL stream, for now use the same certificate
//implement in future once SNI supported by SSL stream, for now use the same certificate
var
certificate
=
CertificateManager
.
CreateCertificate
(
endPoint
.
GenericCertificateName
,
false
);
var
certificate
=
CertificateManager
.
CreateCertificate
(
endPoint
.
GenericCertificateName
,
false
);
try
{
//Successfully managed to authenticate the client using the fake certificate
//Successfully managed to authenticate the client using the fake certificate
await
sslStream
.
AuthenticateAsServerAsync
(
certificate
,
false
,
await
sslStream
.
AuthenticateAsServerAsync
(
certificate
,
false
,
SslProtocols
.
Tls
,
false
);
SslProtocols
.
Tls
,
false
);
clientStream
=
new
CustomBufferedStream
(
sslStream
,
BufferSize
);
clientStreamReader
=
new
CustomBinaryReader
(
clientStream
,
BufferSize
);
clientStreamWriter
=
new
StreamWriter
(
clientStream
)
{
NewLine
=
ProxyConstants
.
NewLine
};
//HTTPS server created - we can now decrypt the client's traffic
//HTTPS server created - we can now decrypt the client's traffic
}
}
catch
(
Exception
)
{
sslStream
.
Dispose
();
Dispose
(
sslStream
,
clientStreamReader
,
clientStreamWriter
,
null
);
disposed
=
true
;
return
;
}
}
else
{
clientStreamReader
=
new
CustomBinaryReader
(
clientStream
,
BufferSize
);
clientStreamReader
=
new
CustomBinaryReader
(
clientStream
,
BufferSize
);
clientStreamWriter
=
new
StreamWriter
(
clientStream
)
{
NewLine
=
ProxyConstants
.
NewLine
};
clientStreamWriter
=
new
StreamWriter
(
clientStream
)
{
NewLine
=
ProxyConstants
.
NewLine
};
}
//now read the request line
var
httpCmd
=
await
clientStreamReader
.
ReadLineAsync
();
//Now create the request
//now read the request line
disposed
=
await
HandleHttpSessionRequest
(
tcpClient
,
httpCmd
,
clientStream
,
clientStreamReader
,
clientStreamWriter
,
var
httpCmd
=
await
clientStreamReader
.
ReadLineAsync
();
endPoint
.
EnableSsl
?
endPoint
.
GenericCertificateName
:
null
,
endPoint
,
null
);
if
(!
disposed
)
//Now create the request
disposed
=
await
HandleHttpSessionRequest
(
tcpClient
,
httpCmd
,
clientStream
,
clientStreamReader
,
clientStreamWriter
,
endPoint
.
EnableSsl
?
endPoint
.
GenericCertificateName
:
null
,
endPoint
,
null
);
}
finally
{
{
Dispose
(
clientStream
,
clientStreamReader
,
clientStreamWriter
,
null
);
if
(!
disposed
)
{
Dispose
(
clientStream
,
clientStreamReader
,
clientStreamWriter
,
null
);
}
}
}
}
}
...
@@ -271,9 +259,10 @@ namespace Titanium.Web.Proxy
...
@@ -271,9 +259,10 @@ namespace Titanium.Web.Proxy
}
}
private
async
Task
<
bool
>
HandleHttpSessionRequestInternal
(
TcpConnection
connection
,
private
async
Task
<
bool
>
HandleHttpSessionRequestInternal
(
TcpConnection
connection
,
SessionEventArgs
args
,
bool
closeConnection
)
SessionEventArgs
args
,
bool
closeConnection
)
{
{
bool
dispose
=
true
;
try
try
{
{
args
.
WebSession
.
Request
.
RequestLocked
=
true
;
args
.
WebSession
.
Request
.
RequestLocked
=
true
;
...
@@ -281,11 +270,6 @@ namespace Titanium.Web.Proxy
...
@@ -281,11 +270,6 @@ namespace Titanium.Web.Proxy
//If request was cancelled by user then dispose the client
//If request was cancelled by user then dispose the client
if
(
args
.
WebSession
.
Request
.
CancelRequest
)
if
(
args
.
WebSession
.
Request
.
CancelRequest
)
{
{
Dispose
(
args
.
ProxyClient
.
ClientStream
,
args
.
ProxyClient
.
ClientStreamReader
,
args
.
ProxyClient
.
ClientStreamWriter
,
args
.
WebSession
.
ServerConnection
);
return
true
;
return
true
;
}
}
...
@@ -355,45 +339,38 @@ namespace Titanium.Web.Proxy
...
@@ -355,45 +339,38 @@ namespace Titanium.Web.Proxy
//already disposed inside above method
//already disposed inside above method
if
(
disposed
)
if
(
disposed
)
{
{
return
disposed
;
dispose
=
false
;
return
true
;
}
}
}
}
//if connection is closing exit
//if connection is closing exit
if
(
args
.
WebSession
.
Response
.
ResponseKeepAlive
==
false
)
if
(
args
.
WebSession
.
Response
.
ResponseKeepAlive
==
false
)
{
{
Dispose
(
args
.
ProxyClient
.
ClientStream
,
args
.
ProxyClient
.
ClientStreamReader
,
args
.
ProxyClient
.
ClientStreamWriter
,
args
.
WebSession
.
ServerConnection
);
return
true
;
return
true
;
}
}
if
(!
closeConnection
)
{
dispose
=
false
;
return
false
;
}
}
}
catch
(
Exception
e
)
catch
(
Exception
e
)
{
{
ExceptionFunc
(
new
ProxyHttpException
(
"Error occured whilst handling session request (internal)"
,
e
,
args
));
ExceptionFunc
(
new
ProxyHttpException
(
"Error occured whilst handling session request (internal)"
,
e
,
args
));
Dispose
(
args
.
ProxyClient
.
ClientStream
,
args
.
ProxyClient
.
ClientStreamReader
,
args
.
ProxyClient
.
ClientStreamWriter
,
args
.
WebSession
.
ServerConnection
);
return
true
;
return
true
;
}
}
finally
if
(
closeConnection
)
{
{
//dispose
if
(
dispose
)
Dispose
(
args
.
ProxyClient
.
ClientStream
,
{
args
.
ProxyClient
.
ClientStreamReader
,
//dispose
args
.
ProxyClient
.
ClientStreamWriter
,
Dispose
(
args
.
ProxyClient
.
ClientStream
,
args
.
ProxyClient
.
ClientStreamReader
,
args
.
ProxyClient
.
ClientStreamWriter
,
args
.
WebSession
.
ServerConnection
);
args
.
WebSession
.
ServerConnection
);
}
return
true
;
}
}
return
fals
e
;
return
tru
e
;
}
}
/// <summary>
/// <summary>
...
@@ -412,7 +389,7 @@ namespace Titanium.Web.Proxy
...
@@ -412,7 +389,7 @@ namespace Titanium.Web.Proxy
CustomBinaryReader
clientStreamReader
,
StreamWriter
clientStreamWriter
,
string
httpsHostName
,
CustomBinaryReader
clientStreamReader
,
StreamWriter
clientStreamWriter
,
string
httpsHostName
,
ProxyEndPoint
endPoint
,
List
<
HttpHeader
>
connectHeaders
)
ProxyEndPoint
endPoint
,
List
<
HttpHeader
>
connectHeaders
)
{
{
var
disposed
=
false
;
bool
disposed
=
false
;
TcpConnection
connection
=
null
;
TcpConnection
connection
=
null
;
...
@@ -422,12 +399,6 @@ namespace Titanium.Web.Proxy
...
@@ -422,12 +399,6 @@ namespace Titanium.Web.Proxy
{
{
if
(
string
.
IsNullOrEmpty
(
httpCmd
))
if
(
string
.
IsNullOrEmpty
(
httpCmd
))
{
{
Dispose
(
clientStream
,
clientStreamReader
,
clientStreamWriter
,
connection
);
disposed
=
true
;
break
;
break
;
}
}
...
@@ -489,12 +460,6 @@ namespace Titanium.Web.Proxy
...
@@ -489,12 +460,6 @@ namespace Titanium.Web.Proxy
await
CheckAuthorization
(
clientStreamWriter
,
await
CheckAuthorization
(
clientStreamWriter
,
args
.
WebSession
.
Request
.
RequestHeaders
.
Values
)
==
false
)
args
.
WebSession
.
Request
.
RequestHeaders
.
Values
)
==
false
)
{
{
Dispose
(
clientStream
,
clientStreamReader
,
clientStreamWriter
,
connection
);
disposed
=
true
;
break
;
break
;
}
}
...
@@ -515,12 +480,6 @@ namespace Titanium.Web.Proxy
...
@@ -515,12 +480,6 @@ namespace Titanium.Web.Proxy
httpCmd
,
httpVersion
,
args
.
WebSession
.
Request
.
RequestHeaders
,
args
.
IsHttps
,
httpCmd
,
httpVersion
,
args
.
WebSession
.
Request
.
RequestHeaders
,
args
.
IsHttps
,
clientStream
,
tcpConnectionFactory
);
clientStream
,
tcpConnectionFactory
);
Dispose
(
clientStream
,
clientStreamReader
,
clientStreamWriter
,
connection
);
disposed
=
true
;
break
;
break
;
}
}
...
@@ -540,24 +499,12 @@ namespace Titanium.Web.Proxy
...
@@ -540,24 +499,12 @@ namespace Titanium.Web.Proxy
if
(
args
.
WebSession
.
Request
.
CancelRequest
)
if
(
args
.
WebSession
.
Request
.
CancelRequest
)
{
{
Dispose
(
clientStream
,
clientStreamReader
,
clientStreamWriter
,
connection
);
disposed
=
true
;
break
;
break
;
}
}
//if connection is closing exit
//if connection is closing exit
if
(
args
.
WebSession
.
Response
.
ResponseKeepAlive
==
false
)
if
(
args
.
WebSession
.
Response
.
ResponseKeepAlive
==
false
)
{
{
Dispose
(
clientStream
,
clientStreamReader
,
clientStreamWriter
,
connection
);
disposed
=
true
;
break
;
break
;
}
}
...
@@ -567,18 +514,16 @@ namespace Titanium.Web.Proxy
...
@@ -567,18 +514,16 @@ namespace Titanium.Web.Proxy
catch
(
Exception
e
)
catch
(
Exception
e
)
{
{
ExceptionFunc
(
new
ProxyHttpException
(
"Error occured whilst handling session request"
,
e
,
args
));
ExceptionFunc
(
new
ProxyHttpException
(
"Error occured whilst handling session request"
,
e
,
args
));
Dispose
(
clientStream
,
clientStreamReader
,
clientStreamWriter
,
connection
);
disposed
=
true
;
break
;
break
;
}
}
}
}
return
disposed
;
if
(!
disposed
)
{
Dispose
(
clientStream
,
clientStreamReader
,
clientStreamWriter
,
connection
);
}
return
true
;
}
}
/// <summary>
/// <summary>
...
...
Titanium.Web.Proxy/ResponseHandler.cs
View file @
cc339f80
...
@@ -53,8 +53,8 @@ namespace Titanium.Web.Proxy
...
@@ -53,8 +53,8 @@ namespace Titanium.Web.Proxy
}
}
var
connection
=
await
GetServerConnection
(
args
);
var
connection
=
await
GetServerConnection
(
args
);
var
result
=
await
HandleHttpSessionRequestInternal
(
null
,
args
,
true
);
var
disposed
=
await
HandleHttpSessionRequestInternal
(
null
,
args
,
true
);
return
result
;
return
disposed
;
}
}
args
.
WebSession
.
Response
.
ResponseLocked
=
true
;
args
.
WebSession
.
Response
.
ResponseLocked
=
true
;
...
...
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