Step 1: Frame decoder Step 2: Validate message by confirming checksum Step 3: Convert to key/val map Step 4: Confirm all required fields are available Step 4.1: If logged in, send back msg reject Step 4.2 If not logged in, disconnect with error Step 5: Confirm first message is a logon with heartbeat Step 5.1: If not, disconnect with error Step 5.2: If so, confirm not already logged in Step 5.3: Logged in Step 5.4 Load crash-recovery msgs Step 6: Confirm incoming sequence number Step 6.1: If sequence reset with gap-fill Step 6.1.1: If new seqnum <= current seqnum: reject Step 6.1.2: reset seqnum Step 6.2: If seqnum too low, disconnect with error Step 7: Confirm compids and fix versions Step 8: Record incoming msgs Step 9: Handle session messages Heartbeat: ResendRequest: Send back requested range Logout: Step 10: Forward to application