aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy/protocol/http.py
diff options
context:
space:
mode:
Diffstat (limited to 'mitmproxy/protocol/http.py')
-rw-r--r--mitmproxy/protocol/http.py20
1 files changed, 19 insertions, 1 deletions
diff --git a/mitmproxy/protocol/http.py b/mitmproxy/protocol/http.py
index d81fc8ca..fbb52c92 100644
--- a/mitmproxy/protocol/http.py
+++ b/mitmproxy/protocol/http.py
@@ -7,12 +7,15 @@ import traceback
import h2.exceptions
import six
-import netlib.exceptions
from mitmproxy import exceptions
from mitmproxy import models
from mitmproxy.protocol import base
+from .websockets import WebSocketsLayer
+
+import netlib.exceptions
from netlib import http
from netlib import tcp
+from netlib import websockets
class _HttpTransmissionLayer(base.Layer):
@@ -189,6 +192,21 @@ class HttpLayer(base.Layer):
self.process_request_hook(flow)
try:
+ # WebSockets
+ if websockets.check_handshake(request.headers):
+ if websockets.check_client_version(request.headers):
+ layer = WebSocketsLayer(self, request)
+ layer()
+ return
+ else:
+ # we only support RFC6455 with WebSockets version 13
+ self.send_response(models.make_error_response(
+ 400,
+ http.status_codes.RESPONSES.get(400),
+ http.Headers(sec_websocket_version="13")
+ ))
+ return
+
if not flow.response:
self.establish_server_connection(
flow.request.host,