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
98925e20
Commit
98925e20
authored
Aug 17, 2019
by
Honfika
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Alpn adder streams removed (not used here, and still available in StremExtensions package)
parent
a5f42d7f
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
30 additions
and
278 deletions
+30
-278
ClientHelloInfo.cs
src/Titanium.Web.Proxy/StreamExtended/ClientHelloInfo.cs
+30
-2
ClientHelloAlpnAdderStream.cs
...roxy/StreamExtended/Network/ClientHelloAlpnAdderStream.cs
+0
-138
ServerHelloAlpnAdderStream.cs
...roxy/StreamExtended/Network/ServerHelloAlpnAdderStream.cs
+0
-138
No files found.
src/Titanium.Web.Proxy/StreamExtended/ClientHelloInfo.cs
View file @
98925e20
using
System
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Security.Authentication
;
using
System.Text
;
using
Titanium.Web.Proxy.StreamExtended.Models
;
...
...
@@ -51,6 +52,33 @@ namespace Titanium.Web.Proxy.StreamExtended
public
Dictionary
<
string
,
SslExtension
>
Extensions
{
get
;
set
;
}
public
SslProtocols
SslProtocol
{
get
{
int
major
=
MajorVersion
;
int
minor
=
MinorVersion
;
if
(
major
==
3
&&
minor
==
3
)
return
SslProtocols
.
Tls12
;
if
(
major
==
3
&&
minor
==
2
)
return
SslProtocols
.
Tls11
;
if
(
major
==
3
&&
minor
==
1
)
return
SslProtocols
.
Tls
;
#pragma warning disable 618
if
(
major
==
3
&&
minor
==
0
)
return
SslProtocols
.
Ssl3
;
if
(
major
==
2
&&
minor
==
0
)
return
SslProtocols
.
Ssl2
;
#pragma warning restore 618
return
SslProtocols
.
None
;
}
}
private
static
string
SslVersionToString
(
int
major
,
int
minor
)
{
string
str
=
"Unknown"
;
...
...
src/Titanium.Web.Proxy/StreamExtended/Network/ClientHelloAlpnAdderStream.cs
deleted
100644 → 0
View file @
a5f42d7f
using
System.Diagnostics
;
using
System.IO
;
using
System.Threading
;
using
Titanium.Web.Proxy.StreamExtended.BufferPool
;
namespace
Titanium.Web.Proxy.StreamExtended.Network
{
public
class
ClientHelloAlpnAdderStream
:
Stream
{
private
readonly
CustomBufferedStream
stream
;
private
readonly
IBufferPool
bufferPool
;
private
bool
called
;
public
ClientHelloAlpnAdderStream
(
CustomBufferedStream
stream
,
IBufferPool
bufferPool
)
{
this
.
stream
=
stream
;
}
public
override
void
Flush
()
{
stream
.
Flush
();
}
public
override
long
Seek
(
long
offset
,
SeekOrigin
origin
)
{
return
stream
.
Seek
(
offset
,
origin
);
}
public
override
void
SetLength
(
long
value
)
{
stream
.
SetLength
(
value
);
}
[
DebuggerStepThrough
]
public
override
int
Read
(
byte
[]
buffer
,
int
offset
,
int
count
)
{
return
stream
.
Read
(
buffer
,
offset
,
count
);
}
public
override
void
Write
(
byte
[]
buffer
,
int
offset
,
int
count
)
{
if
(
called
)
{
stream
.
Write
(
buffer
,
offset
,
count
);
return
;
}
called
=
true
;
var
ms
=
new
MemoryStream
(
buffer
,
offset
,
count
);
//this can be non async, because reads from a memory stream
var
cts
=
new
CancellationTokenSource
();
var
clientHello
=
SslTools
.
PeekClientHello
(
new
CustomBufferedStream
(
ms
,
bufferPool
,
(
int
)
ms
.
Length
),
bufferPool
,
cts
.
Token
).
Result
;
if
(
clientHello
!=
null
)
{
// 0x00 0x10: ALPN identifier
// 0x00 0x0e: length of ALPN data
// 0x00 0x0c: length of ALPN data again:)
var
dataToAdd
=
new
byte
[]
{
0x0
,
0x10
,
0x0
,
0xE
,
0x0
,
0xC
,
2
,
(
byte
)
'h'
,
(
byte
)
'2'
,
8
,
(
byte
)
'h'
,
(
byte
)
't'
,
(
byte
)
't'
,
(
byte
)
'p'
,
(
byte
)
'/'
,
(
byte
)
'1'
,
(
byte
)
'.'
,
(
byte
)
'1'
};
int
newByteCount
=
clientHello
.
Extensions
==
null
?
dataToAdd
.
Length
+
2
:
dataToAdd
.
Length
;
var
buffer2
=
new
byte
[
buffer
.
Length
+
newByteCount
];
for
(
int
i
=
0
;
i
<
buffer
.
Length
;
i
++)
{
buffer2
[
i
]
=
buffer
[
i
];
}
//this is a hacky solution, but works
int
length
=
(
buffer
[
offset
+
3
]
<<
8
)
+
buffer
[
offset
+
4
];
length
+=
newByteCount
;
buffer2
[
offset
+
3
]
=
(
byte
)(
length
>>
8
);
buffer2
[
offset
+
4
]
=
(
byte
)
length
;
length
=
(
buffer
[
offset
+
6
]
<<
16
)
+
(
buffer
[
offset
+
7
]
<<
8
)
+
buffer
[
offset
+
8
];
length
+=
newByteCount
;
buffer2
[
offset
+
6
]
=
(
byte
)(
length
>>
16
);
buffer2
[
offset
+
7
]
=
(
byte
)(
length
>>
8
);
buffer2
[
offset
+
8
]
=
(
byte
)
length
;
int
pos
=
offset
+
clientHello
.
EntensionsStartPosition
;
int
endPos
=
offset
+
clientHello
.
ClientHelloLength
;
if
(
clientHello
.
Extensions
!=
null
)
{
// update ALPN length
length
=
(
buffer
[
pos
]
<<
8
)
+
buffer
[
pos
+
1
];
length
+=
newByteCount
;
buffer2
[
pos
]
=
(
byte
)(
length
>>
8
);
buffer2
[
pos
+
1
]
=
(
byte
)
length
;
}
else
{
// add ALPN length
length
=
dataToAdd
.
Length
;
buffer2
[
pos
]
=
(
byte
)(
length
>>
8
);
buffer2
[
pos
+
1
]
=
(
byte
)
length
;
endPos
+=
2
;
}
for
(
int
i
=
0
;
i
<
dataToAdd
.
Length
;
i
++)
{
buffer2
[
endPos
+
i
]
=
dataToAdd
[
i
];
}
// copy the reamining data if any
for
(
int
i
=
clientHello
.
ClientHelloLength
;
i
<
count
;
i
++)
{
buffer2
[
offset
+
newByteCount
+
i
]
=
buffer
[
offset
+
i
];
}
buffer
=
buffer2
;
count
+=
newByteCount
;
}
stream
.
Write
(
buffer
,
offset
,
count
);
}
public
override
bool
CanRead
=>
stream
.
CanRead
;
public
override
bool
CanSeek
=>
stream
.
CanSeek
;
public
override
bool
CanWrite
=>
stream
.
CanWrite
;
public
override
long
Length
=>
stream
.
Length
;
public
override
long
Position
{
get
=>
stream
.
Position
;
set
=>
stream
.
Position
=
value
;
}
}
}
\ No newline at end of file
src/Titanium.Web.Proxy/StreamExtended/Network/ServerHelloAlpnAdderStream.cs
deleted
100644 → 0
View file @
a5f42d7f
using
System.Diagnostics
;
using
System.IO
;
using
System.Threading
;
using
Titanium.Web.Proxy.StreamExtended.BufferPool
;
namespace
Titanium.Web.Proxy.StreamExtended.Network
{
public
class
ServerHelloAlpnAdderStream
:
Stream
{
private
readonly
IBufferPool
bufferPool
;
private
readonly
CustomBufferedStream
stream
;
private
bool
called
;
public
ServerHelloAlpnAdderStream
(
CustomBufferedStream
stream
,
IBufferPool
bufferPool
)
{
this
.
bufferPool
=
bufferPool
;
this
.
stream
=
stream
;
}
public
override
void
Flush
()
{
stream
.
Flush
();
}
public
override
long
Seek
(
long
offset
,
SeekOrigin
origin
)
{
return
stream
.
Seek
(
offset
,
origin
);
}
public
override
void
SetLength
(
long
value
)
{
stream
.
SetLength
(
value
);
}
[
DebuggerStepThrough
]
public
override
int
Read
(
byte
[]
buffer
,
int
offset
,
int
count
)
{
return
stream
.
Read
(
buffer
,
offset
,
count
);
}
public
override
void
Write
(
byte
[]
buffer
,
int
offset
,
int
count
)
{
if
(
called
)
{
stream
.
Write
(
buffer
,
offset
,
count
);
return
;
}
called
=
true
;
var
ms
=
new
MemoryStream
(
buffer
,
offset
,
count
);
//this can be non async, because reads from a memory stream
var
cts
=
new
CancellationTokenSource
();
var
serverHello
=
SslTools
.
PeekServerHello
(
new
CustomBufferedStream
(
ms
,
bufferPool
,
(
int
)
ms
.
Length
),
bufferPool
,
cts
.
Token
).
Result
;
if
(
serverHello
!=
null
)
{
// 0x00 0x10: ALPN identifier
// 0x00 0x0e: length of ALPN data
// 0x00 0x0c: length of ALPN data again:)
var
dataToAdd
=
new
byte
[]
{
0x0
,
0x10
,
0x0
,
0x5
,
0x0
,
0x3
,
2
,
(
byte
)
'h'
,
(
byte
)
'2'
};
int
newByteCount
=
serverHello
.
Extensions
==
null
?
dataToAdd
.
Length
+
2
:
dataToAdd
.
Length
;
var
buffer2
=
new
byte
[
buffer
.
Length
+
newByteCount
];
for
(
int
i
=
0
;
i
<
buffer
.
Length
;
i
++)
{
buffer2
[
i
]
=
buffer
[
i
];
}
//this is a hacky solution, but works
int
length
=
(
buffer
[
offset
+
3
]
<<
8
)
+
buffer
[
offset
+
4
];
length
+=
newByteCount
;
buffer2
[
offset
+
3
]
=
(
byte
)(
length
>>
8
);
buffer2
[
offset
+
4
]
=
(
byte
)
length
;
length
=
(
buffer
[
offset
+
6
]
<<
16
)
+
(
buffer
[
offset
+
7
]
<<
8
)
+
buffer
[
offset
+
8
];
length
+=
newByteCount
;
buffer2
[
offset
+
6
]
=
(
byte
)(
length
>>
16
);
buffer2
[
offset
+
7
]
=
(
byte
)(
length
>>
8
);
buffer2
[
offset
+
8
]
=
(
byte
)
length
;
int
pos
=
offset
+
serverHello
.
EntensionsStartPosition
;
int
endPos
=
offset
+
serverHello
.
ServerHelloLength
;
if
(
serverHello
.
Extensions
!=
null
)
{
// update ALPN length
length
=
(
buffer
[
pos
]
<<
8
)
+
buffer
[
pos
+
1
];
length
+=
newByteCount
;
buffer2
[
pos
]
=
(
byte
)(
length
>>
8
);
buffer2
[
pos
+
1
]
=
(
byte
)
length
;
}
else
{
// add ALPN length
length
=
dataToAdd
.
Length
;
buffer2
[
pos
]
=
(
byte
)(
length
>>
8
);
buffer2
[
pos
+
1
]
=
(
byte
)
length
;
endPos
+=
2
;
}
for
(
int
i
=
0
;
i
<
dataToAdd
.
Length
;
i
++)
{
buffer2
[
endPos
+
i
]
=
dataToAdd
[
i
];
}
// copy the reamining data if any
for
(
int
i
=
serverHello
.
ServerHelloLength
;
i
<
count
;
i
++)
{
buffer2
[
offset
+
newByteCount
+
i
]
=
buffer
[
offset
+
i
];
}
buffer
=
buffer2
;
count
+=
newByteCount
;
}
stream
.
Write
(
buffer
,
offset
,
count
);
}
public
override
bool
CanRead
=>
stream
.
CanRead
;
public
override
bool
CanSeek
=>
stream
.
CanSeek
;
public
override
bool
CanWrite
=>
stream
.
CanWrite
;
public
override
long
Length
=>
stream
.
Length
;
public
override
long
Position
{
get
=>
stream
.
Position
;
set
=>
stream
.
Position
=
value
;
}
}
}
\ No newline at end of file
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