aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/protocol2/http.py
diff options
context:
space:
mode:
authorThomas Kriechbaumer <thomas@kriechbaumer.name>2015-08-18 13:43:26 +0200
committerThomas Kriechbaumer <thomas@kriechbaumer.name>2015-08-19 09:43:43 +0200
commit9bae97eb17ed66a33b5b988c6857ca6c9fae8e22 (patch)
tree7cd6712657c5328d5c32ac3231becc6ab83bf441 /libmproxy/protocol2/http.py
parentab1549e0eff98588211346aada44549311f04938 (diff)
downloadmitmproxy-9bae97eb17ed66a33b5b988c6857ca6c9fae8e22.tar.gz
mitmproxy-9bae97eb17ed66a33b5b988c6857ca6c9fae8e22.tar.bz2
mitmproxy-9bae97eb17ed66a33b5b988c6857ca6c9fae8e22.zip
http2: fix connection preface and wrappers
Diffstat (limited to 'libmproxy/protocol2/http.py')
-rw-r--r--libmproxy/protocol2/http.py16
1 files changed, 7 insertions, 9 deletions
diff --git a/libmproxy/protocol2/http.py b/libmproxy/protocol2/http.py
index db5aabaf..e73bbb61 100644
--- a/libmproxy/protocol2/http.py
+++ b/libmproxy/protocol2/http.py
@@ -10,7 +10,7 @@ from libmproxy.protocol import KILL
from libmproxy.protocol.http import HTTPFlow
from libmproxy.protocol.http_wrappers import HTTPResponse, HTTPRequest
from netlib import tcp
-from netlib.http import status_codes, http1, HttpErrorConnClosed, HttpError
+from netlib.http import status_codes, http1, http2, HttpErrorConnClosed, HttpError
from netlib.http.semantics import CONTENT_MISSING
from netlib import odict
from netlib.tcp import NetLibError, Address
@@ -64,6 +64,7 @@ class Http2Layer(Layer):
self.server_protocol = HTTP2Protocol(self.server_conn)
def __call__(self):
+ self.server_protocol.perform_connection_preface()
layer = HttpLayer(self, self.mode)
layer()
@@ -166,10 +167,6 @@ class UpstreamConnectLayer(Layer):
self.ctx.set_server(address, server_tls, sni, depth-1)
class HttpLayer(Layer):
- """
- HTTP 1 Layer
- """
-
def __init__(self, ctx, mode):
super(HttpLayer, self).__init__(ctx)
self.mode = mode
@@ -337,15 +334,18 @@ class HttpLayer(Layer):
self.reconnect()
get_response()
+ if isinstance(self.server_protocol, http2.HTTP2Protocol):
+ flow.response.stream_id = flow.request.stream_id
+
# call the appropriate script hook - this is an opportunity for an
# inline script to set flow.stream = True
flow = self.channel.ask("responseheaders", flow)
if flow is None or flow == KILL:
raise Kill()
- if flow.response.stream and isinstance(self.server_protocol, http1.HTTP1Protocol):
+ if flow.response.stream:
flow.response.content = CONTENT_MISSING
- else:
+ elif isinstance(self.server_protocol, http1.HTTP1Protocol):
flow.response.content = self.server_protocol.read_http_body(
flow.response.headers,
self.config.body_size_limit,
@@ -466,6 +466,4 @@ class HttpLayer(Layer):
self.server_conn.send(self.server_protocol.assemble(message))
def send_to_client(self, message):
- # FIXME
- # - possibly do some http2 stuff here
self.client_conn.send(self.client_protocol.assemble(message))