aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/protocol/http_replay.py
diff options
context:
space:
mode:
Diffstat (limited to 'libmproxy/protocol/http_replay.py')
-rw-r--r--libmproxy/protocol/http_replay.py105
1 files changed, 0 insertions, 105 deletions
diff --git a/libmproxy/protocol/http_replay.py b/libmproxy/protocol/http_replay.py
deleted file mode 100644
index 63870dfb..00000000
--- a/libmproxy/protocol/http_replay.py
+++ /dev/null
@@ -1,105 +0,0 @@
-from __future__ import (absolute_import, print_function, division)
-import threading
-import traceback
-from libmproxy.exceptions import ReplayException
-from netlib.exceptions import HttpException, TcpException
-from netlib.http import http1
-
-from ..controller import Channel
-from ..models import Error, HTTPResponse, ServerConnection, make_connect_request
-from .base import Kill
-
-
-# TODO: Doesn't really belong into libmproxy.protocol...
-
-
-class RequestReplayThread(threading.Thread):
- name = "RequestReplayThread"
-
- def __init__(self, config, flow, masterq, should_exit):
- """
- masterqueue can be a queue or None, if no scripthooks should be
- processed.
- """
- self.config, self.flow = config, flow
- if masterq:
- self.channel = Channel(masterq, should_exit)
- else:
- self.channel = None
- super(RequestReplayThread, self).__init__()
-
- def run(self):
- r = self.flow.request
- form_out_backup = r.form_out
- try:
- self.flow.response = None
-
- # If we have a channel, run script hooks.
- if self.channel:
- request_reply = self.channel.ask("request", self.flow)
- if request_reply == Kill:
- raise Kill()
- elif isinstance(request_reply, HTTPResponse):
- self.flow.response = request_reply
-
- if not self.flow.response:
- # In all modes, we directly connect to the server displayed
- if self.config.mode == "upstream":
- server_address = self.config.upstream_server.address
- server = ServerConnection(server_address, (self.config.host, 0))
- server.connect()
- if r.scheme == "https":
- connect_request = make_connect_request((r.host, r.port))
- server.wfile.write(http1.assemble_request(connect_request))
- server.wfile.flush()
- resp = http1.read_response(
- server.rfile,
- connect_request,
- body_size_limit=self.config.body_size_limit
- )
- if resp.status_code != 200:
- raise ReplayException("Upstream server refuses CONNECT request")
- server.establish_ssl(
- self.config.clientcerts,
- sni=self.flow.server_conn.sni
- )
- r.form_out = "relative"
- else:
- r.form_out = "absolute"
- else:
- server_address = (r.host, r.port)
- server = ServerConnection(server_address, (self.config.host, 0))
- server.connect()
- if r.scheme == "https":
- server.establish_ssl(
- self.config.clientcerts,
- sni=self.flow.server_conn.sni
- )
- r.form_out = "relative"
-
- server.wfile.write(http1.assemble_request(r))
- server.wfile.flush()
- self.flow.server_conn = server
- self.flow.response = HTTPResponse.wrap(http1.read_response(
- server.rfile,
- r,
- body_size_limit=self.config.body_size_limit
- ))
- if self.channel:
- response_reply = self.channel.ask("response", self.flow)
- if response_reply == Kill:
- raise Kill()
- except (ReplayException, HttpException, TcpException) as e:
- self.flow.error = Error(str(e))
- if self.channel:
- self.channel.ask("error", self.flow)
- except Kill:
- # Kill should only be raised if there's a channel in the
- # first place.
- from ..proxy.root_context import Log
- self.channel.tell("log", Log("Connection killed", "info"))
- except Exception:
- from ..proxy.root_context import Log
- self.channel.tell("log", Log(traceback.format_exc(), "error"))
- finally:
- r.form_out = form_out_backup