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
- Transaction ensures reliable message delivery
- Dialog maintains the call context
- Media handles the actual audio stream
All three use Erlang's gen_statem
behavior for robust state management.