This section describes the sequence of events when Blueworx Voice Response receives a request to clear a call from the application:
Blueworx Voice Response provides error processing to ensure that a call is never left connected in the event of failure. This table shows what Blueworx Voice Response does when a channel process failure occurs at different stages during the termination of a call:
Phase |
Error Processing |
---|---|
X |
Play the technical difficulties message to the caller. This message is a prerecorded message included with Blueworx Voice Response, which says “We are experiencing technical difficulties. Please hang up and try again later”. Send the SL_CALL_ABORT_REQ primitive to the signaling process. |
Y |
None. |
Z |
None. |
The flows shown in Figure 1 are as follows:
/* Local variables */ SL_PROC_TYPE sigProc = SL_PROC_USR1 ; int iSequenceNumber ; SL_REQUEST_ST slRequest ; SL_CONFIRM_ST slConfirm ; SL_RET_CODE slRC ; . . . /* Build a CALL_TERMINATE_REQ primitive */ slRequest.id = SLID_REQUEST_ST ; slRequest.iseq_no = 0 ; /*will be allocated*/ slRequest.pidCHP = getpid() ; slRequest.slCommand.id = SL_CALL_TERMINATE_REQ ; slRequest.terminate_call_st.sigCallReference = call_ref_for_this_call ; slRequest.terminate_call_st.iChannelNo = channel ; slRequest.terminate_call_st.iVpackNo = Vpack ; . . .
slRC = sl_send_request( sigProc, & iSequenceNumber, &slRequest ) ;
slRC = sl_receive_confirm( sigProc, iSequenceNumber , timeout, &slConfirm ) ;
/* Local variables */ SL_HANDLE slHandle ; int iSequenceNumber ; SL_REQUEST_ST slRequest ; SL_CONFIRM_ST slConfirm ; SL_RET_CODE slRC ; . . . /* Build an SL_CALL_TERMINATE_CNF */ slConfirm.id = SLID_CONFIRM_ST ; slConfirm.iseq_no = slRequest.iseq_no ; slConfirm.pidCHP = slRequest.pidCHP ; slConfirm.Command.id = SL_CALL_TERMINATE_CNF ; slConfirm.Parms.call_terminate_confirm_st.sizetLength = sizeof(slConfirm.Parms.call_terminate_confirm_st) ; slConfirm.Parms.call_terminate_confirm_st.ReplyCode = SL_REPLY_SUCCESS ; slConfirm.Parms.call_terminate_confirm_st.slCallReference = slRequest.Parms.call_terminate_request_st.slCallReference ;
slRC = sl_send_confirm( slHandle, iSequenceNumber, &slConfirm ) ;