Far end hang-up (common channel signaling)

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.

Figure 1. Common channel signaling process: far end hang-up
The graphic is a very simplified representation of the process described in detail in the next section. The graphic shows the phases that are explained there.

Error processing

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.

Description of flows

The flows shown in Figure 1 are as follows:

  1. X: The network notifies the signaling process that it wants to start clearing the call. The exact details depend on the signaling protocol.
  2. The signaling process now has a choice as to how it reports the clearing to Blueworx Voice Response. The signaling process can optionally report that the channel is disconnected, in which case no further voice traffic will be allowed on the line. The signaling process must report when the call is hung up.
  3. Optional: The signaling process creates an SL_CALL_DISCONNECT_IND primitive.
    /* 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 ;
  4. Y: Optional: The signaling process informs Blueworx Voice Response of the state of the call, by sending the SL_CALL_DISCONNECT_IND primitive:
    slRC = sl_send_indication( slHandle, &slIndication ) ;
  5. Mandatory: The signaling process clears the call, using the specific protocol it implements.
  6. Mandatory: After the call is fully terminated, the signaling process creates an SL_CALL_TERMINATE_IND primitive:
    /* 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 ;
  7. Z: The signaling process sends the SL_CALL_TERMINATE_IND primitive to Blueworx Voice Response:
    slRC = sl_send_indication( slHandle, &slIndication ) ;
  8. The channel process knows the call is over, and the state table can continue.