Parrot Platform State Machines

This guide shows the simplified state machines used in Parrot Platform for handling SIP transactions, dialogs, and media sessions.

Transaction State Machine

The transaction state machine handles reliable SIP message delivery:

stateDiagram-v2
    [*] --> Trying: New Transaction
    
    Trying --> Proceeding: 1xx Response
    Trying --> Completed: Final Response
    
    Proceeding --> Completed: Final Response
    
    Completed --> Confirmed: ACK Received
    Completed --> Terminated: Timer Expires
    
    Confirmed --> Terminated: Timer Expires
    
    Terminated --> [*]
    
    note right of Trying: Initial state
    note right of Proceeding: Provisional responses
    note right of Completed: Final response sent/received
    note right of Confirmed: INVITE only
    note right of Terminated: Cleanup

Dialog State Machine

The dialog state machine manages SIP dialog lifecycle:

stateDiagram-v2
    [*] --> Early: INVITE Sent/Received
    
    Early --> Confirmed: 2xx Response
    Early --> Terminated: Error/Cancel
    
    Confirmed --> Terminated: BYE Request
    
    Terminated --> [*]
    
    note right of Early: Dialog establishing
    note right of Confirmed: Active dialog
    note right of Terminated: Dialog ended

Media Session State Machine

The media session state machine handles audio streaming:

stateDiagram-v2
    [*] --> Idle: Session Created
    
    Idle --> Negotiating: SDP Offer
    
    Negotiating --> Ready: SDP Answer
    Negotiating --> Failed: Error
    
    Ready --> Active: Start RTP
    
    Active --> Stopping: End Call
    
    Stopping --> [*]
    Failed --> [*]
    
    note right of Idle: No media yet
    note right of Negotiating: Exchange SDP
    note right of Ready: Ports allocated
    note right of Active: Audio flowing
    note right of Stopping: Cleanup

How They Work Together

  1. Transaction ensures reliable message delivery
  2. Dialog maintains the call context
  3. Media handles the actual audio stream

All three use Erlang's gen_statem behavior for robust state management.