# Protocol capabilities

Different protocols support different call control features. After a protocol is started, the application can query it to determine the features it supports. This information is important for an application supporting multiple protocols because it determines which function calls are valid, and which events the application can expect to receive.

To retrieve protocol capability information, the application calls nccQueryCapability. This synchronous function returns a capabilitymask, where each bit in the mask indicates if the protocol supports a particular capability. The following table describes each bit in the capabilitymask:

Mnemonic | If the bit is set...
--- | ---
NCC_CAP_ACCEPT_CALL | The protocol supports the accepting call state in the inbound call control state machine. The application can invoke nccAcceptCall.
NCC_CAP_SET_BILLING | The application can set billing parameters using nccSetBilling.
NCC_CAP_OVERLAPPED_SENDING | The protocol supports overlapped sending of digits, using nccSendDigits.
NCC_CAP_HOLD_CALL | The protocol allows calls to be placed on hold using nccHoldCall. Calls can then be retrieved using nccRetrieveCall.
NCC_CAP_SUPERVISED_TRANSFER | The protocol supports supervised call transfer. The application can invoke nccTransferCall.
NCC_CAP_AUTOMATIC_TRANSFER | The protocol supports blind call transfer. The application can invoke nccAutomaticTransfer.
NCC_CAP_TWOCHANNEL_TRANSFER | The protocol supports two channel call transfer. The application can invoke nccTransferCall.
NCC_CAP_EXTENDED_CALL_STATUS | The protocol supports the ability to get protocol-specific call status information using nccGetExtendedCallStatus.
NCC_CAP_SEND_CALL_MESSAGE | The protocol supports sending of a protocol-specific call message using nccSendCallMessage.
NCC_CAP_SEND_LINE_MESSAGE | The protocol supports sending of a protocol-specific line message using nccSendLineMessage.
NCC_CAP_HOLD_IN_ANY_STATE | The protocol allows a call to be placed on hold in any state. By default, a call can be placed on hold only if it is in the connected state.
NCC_CAP_DISCONNECT_IN_ANY_STATE | The application can call nccDisconnectCall regardless of the call state. If this bit is not set, nccDisconnectCall can only be invoked in the connected or placing call states.
NCC_CAP_MEDIA_IN_SETUP | The protocol contains embedded media capability. The application can: Use play ring and user audio modes when invoking nccAcceptCall. Use play ring, play busy, play reorder, and play user audio modes when invoking nccRejectCall.
NCC_CAP_CALLER_ID | The protocol supports caller ID. Caller ID information is returned in the callingaddr field in the NCC_CALL_STATUS structure.

If the capabilities of a protocol change, the application receives NCCEVN_CAPABILITY_UPDATE. The application can then invoke nccQueryCapability to determine the changes.