This section describes the sequence of events when Blueworx Voice Response receives a request to clear a call from the network. This is because the caller has hung up ( far end hang-up) or the network has cleared the call itself due to an error condition.
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 call hang-up:
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_HANDLE slHandle ;
int iSequenceNumber ;
SL_INDICATION_ST slIndication ;
SL_REQUEST_ST slRequest ; /*earlier request for the same call*/
SL_RET_CODE slRC ;
.
.
.
/* Build an SL_CALL_DISCONNECT_IND primitive */
slIndication.id = SLID_INDICATION_ST ;
slIndication.iseq_no = 0 ; /*signaling interface will allocate*/
slIndication.pidCHP = slRequest.pidCHP ;
slIndication.Command.id = SL_CALL_DISCONNECT_IND ;
slIndication.Parms.call_disconnect_indication_st.sizetLength
= sizeof(slIndication.Parms.call_disconnect_indication_st) ;
slIndication.Parms.call_disconnect_indication_st.slCallReference
= slRequest.Parms.call_setup_request_st.slCallReference ;
slIndication.Parms.call_disconnect_indication_st.iCause = 0 ;
slRC = sl_send_indication( slHandle, &slIndication ) ;
/* Local variables */
SL_HANDLE slHandle ;
int iSequenceNumber ;
SL_INDICATION_ST slIndication ;
SL_REQUEST_ST slRequest ; /*earlier request for the same call*/
SL_RET_CODE slRC ;
int current_channel_no ;
int current_trunk_no ;
.
.
.
/* Build an SL_CALL_TERMINATE_IND primitive */
slIndication.id = SLID_INDICATION_ST ;
slIndication.iseq_no = 0 ; /*signaling interface will allocate*/
slIndication.pidCHP = slRequest.pidCHP ;
slIndication.Command.id = SL_CALL_TERMINATE_IND ;
slIndication.Parms.call_terminate_indication_st.sizetLength
= sizeof(slIndication.Parms.call_terminate_indication_st) ;
slIndication.Parms.call_terminate_indication_st.slCallReference
= slRequest.Parms.call_setup_request_st.slCallReference ;
slIndication.Parms.call_terminate_indication_st.fFarEnd = TRUE ;
slIndication.Parms.call_terminate_indication_st.iCause = 0 ;
slIndication.Parms.call_terminate_indication_st.iChannelNo
= current_channel_no ;
slIndication.Parms.call_terminate_indication_st.iVpackNo = current_trunk_no ;
slRC = sl_send_indication( slHandle, &slIndication ) ;