singe/thirdparty/openssl/doc/designs/quic-design/images/connection-state-machine.plantuml
2023-11-16 22:15:24 -06:00

59 lines
1.7 KiB
Text

@startuml
[*] --> IDLE
ESTABLISHING : PROBE_TIMEOUT: SendProbeIfAnySentPktsUnacked() [default]
state ACTIVE {
state ESTABLISHING {
PROACTIVE_VER_NEG :
PRE_INITIAL :
INITIAL_EXCHANGE_A :
REACTIVE_VER_NEG :
INITIAL_EXCHANGE_B :
INITIAL_EXCHANGE_CONTINUED :
HANDSHAKE :
HANDSHAKE_CONTINUED :
HANDSHAKE_COMPLETED :
HANDSHAKE_CONFIRMED :
[*] --> PROACTIVE_VER_NEG : use proactive VN?
[*] --> PRE_INITIAL : else
PROACTIVE_VER_NEG --> PRE_INITIAL : RX:VER_NEG
PROACTIVE_VER_NEG --> PROACTIVE_VER_NEG : PROBE_TIMEOUT
PRE_INITIAL --> INITIAL_EXCHANGE_A : ε
INITIAL_EXCHANGE_A --> INITIAL_EXCHANGE_B : RX:RETRY
INITIAL_EXCHANGE_A --> INITIAL_EXCHANGE_CONTINUED : RX:INITIAL
INITIAL_EXCHANGE_A --> REACTIVE_VER_NEG : RX:VER_NEG
REACTIVE_VER_NEG --> PRE_INITIAL : ε
INITIAL_EXCHANGE_B --> INITIAL_EXCHANGE_CONTINUED : RX:INITIAL
INITIAL_EXCHANGE_CONTINUED --> HANDSHAKE : TLS:HAVE_EL(HANDSHAKE)
HANDSHAKE --> HANDSHAKE_CONTINUED : RX:HANDSHAKE
HANDSHAKE_CONTINUED --> HANDSHAKE_COMPLETED : TLS:HANDSHAKE_COMPLETE
HANDSHAKE_COMPLETED --> HANDSHAKE_CONFIRMED : RX:1RTT[HANDSHAKE_DONE]
}
OPEN :
[*] --> ESTABLISHING
}
state TERMINATING {
CLOSING :
DRAINING :
CLOSING --> DRAINING : RX:ANY[CONNECTION_CLOSE]
}
HANDSHAKE_CONFIRMED --> OPEN : ε
IDLE --> ACTIVE : APP:CONNECT
IDLE --> TERMINATED : APP:CLOSE
TERMINATING --> TERMINATED : TERMINATING_TIMEOUT, RX:STATELESS_RESET
ACTIVE --> CLOSING : APP:CLOSE
ACTIVE --> DRAINING : RX:ANY[CONNECTION_CLOSE]
ACTIVE --> TERMINATED : IDLE_TIMEOUT, RX:STATELESS_RESET
@enduml