aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy/eventsequence.py
blob: 5872f607e3b7b8379340560196463497331da532 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
from mitmproxy import controller
from mitmproxy import http
from mitmproxy import tcp
from mitmproxy import websocket

Events = frozenset([
    "clientconnect",
    "clientdisconnect",
    "serverconnect",
    "serverdisconnect",

    "tcp_start",
    "tcp_message",
    "tcp_error",
    "tcp_end",

    "http_connect",
    "request",
    "requestheaders",
    "response",
    "responseheaders",
    "error",

    "websocket_handshake",
    "websocket_start",
    "websocket_message",
    "websocket_error",
    "websocket_end",

    "next_layer",

    "configure",
    "done",
    "log",
    "start",
    "tick",
])


def iterate(f):
    if isinstance(f, http.HTTPFlow):
        if f.request:
            yield "requestheaders", f
            yield "request", f
        if f.response:
            yield "responseheaders", f
            yield "response", f
        if f.error:
            yield "error", f
    elif isinstance(f, websocket.WebSocketFlow):
        messages = f.messages
        f.messages = []
        f.reply = controller.DummyReply()
        yield "websocket_start", f
        while messages:
            f.messages.append(messages.pop(0))
            yield "websocket_message", f
        if f.error:
            yield "websocket_error", f
        yield "websocket_end", f
    elif isinstance(f, tcp.TCPFlow):
        messages = f.messages
        f.messages = []
        f.reply = controller.DummyReply()
        yield "tcp_start", f
        while messages:
            f.messages.append(messages.pop(0))
            yield "tcp_message", f
        if f.error:
            yield "tcp_error", f
        yield "tcp_end", f
    else:
        raise TypeError()