Merge pull request #2499 from mhils/rawtcp

Re-add rawtcp mode.
This commit is contained in:
Maximilian Hils 2017-08-04 04:02:12 +02:00 committed by GitHub
commit e0ca9c3a98
2 changed files with 14 additions and 4 deletions

View File

@ -173,7 +173,7 @@ class Options(optmanager.OptManager):
)
self.add_option(
"server", bool, True,
"Start a proxy server."
"Start a proxy server. Enabled by default."
)
self.add_option(
"server_replay_nopop", bool, False,
@ -406,8 +406,9 @@ class Options(optmanager.OptManager):
)
self.add_option(
"rawtcp", bool, False,
"Enable/disable experimental raw TCP support. "
"Disabled by default. "
"Enable/disable experimental raw TCP support. TCP connections starting with non-ascii "
"bytes are treated as if they would match tcp_hosts. The heuristic is very rough, use "
"with caution. Disabled by default. "
)
self.add_option(

View File

@ -104,7 +104,16 @@ class RootContext:
if alpn == b'http/1.1':
return protocol.Http1Layer(top_layer, http.HTTPMode.transparent)
# 6. Assume HTTP1 by default
# 6. Check for raw tcp mode
is_ascii = (
len(d) == 3 and
# expect A-Za-z
all(65 <= x <= 90 or 97 <= x <= 122 for x in d)
)
if self.config.options.rawtcp and not is_ascii:
return protocol.RawTCPLayer(top_layer)
# 7. Assume HTTP1 by default
return protocol.Http1Layer(top_layer, http.HTTPMode.transparent)
def log(self, msg, level, subs=()):