139 lines
3.5 KiB
Cython
139 lines
3.5 KiB
Cython
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=*)
|