To place a call on hold, the application invokes nccHoldCall with the handle of the call. When the application receives an NCCEVN_CALL_HELD event, the call is on hold. There is no call state transition. However, the line state goes to Idle.
To retrieve a held call, the application invokes nccRetrieveCall with the handle of the call. When the application receives an NCCEVN_CALL_RETRIEVED event, the call is retrieved. There is no call state transition. However, the line state returns to active.
To perform the transfer, the application invokes nccTransferCall with the handles of the two calls. If the transfer completes successfully, the application receives two NCCEVN_CALL_DISCONNECTED events, one for each call. The value field of each event contains NCC_DIS_TRANSFER. As the event is returned for each call, the call enters the disconnected state from the point of view of the application. The application should invoke nccReleaseCall for each call handle, to destroy the handle and release resources. NCCEVN_CALL_RELEASED indicates that a call has been released.
To perform the transfer, the application invokes nccAutomaticTransfer, with the handle of the current call, and the address of the party to transfer to (the party's extension). The current call must not be on hold. When invoking the function, the application specifies at what point the transfer is to take place. Three possibilities are supported:
The application may receive an incoming call event after invoking nccBlockCalls and before receiving NCCEVN_CALLS_BLOCKED. The application must handle the call (answering or rejecting it as necessary). Calls will not be blocked, and the application will not receive NCCEVN_CALLS_BLOCKED until there are no active calls.