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