aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/protocol/http.py
diff options
context:
space:
mode:
Diffstat (limited to 'libmproxy/protocol/http.py')
-rw-r--r--libmproxy/protocol/http.py28
1 files changed, 27 insertions, 1 deletions
diff --git a/libmproxy/protocol/http.py b/libmproxy/protocol/http.py
index 9c143386..9bce7206 100644
--- a/libmproxy/protocol/http.py
+++ b/libmproxy/protocol/http.py
@@ -1328,8 +1328,34 @@ class HTTPHandler(ProtocolHandler):
# value at flow.server_conn
self.c.set_server_address((request.host, request.port))
flow.server_conn = self.c.server_conn
-
+
+ elif request.form_in == "relative":
+ if self.c.config.mode == "spoof":
+ # Host header
+ h = request.pretty_host(hostheader=True)
+ if h is None:
+ raise http.HttpError(
+ 400,
+ "Invalid request: No host information"
+ )
+ p = http.parse_url("http://" + h)
+ request.scheme = p[0]
+ request.host = p[1]
+ request.port = p[2]
+ self.c.set_server_address((request.host, request.port))
+ flow.server_conn = self.c.server_conn
+
+ if self.c.config.mode == "sslspoof":
+ # SNI is processed in server.py
+ if not (flow.server_conn and flow.server_conn.ssl_established):
+ print ":::::::::::::::"
+ raise http.HttpError(
+ 400,
+ "Invalid request: No host information"
+ )
+
return None
+
raise http.HttpError(
400, "Invalid HTTP request form (expected: %s, got: %s)" % (
self.expected_form_in, request.form_in