FLOW DIAGRAM

Standalone:
Connection_add()			// ST_NOTUSED local=(null) remote=(null)
Connection_DH_init(AS_NORMAL)		// ST_DHSEND1 local=(wr)   remote=(null)
Connection_DH_senddata(TO_LOCAL)	// ST_DHRECV1 local=(rd)   remote=(null)
Connection_DH_readdata(FROM_LOCAL)	// ST_DHRECV1 local=(rd)   remote=(null)
Connection_DH_process(AS_NORMAL)	// ST_WAITINF local=(rd)   remote=(null)
Connection_process()			// ST_INPROGR local=(null) remote=(wr)
CheckConnection()			// ST_CONNECT local=(rd)   remote=(rd)

Chain:
Connection_add()                        // ST_NOTUSED local=(null) remote=(null)
Connection_DH_init(AS_NORMAL)           // ST_DHSEND1 local=(wr)   remote=(null)
Connection_DH_senddata(TO_LOCAL)        // ST_DHRECV1 local=(rd)   remote=(null)
Connection_DH_readdata(FROM_LOCAL)      // ST_DHRECV1 local=(rd)   remote=(null)
Connection_DH_process(AS_NORMAL)        // ST_WAITINF local=(rd)   remote=(null)
Connection_process()                    // ST_INPROGR local=(null) remote=(wr)
CheckConnection()                       // ST_INPROGR local=(null) remote=(null)
Connection_DH_init(AS_CHAIN)            // ST_DHSEND2 local=(null) remote=(wr)
Connection_DH_senddata(TO_REMOTE)       // ST_DHRECV2 local=(null) remote=(rd)
Connection_DH_readdata(FROM_REMOTE)     // ST_DHRECV2 local=(null) remote=(rd)
Connection_DH_process(AS_CHAIN);        // ST_CONNECT local=(rd)   remote=(rd)

Endpoint:
Connection_add()                        // ST_NOTUSED local=(null) remote=(null)
Connection_DH_init(AS_NORMAL)           // ST_DHSEND1 local=(wr)   remote=(null)
Connection_DH_senddata(TO_LOCAL)        // ST_DHRECV1 local=(rd)   remote=(null)
Connection_DH_readdata(FROM_LOCAL)      // ST_DHRECV1 local=(rd)   remote=(null)
Connection_DH_process(AS_NORMAL)        // ST_WAITINF local=(rd)   remote=(null)
Connection_process()                    // ST_INPROGR local=(null) remote=(null)
Connection_DH_init(AS_ENDPOINT)		// ST_DHSEND3 local=(wr)   remote=(null)
Connection_DH_senddata(FROM_LOCAL)	// ST_DHRECV3 local=(rd)   remote=(null)
Connection_DH_readdata(FROM_LOCAL)	// ST_DHRECV3 local=(rd)   remote=(null)
Connection_DH_process(AS_ENDPOINT)	// ST_DHRECV3 local=(rd)   remote=(null)
Connection_process()			// ST_INPROGR local=(null) remote=(wr)
CheckConnection()			// ST_CONNECT local=(rd)   remote=(rd)
