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
aabea620
Commit
aabea620
authored
Mar 05, 2016
by
justcoding121
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #46 from justcoding121/release
Release
parents
637707ca
39bdfe5d
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
225 additions
and
51 deletions
+225
-51
README.md
README.md
+0
-1
ProxyClient.cs
Titanium.Web.Proxy/EventArguments/ProxyClient.cs
+37
-0
SessionEventArgs.cs
Titanium.Web.Proxy/EventArguments/SessionEventArgs.cs
+106
-33
BodyNotFoundException.cs
Titanium.Web.Proxy/Exceptions/BodyNotFoundException.cs
+3
-0
HttpWebRequestExtensions.cs
Titanium.Web.Proxy/Extensions/HttpWebRequestExtensions.cs
+8
-0
Compression.cs
Titanium.Web.Proxy/Helpers/Compression.cs
+36
-5
CustomBinaryReader.cs
Titanium.Web.Proxy/Helpers/CustomBinaryReader.cs
+13
-0
Firefox.cs
Titanium.Web.Proxy/Helpers/Firefox.cs
+3
-0
HttpHeader.cs
Titanium.Web.Proxy/Models/HttpHeader.cs
+7
-0
ProxyServer.cs
Titanium.Web.Proxy/ProxyServer.cs
+11
-6
RequestHandler.cs
Titanium.Web.Proxy/RequestHandler.cs
+0
-2
Titanium.Web.Proxy.csproj
Titanium.Web.Proxy/Titanium.Web.Proxy.csproj
+1
-3
Titanium.Web.Proxy.nuspec
Titanium.Web.Proxy/Titanium.Web.Proxy.nuspec
+0
-1
Titanium_Proxy_Test_Root.cer
Titanium.Web.Proxy/Titanium_Proxy_Test_Root.cer
+0
-0
No files found.
README.md
View file @
aabea620
...
...
@@ -27,7 +27,6 @@ Install by nuget:
After installing nuget package mark following files to be copied to app directory
*
makecert.exe
*
Titanium_Proxy_Test_Root.cer
Setup HTTP proxy:
...
...
Titanium.Web.Proxy/EventArguments/ProxyClient.cs
0 → 100644
View file @
aabea620
using
System
;
using
System.Collections.Generic
;
using
System.IO
;
using
System.Linq
;
using
System.Net.Sockets
;
using
System.Text
;
using
Titanium.Web.Proxy.Helpers
;
namespace
Titanium.Web.Proxy.EventArguments
{
/// <summary>
/// This class wraps Tcp connection to Server
/// </summary>
public
class
ProxyClient
{
/// <summary>
/// TcpClient used to communicate with server
/// </summary>
internal
TcpClient
TcpClient
{
get
;
set
;
}
/// <summary>
/// holds the stream to server
/// </summary>
internal
Stream
ClientStream
{
get
;
set
;
}
/// <summary>
/// Used to read line by line from server
/// </summary>
internal
CustomBinaryReader
ClientStreamReader
{
get
;
set
;
}
/// <summary>
/// used to write line by line to server
/// </summary>
internal
StreamWriter
ClientStreamWriter
{
get
;
set
;
}
}
}
Titanium.Web.Proxy/EventArguments/SessionEventArgs.cs
View file @
aabea620
This diff is collapsed.
Click to expand it.
Titanium.Web.Proxy/Exceptions/BodyNotFoundException.cs
View file @
aabea620
...
...
@@ -2,6 +2,9 @@
namespace
Titanium.Web.Proxy.Exceptions
{
/// <summary>
/// An expception thrown when body is unexpectedly empty
/// </summary>
public
class
BodyNotFoundException
:
Exception
{
public
BodyNotFoundException
(
string
message
)
...
...
Titanium.Web.Proxy/Extensions/HttpWebRequestExtensions.cs
View file @
aabea620
...
...
@@ -4,14 +4,20 @@ using Titanium.Web.Proxy.Network;
namespace
Titanium.Web.Proxy.Extensions
{
/// <summary>
/// Extensions on HttpWebSession object
/// </summary>
public
static
class
HttpWebRequestExtensions
{
//Get encoding of the HTTP request
public
static
Encoding
GetEncoding
(
this
HttpWebSession
request
)
{
try
{
//return default if not specified
if
(
request
.
Request
.
ContentType
==
null
)
return
Encoding
.
GetEncoding
(
"ISO-8859-1"
);
//extract the encoding by finding the charset
var
contentTypes
=
request
.
Request
.
ContentType
.
Split
(
';'
);
foreach
(
var
contentType
in
contentTypes
)
{
...
...
@@ -24,9 +30,11 @@ namespace Titanium.Web.Proxy.Extensions
}
catch
{
//parsing errors
// ignored
}
//return default if not specified
return
Encoding
.
GetEncoding
(
"ISO-8859-1"
);
}
}
...
...
Titanium.Web.Proxy/Helpers/Compression.cs
View file @
aabea620
...
...
@@ -4,10 +4,16 @@ using Ionic.Zlib;
namespace
Titanium.Web.Proxy.Helpers
{
/// <summary>
/// A helper to handle compression/decompression (gzip, zlib & deflate)
/// </summary>
public
class
CompressionHelper
{
private
const
int
BufferSize
=
8192
;
/// <summary>
/// compress the given bytes using zlib compression
/// </summary>
/// <param name="bytes"></param>
/// <returns></returns>
[
SuppressMessage
(
"Microsoft.Usage"
,
"CA2202:Do not dispose objects multiple times"
)]
public
static
byte
[]
CompressZlib
(
byte
[]
bytes
)
{
...
...
@@ -22,6 +28,11 @@ namespace Titanium.Web.Proxy.Helpers
}
}
/// <summary>
/// compress the given bytes using deflate compression
/// </summary>
/// <param name="bytes"></param>
/// <returns></returns>
[
SuppressMessage
(
"Microsoft.Usage"
,
"CA2202:Do not dispose objects multiple times"
)]
public
static
byte
[]
CompressDeflate
(
byte
[]
bytes
)
{
...
...
@@ -36,6 +47,11 @@ namespace Titanium.Web.Proxy.Helpers
}
}
/// <summary>
/// compress the given bytes using gzip compression
/// </summary>
/// <param name="bytes"></param>
/// <returns></returns>
[
SuppressMessage
(
"Microsoft.Usage"
,
"CA2202:Do not dispose objects multiple times"
)]
public
static
byte
[]
CompressGzip
(
byte
[]
bytes
)
{
...
...
@@ -50,12 +66,17 @@ namespace Titanium.Web.Proxy.Helpers
}
}
/// <summary>
/// decompression the gzip compressed byte array
/// </summary>
/// <param name="gzip"></param>
/// <returns></returns>
//identify why passing stream instead of bytes returns empty result
public
static
byte
[]
DecompressGzip
(
byte
[]
gzip
)
{
using
(
var
decompressor
=
new
System
.
IO
.
Compression
.
GZipStream
(
new
MemoryStream
(
gzip
),
System
.
IO
.
Compression
.
CompressionMode
.
Decompress
))
{
var
buffer
=
new
byte
[
BufferSize
];
var
buffer
=
new
byte
[
ProxyServer
.
BUFFER_SIZE
];
using
(
var
output
=
new
MemoryStream
())
{
...
...
@@ -69,11 +90,16 @@ namespace Titanium.Web.Proxy.Helpers
}
}
/// <summary>
/// decompress the deflate byte stream
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public
static
byte
[]
DecompressDeflate
(
Stream
input
)
{
using
(
var
decompressor
=
new
DeflateStream
(
input
,
CompressionMode
.
Decompress
))
{
var
buffer
=
new
byte
[
BufferSize
];
var
buffer
=
new
byte
[
ProxyServer
.
BUFFER_SIZE
];
using
(
var
output
=
new
MemoryStream
())
{
...
...
@@ -87,11 +113,16 @@ namespace Titanium.Web.Proxy.Helpers
}
}
/// <summary>
/// decompress the zlib byte stream
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public
static
byte
[]
DecompressZlib
(
Stream
input
)
{
using
(
var
decompressor
=
new
ZlibStream
(
input
,
CompressionMode
.
Decompress
))
{
var
buffer
=
new
byte
[
BufferSize
];
var
buffer
=
new
byte
[
ProxyServer
.
BUFFER_SIZE
];
using
(
var
output
=
new
MemoryStream
())
{
...
...
Titanium.Web.Proxy/Helpers/CustomBinaryReader.cs
View file @
aabea620
...
...
@@ -5,6 +5,11 @@ using System.Text;
namespace
Titanium.Web.Proxy.Helpers
{
/// <summary>
/// A custom binary reader that would allo us to read string line by line
/// using the specified encoding
/// as well as to read bytes as required
/// </summary>
public
class
CustomBinaryReader
:
BinaryReader
{
internal
CustomBinaryReader
(
Stream
stream
,
Encoding
encoding
)
...
...
@@ -12,6 +17,10 @@ namespace Titanium.Web.Proxy.Helpers
{
}
/// <summary>
/// Read a line from the byte stream
/// </summary>
/// <returns></returns>
internal
string
ReadLine
()
{
var
readBuffer
=
new
StringBuilder
();
...
...
@@ -43,6 +52,10 @@ namespace Titanium.Web.Proxy.Helpers
}
}
/// <summary>
/// Read until the last new line
/// </summary>
/// <returns></returns>
internal
List
<
string
>
ReadAllLines
()
{
string
tmpLine
;
...
...
Titanium.Web.Proxy/Helpers/Firefox.cs
View file @
aabea620
...
...
@@ -3,6 +3,9 @@ using System.IO;
namespace
Titanium.Web.Proxy.Helpers
{
/// <summary>
/// A helper class to set proxy settings for firefox
/// </summary>
public
class
FireFoxHelper
{
public
static
void
AddFirefox
()
...
...
Titanium.Web.Proxy/Models/HttpHeader.cs
View file @
aabea620
...
...
@@ -2,6 +2,9 @@
namespace
Titanium.Web.Proxy.Models
{
/// <summary>
/// Http Header object used by proxy
/// </summary>
public
class
HttpHeader
{
public
HttpHeader
(
string
name
,
string
value
)
...
...
@@ -15,6 +18,10 @@ namespace Titanium.Web.Proxy.Models
public
string
Name
{
get
;
set
;
}
public
string
Value
{
get
;
set
;
}
/// <summary>
/// Returns header as a valid header string
/// </summary>
/// <returns></returns>
public
override
string
ToString
()
{
return
string
.
Format
(
"{0}: {1}"
,
Name
,
Value
);
...
...
Titanium.Web.Proxy/ProxyServer.cs
View file @
aabea620
...
...
@@ -21,7 +21,7 @@ namespace Titanium.Web.Proxy
/// </summary>
public
partial
class
ProxyServer
{
private
static
readonly
int
BUFFER_SIZE
=
8192
;
private
static
readonly
char
[]
SemiSplit
=
{
';'
};
private
static
readonly
string
[]
ColonSpaceSplit
=
{
": "
};
...
...
@@ -34,17 +34,16 @@ namespace Titanium.Web.Proxy
private
static
readonly
byte
[]
ChunkEnd
=
Encoding
.
ASCII
.
GetBytes
(
0.
ToString
(
"x2"
)
+
Environment
.
NewLine
+
Environment
.
NewLine
);
public
static
readonly
int
BUFFER_SIZE
=
8192
;
#if NET45
internal
static
SslProtocols
SupportedProtocols
=
SslProtocols
.
Tls
|
SslProtocols
.
Tls11
|
SslProtocols
.
Tls12
|
SslProtocols
.
Ssl3
;
#else
public
static
SslProtocols
SupportedProtocols
=
SslProtocols
.
Tls
|
SslProtocols
.
Ssl3
;
internal
static
SslProtocols
SupportedProtocols
=
SslProtocols
.
Tls
|
SslProtocols
.
Ssl3
;
#endif
static
ProxyServer
()
{
CertManager
=
new
CertificateManager
(
"Titanium"
,
"Titanium Root Certificate Authority"
);
ProxyEndPoints
=
new
List
<
ProxyEndPoint
>();
Initialize
();
...
...
@@ -55,6 +54,7 @@ namespace Titanium.Web.Proxy
private
static
bool
certTrusted
{
get
;
set
;
}
private
static
bool
proxyRunning
{
get
;
set
;
}
public
static
string
RootCertificateIssuerName
{
get
;
set
;
}
public
static
string
RootCertificateName
{
get
;
set
;
}
public
static
event
EventHandler
<
SessionEventArgs
>
BeforeRequest
;
...
...
@@ -123,7 +123,6 @@ namespace Titanium.Web.Proxy
//clear any settings previously added
ProxyEndPoints
.
OfType
<
ExplicitProxyEndPoint
>().
ToList
().
ForEach
(
x
=>
x
.
IsSystemHttpsProxy
=
false
);
RootCertificateName
=
RootCertificateName
??
"Titanium_Proxy_Test_Root"
;
//If certificate was trusted by the machine
if
(
certTrusted
)
...
...
@@ -156,6 +155,12 @@ namespace Titanium.Web.Proxy
if
(
proxyRunning
)
throw
new
Exception
(
"Proxy is already running."
);
RootCertificateName
=
RootCertificateName
??
"Titanium Root Certificate Authority"
;
RootCertificateIssuerName
=
RootCertificateIssuerName
??
"Titanium"
;
CertManager
=
new
CertificateManager
(
RootCertificateIssuerName
,
RootCertificateName
);
EnableSsl
=
ProxyEndPoints
.
Any
(
x
=>
x
.
EnableSsl
);
if
(
EnableSsl
)
...
...
Titanium.Web.Proxy/RequestHandler.cs
View file @
aabea620
...
...
@@ -239,8 +239,6 @@ namespace Titanium.Web.Proxy
args
.
Client
.
ClientStreamWriter
=
clientStreamWriter
;
args
.
ProxySession
.
Request
.
Hostname
=
args
.
ProxySession
.
Request
.
RequestUri
.
Host
;
args
.
ProxySession
.
Request
.
Url
=
args
.
ProxySession
.
Request
.
RequestUri
.
OriginalString
;
args
.
Client
.
ClientPort
=
((
IPEndPoint
)
client
.
Client
.
RemoteEndPoint
).
Port
;
args
.
Client
.
ClientIpAddress
=
((
IPEndPoint
)
client
.
Client
.
RemoteEndPoint
).
Address
;
//If requested interception
...
...
Titanium.Web.Proxy/Titanium.Web.Proxy.csproj
View file @
aabea620
...
...
@@ -80,6 +80,7 @@
<Reference
Include=
"System.Xml"
/>
</ItemGroup>
<ItemGroup>
<Compile
Include=
"EventArguments\ProxyClient.cs"
/>
<Compile
Include=
"Exceptions\BodyNotFoundException.cs"
/>
<Compile
Include=
"Extensions\HttpWebResponseExtensions.cs"
/>
<Compile
Include=
"Extensions\HttpWebRequestExtensions.cs"
/>
...
...
@@ -105,9 +106,6 @@
<ItemGroup>
<None
Include=
"app.config"
/>
<None
Include=
"packages.config"
/>
<None
Include=
"Titanium_Proxy_Test_Root.cer"
>
<CopyToOutputDirectory>
PreserveNewest
</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<None
Include=
"makecert.exe"
>
...
...
Titanium.Web.Proxy/Titanium.Web.Proxy.nuspec
View file @
aabea620
...
...
@@ -21,6 +21,5 @@
<file
src=
"bin\$configuration$\Titanium.Web.Proxy.dll"
target=
"lib\net40"
/>
<file
src=
"bin\$configuration$-Net45\Titanium.Web.Proxy.dll"
target=
"lib\net45"
/>
<file
src=
"bin\$configuration$\makecert.exe"
target=
"content"
/>
<file
src=
"bin\$configuration$\Titanium_Proxy_Test_Root.cer"
target=
"content"
/>
</files>
</package>
\ No newline at end of file
Titanium.Web.Proxy/Titanium_Proxy_Test_Root.cer
deleted
100644 → 0
View file @
637707ca
File deleted
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