1@startuml 2 3[*] --> IDLE 4 5ESTABLISHING : PROBE_TIMEOUT: SendProbeIfAnySentPktsUnacked() [default] 6 7state ACTIVE { 8 state ESTABLISHING { 9 PROACTIVE_VER_NEG : 10 PRE_INITIAL : 11 INITIAL_EXCHANGE_A : 12 REACTIVE_VER_NEG : 13 INITIAL_EXCHANGE_B : 14 INITIAL_EXCHANGE_CONTINUED : 15 HANDSHAKE : 16 HANDSHAKE_CONTINUED : 17 HANDSHAKE_COMPLETED : 18 HANDSHAKE_CONFIRMED : 19 20 [*] --> PROACTIVE_VER_NEG : use proactive VN? 21 [*] --> PRE_INITIAL : else 22 PROACTIVE_VER_NEG --> PRE_INITIAL : RX:VER_NEG 23 PROACTIVE_VER_NEG --> PROACTIVE_VER_NEG : PROBE_TIMEOUT 24 PRE_INITIAL --> INITIAL_EXCHANGE_A : ε 25 INITIAL_EXCHANGE_A --> INITIAL_EXCHANGE_B : RX:RETRY 26 INITIAL_EXCHANGE_A --> INITIAL_EXCHANGE_CONTINUED : RX:INITIAL 27 INITIAL_EXCHANGE_A --> REACTIVE_VER_NEG : RX:VER_NEG 28 29 REACTIVE_VER_NEG --> PRE_INITIAL : ε 30 31 INITIAL_EXCHANGE_B --> INITIAL_EXCHANGE_CONTINUED : RX:INITIAL 32 INITIAL_EXCHANGE_CONTINUED --> HANDSHAKE : TLS:HAVE_EL(HANDSHAKE) 33 34 HANDSHAKE --> HANDSHAKE_CONTINUED : RX:HANDSHAKE 35 HANDSHAKE_CONTINUED --> HANDSHAKE_COMPLETED : TLS:HANDSHAKE_COMPLETE 36 HANDSHAKE_COMPLETED --> HANDSHAKE_CONFIRMED : RX:1RTT[HANDSHAKE_DONE] 37 } 38 OPEN : 39 [*] --> ESTABLISHING 40} 41 42state TERMINATING { 43 CLOSING : 44 DRAINING : 45 CLOSING --> DRAINING : RX:ANY[CONNECTION_CLOSE] 46} 47 48HANDSHAKE_CONFIRMED --> OPEN : ε 49 50IDLE --> ACTIVE : APP:CONNECT 51 52IDLE --> TERMINATED : APP:CLOSE 53TERMINATING --> TERMINATED : TERMINATING_TIMEOUT, RX:STATELESS_RESET 54 55ACTIVE --> CLOSING : APP:CLOSE 56ACTIVE --> DRAINING : RX:ANY[CONNECTION_CLOSE] 57ACTIVE --> TERMINATED : IDLE_TIMEOUT, RX:STATELESS_RESET 58 59@enduml 60