Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
IEC 29341-20-10 defines the CallControl service, the mandatory service template for UPnP Telephony devices. This service-level standard specifies the complete interface for managing telephony calls: initiating outgoing calls, receiving incoming calls, terminating active calls, and managing supplementary services such as hold, transfer, ad-hoc conferencing, and call park. The CallControl service is designed around a call-state machine model, where each call transitions through well-defined states driven by SOAP actions from control points and asynchronous events from the telephony network.
CallID as an opaque handle. The service should generate globally unique call identifiers (e.g., UUID-based) for each call session, independent of any provider-specific identifiers, to ensure unambiguous tracking across multi-provider telephony environments.The CallControl service models each call as an instance of a state machine with the following states: IDLE (no call), DIALLING (outgoing call being established), ALERTING (remote party is being alerted), CONNECTED (call is active), HELD (call is on hold), and TERMINATED (call has ended). The service exposes actions that trigger state transitions: Call (IDLE to DIALLING), Answer (ALERTING to CONNECTED), Hangup (any state to TERMINATED), Hold (CONNECTED to HELD), Unhold (HELD to CONNECTED), Transfer (CONNECTED to CONNECTED for the transfer target), and Conference (multiple CONNECTED calls into a single conference bridge).
| Action | From State | To State | Description |
|---|---|---|---|
| Call | IDLE | DIALLING | Initiate an outgoing call to the specified URI |
| Answer | ALERTING | CONNECTED | Accept an incoming call |
| Hangup | Any | TERMINATED | End the call |
| Hold | CONNECTED | HELD | Place the call on hold |
| Unhold | HELD | CONNECTED | Resume a held call |
| Transfer | CONNECTED | CONNECTED | Transfer call to another party |
Conference action requires special attention to media mixing. The CallControl service does not provide media processing capabilities — it relies on external media mixers or telephony infrastructure to handle audio mixing. The service’s responsibility is limited to signalling: inviting participants into the conference and tracking their participation states.The CallControl service uses GENA to push state changes to subscribed control points in real time. The key evented state variables are CallState (maps to the current state of the primary call), CallID (identifies the call instance associated with the current state), CallerID (the calling party’s identifier), CalleeID (the called party’s identifier), and LineStatus (summary status of the telephony line: idle, active, ringing). The event payload uses the LastChange XML structure, enabling batch updates when multiple state variables change simultaneously — for instance, when a call connects, CallState, CallID, and LineStatus all transition together.
DIALLING → ALERTING → CONNECTED transitions that occur within milliseconds of each other). Buffer short-interval state changes and emit a single aggregated LastChange event with the final state to reduce network overhead.CallerID state variable receives data from potentially untrusted external networks (PSTN, VoIP). Never pass raw caller ID strings to logging systems or display UIs without sanitisation. Malformed caller ID strings can contain SQL injection payloads, XSS vectors, or control characters that disrupt terminal output.A production-grade CallControl service implementation must handle several edge cases. The Call action should validate the CallURI parameter format using a URI parser that rejects malformed or unsupported URI schemes before attempting to place the call. For conference scenarios, implement a conference bridge map that tracks participant CallID values independently of individual call state machines. When a conference participant hangs up, their call transitions to TERMINATED but the conference bridge continues for remaining participants. Finally, the service must support MaxCallCount as advertised in the device description — if the maximum number of concurrent calls is reached, the Call action should fail gracefully with a MAX_CALLS_REACHED error.
MaxCallCount parameter. Each call is tracked with a unique CallID and has its own state machine instance.