change replay_request behaviour, refs #346; test upstream proxy mode

This commit is contained in:
Maximilian Hils
2014-09-05 00:18:17 +02:00
parent b23a1aa4a4
commit a7a3b5703a
5 changed files with 223 additions and 223 deletions

View File

@@ -1203,33 +1203,28 @@ class RequestReplayThread(threading.Thread):
threading.Thread.__init__(self)
def run(self):
r = self.flow.request
form_out_backup = r.form_out
try:
r = self.flow.request
form_out_backup = r.form_out
r.form_out = self.config.http_form_out
server_address, server_ssl = False, False
# If the flow is live, r.host is already the correct upstream server unless modified by a script.
# If modified by a script, we probably want to keep the modified destination.
if self.config.get_upstream_server and not self.flow.live:
try:
# this will fail in transparent mode
upstream_info = self.config.get_upstream_server(self.flow.client_conn)
server_ssl = upstream_info[1]
server_address = upstream_info[2:]
except proxy.ProxyError:
pass
if not server_address:
server_address = (r.host, r.port)
server = ServerConnection(server_address)
server.connect()
if server_ssl or r.scheme == "https":
if self.config.http_form_out == "absolute": # form_out == absolute -> forward mode -> send CONNECT
# In all modes, we directly connect to the server displayed
if self.config.http_form_out == "absolute": # form_out == absolute -> forward mode
server_address = self.config.get_upstream_server(self.flow.client_conn)[2:]
server = ServerConnection(server_address)
server.connect()
if r.scheme == "https":
send_connect_request(server, r.host, r.port)
server.establish_ssl(self.config.clientcerts, sni=r.host)
r.form_out = "relative"
server.establish_ssl(self.config.clientcerts, sni=r.host)
else:
r.form_out = "absolute"
else:
server_address = (r.host, r.port)
server = ServerConnection(server_address)
server.connect()
if r.scheme == "https":
server.establish_ssl(self.config.clientcerts, sni=r.host)
r.form_out = "relative"
server.send(r._assemble())
self.flow.response = HTTPResponse.from_stream(server.rfile, r.method,
body_size_limit=self.config.body_size_limit)