SL_PRIMITIVE_TYPE structure

It is useful to allow the signaling interface primitives to be examined either as a whole (for example, SL_CALL_TERMINATE_IND), or by looking at the generic name (for example, SL_CALL_ANSWER) and specific name (for example, SL_TAG_REQUEST).

typedef union { 
SL_PRIMITIVE_ID id ;
struct { 
ushort_t generic ;
ushort_t specific ;
} name;
} SL_PRIMITIVE_TYPE, *PSL_PRIMITIVE_TYPE ;
id
Identifies the primitive as a whole. Valid values, which are defined in the SL_PRIMITIVE_ID enumeration, are:
  • SL_ABORT_REQ
  • SL_CALL_ABORT_CNF
  • SL_CALL_ABORT_REQ
  • SL_CALL_ANSWER_CNF
  • SL_CALL_ANSWER_REQ
  • SL_CALL_DISCONNECT_IND
  • SL_CALL_RECONNECT_CNF
  • SL_CALL_RECONNECT_REQ
  • SL_CALL_SETUP_CNF
  • SL_CALL_SETUP_IND
  • SL_CALL_SETUP_REQ
  • SL_CALL_TERMINATE_CNF
  • SL_CALL_TERMINATE_IND
  • SL_CALL_TERMINATE_REQ
  • SL_CALL_TRANSFER_CNF
  • SL_CALL_TRANSFER_REQ
  • SL_CHANNEL_ENABLE_CNF
  • SL_CHANNEL_ENABLE_REQ
  • SL_CHANNEL_DISABLE_CNF
  • SL_CHANNEL_DISABLE_IND
  • SL_CHANNEL_DISABLE_REQ
  • SL_CHANNEL_QUIESCE_CNF
  • SL_CHANNEL_QUIESCE_REQ
  • SL_CHANNEL_ALARM_IND
  • SL_INTERNAL_COMMAND_CNF
  • SL_INTERNAL_COMMAND_REQ
  • SL_STATION_SET_MWI_CNF
  • SL_STATION_SET_MWI_REQ
  • SL_TRUNK_ALARM_CNF
  • SL_TRUNK_ALARM_IND
  • SL_TRUNK_ALARM_REQ
  • SL_TRUNK_DISABLE_CNF
  • SL_TRUNK_DISABLE_IND
  • SL_TRUNK_DISABLE_REQ
  • SL_TRUNK_ENABLE_CNF
  • SL_TRUNK_ENABLE_REQ
  • SL_TRUNK_QUIESCE_CNF
  • SL_TRUNK_QUIESCE_REQ
  • SL_TRUNK_RECONFIG_CNF
  • SL_TRUNK_RECONFIG_REQ
  • SL_USER_CNF
  • SL_USER_REQ
name.generic
Identifies the generic part of the primitive. Valid values, which are defined in the SL_GENERIC_TYPE enumeration, are:
  • SL_ABORT
  • SL_CALL_ABORT
  • SL_CALL_ANSWER
  • SL_CALL_DISCONNECT
  • SL_CALL_RECONNECT
  • SL_CALL_SETUP
  • SL_CALL_TERMINATE
  • SL_CALL_TRANSFER
  • SL_CHANNEL_ALARM
  • SL_CHANNEL_ENABLE
  • SL_CHANNEL_DISABLE
  • SL_CHANNEL_QUIESCE
  • SL_INTERNAL_COMMAND
  • SL_STATION_SET_MWI
  • SL_TRUNK_ALARM
  • SL_TRUNK_DISABLE
  • SL_TRUNK_ENABLE
  • SL_TRUNK_QUIESCE
  • SL_TRUNK_RECONFIG
  • SL_USER
name.specific
Identifies the specific part of the primitive. Valid values, which are defined in the SL_TAG_TYPE enumeration, are:
  • SL_TAG_CONFIRM
  • SL_TAG_INDICATION
  • SL_TAG_REQUEST

Unrecognized primitives

When a signaling process receives a request primitive that it does not recognize, it should create a corresponding confirm primitive with the ReplyCode field set to SL_REPLY_NOT_IMPLEMENTED. The signaling process should return the confirm primitive to Blueworx Voice Response and take no further action on the request. This is to allow for new primitives to be added to the signaling interface, without affecting the operation of existing signaling processes. The signaling process must support the primitives defined as mandatory in Signaling interface primitives.

The following code fragment may prove useful. In the example below the sizetLength and ReplyCode fields are set using the call_setup_confirmvariant of the SL_CONFIRM_PARMS_ST union. It does not matter which variant of the union is used, since the ReplyCode field is always in the same place in the structure.

SL_REQUEST_ST Request;
SL_CONFIRM_ST Confirm;
switch( Request.id )
{ 
case ... :
...
default:
/* A signaling interface primitive that this signaling process */
/* does not recognize. */
Confirm.id                       = SLID_CONFIRM_ST ;
Confirm.iseq_no                  = Request.iseq_no ;
Confirm.pidCHP                   = Request.pidCHP ;
Confirm.Command.name.generic     = Request.Command.name.generic ;
Confirm.Command.name.specific    = SL_TAG_CONFIRM ;
Confirm.Parms.call_setup_confirm_st.sizetLength =
                                   sizeof(struct _call_setup_confirm_st) ;
Confirm.Parms.call_setup_confirm_st.ReplyCode = SL_REPLY_NOT_IMPLEMENTED ;
}
slRC = sl_send_confirm( slHandle , & Confirm ) ;