digraph "Server Connection Flow" { node [shape=box]; graph [newrank=true]; new_connection [label="New connection"]; wait_handshake [label="Wait for handshake"]; validate_register [label="Validate register"]; validate_resume [label="Validate resume"]; connected [label="Connected"]; close [label="Close connection"]; new_connection -> wait_handshake [label="Send hello"]; wait_handshake -> validate_register [label="Receive register_*"]; wait_handshake -> validate_resume [label="Receive resume"]; wait_handshake -> close [label="Bad handshake\nTimeout"]; validate_register -> close [label="Bad token\nBad register"]; validate_register -> connected [label="Valid register:\nSend ready"]; validate_resume -> close [label="Bad token\nBad resume"]; validate_resume -> wait_handshake [label="Bad session:\nsend invalidate"]; validate_resume -> connected [label="Valid resume:\nSend continue"]; }