summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/uvloop/sslproto.pxd
blob: 3da10f00cf56ee227c7cda6212f73ca0acd34a1b (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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
cdef enum SSLProtocolState:
    UNWRAPPED = 0
    DO_HANDSHAKE = 1
    WRAPPED = 2
    FLUSHING = 3
    SHUTDOWN = 4


cdef enum AppProtocolState:
    # This tracks the state of app protocol (https://git.io/fj59P):
    #
    #     INIT -cm-> CON_MADE [-dr*->] [-er-> EOF?] -cl-> CON_LOST
    #
    # * cm: connection_made()
    # * dr: data_received()
    # * er: eof_received()
    # * cl: connection_lost()

    STATE_INIT = 0
    STATE_CON_MADE = 1
    STATE_EOF = 2
    STATE_CON_LOST = 3


cdef class _SSLProtocolTransport:
    cdef:
        Loop _loop
        SSLProtocol _ssl_protocol
        bint _closed
        object context


cdef class SSLProtocol:
    cdef:
        bint _server_side
        str _server_hostname
        object _sslcontext

        object _extra

        object _write_backlog
        size_t _write_buffer_size

        object _waiter
        Loop _loop
        _SSLProtocolTransport _app_transport
        bint _app_transport_created

        object _transport
        object _ssl_handshake_timeout
        object _ssl_shutdown_timeout

        object _sslobj
        object _sslobj_read
        object _sslobj_write
        object _incoming
        object _incoming_write
        object _outgoing
        object _outgoing_read
        char* _ssl_buffer
        size_t _ssl_buffer_len
        object _ssl_buffer_view
        SSLProtocolState _state
        size_t _conn_lost
        AppProtocolState _app_state

        bint _ssl_writing_paused
        bint _app_reading_paused

        size_t _incoming_high_water
        size_t _incoming_low_water
        bint _ssl_reading_paused

        bint _app_writing_paused
        size_t _outgoing_high_water
        size_t _outgoing_low_water

        object _app_protocol
        bint _app_protocol_is_buffer
        object _app_protocol_get_buffer
        object _app_protocol_buffer_updated

        object _handshake_start_time
        object _handshake_timeout_handle
        object _shutdown_timeout_handle

    cdef _set_app_protocol(self, app_protocol)
    cdef _wakeup_waiter(self, exc=*)
    cdef _get_extra_info(self, name, default=*)
    cdef _set_state(self, SSLProtocolState new_state)

    # Handshake flow

    cdef _start_handshake(self)
    cdef _check_handshake_timeout(self)
    cdef _do_handshake(self)
    cdef _on_handshake_complete(self, handshake_exc)

    # Shutdown flow

    cdef _start_shutdown(self, object context=*)
    cdef _check_shutdown_timeout(self)
    cdef _do_read_into_void(self, object context)
    cdef _do_flush(self, object context=*)
    cdef _do_shutdown(self, object context=*)
    cdef _on_shutdown_complete(self, shutdown_exc)
    cdef _abort(self, exc)

    # Outgoing flow

    cdef _write_appdata(self, list_of_data, object context)
    cdef _do_write(self)
    cdef _process_outgoing(self)

    # Incoming flow

    cdef _do_read(self)
    cdef _do_read__buffered(self)
    cdef _do_read__copied(self)
    cdef _call_eof_received(self, object context=*)

    # Flow control for writes from APP socket

    cdef _control_app_writing(self, object context=*)
    cdef size_t _get_write_buffer_size(self)
    cdef _set_write_buffer_limits(self, high=*, low=*)

    # Flow control for reads to APP socket

    cdef _pause_reading(self)
    cdef _resume_reading(self, object context)

    # Flow control for reads from SSL socket

    cdef _control_ssl_reading(self)
    cdef _set_read_buffer_limits(self, high=*, low=*)
    cdef size_t _get_read_buffer_size(self)
    cdef _fatal_error(self, exc, message=*)