# NMS ISDN Messaging transfer interface

The NMS ISDN Messaging (ACU) transfer interface creates three messages:

- ACU_TRANSFER_RQ

- ACU_CALLID_IN

- ACU_TRANSFER_CO

None of these messages have fixed mapping into Q.931 messages. Their exact mapping depends on the protocol variant being used.

## Performing a call transfer

The ACU call transfer messages are used in the following sequence during a call transfer:

Step | Action
1 | An outbound call is placed and the callid_rq field is accessed through the Acu_conn_rq_callid_rq macro. Note: See the NMS ISDN Messaging API Developer's Reference Manual for more information on the Acu_conn_rq_callid_rq macro.
2 | An ACU_CALLID_IN message is received. This message is associated with the outbound call and contains the callid for the second call.
3 | An ACU_TRANSFER_RQ message transfers the calls. This message contains the callid for the second call. The transfer request is made on the first call, not on the outbound call that was placed in step 1.
4 | An ACU_TRANSFER_CO message is received, reporting the status of the transfer request.

## ACU call transfer messages

All three messages use the same data structure for their parameters. The following section of code shows this data structure:

#define ACU_MAX_CALLID_SIZE 8
#define TRERR_UNKNOWN 0x01
#define TRERR_NOT_ALLOWED 0x02
#define TRERR_BAD_CALLID 0x03
#define TRERR_FAILED 0x04
struct acu_transfer_args
{
uchar status;
uchar callid_present;
uchar callid[ACU_MAX_CALLID_SIZE];
pad6
};
#define Acu_transfer_ ((struct acu_transfer_args FAR *)p_data) ->
#define Acu_transfer_status Acu_transfer_ status
#define Acu_transfer_callid_present Acu_transfer_ callid_present
#define Acu_transfer_a_callid Acu_transfer_ callid
#define Acu_transfer_size (Rnd_sizeof(struct acu_transfer_args))

### ACU_TRANSFER_RQ message

The ACU_TRANSFER_RQ message is an application's request for transfer. The following table provides a description of the ACU_TRANSFER_RQ associated fields:

Field | Description
status | This field is ignored for this message.
callid | The identity of the second call involved in the transfer request.
callid_present | A value of 1 indicates that the callid field contains a valid value.

### ACU_CALLID_IN message

The ACU_CALLID_IN message returns the callid produced by the stack, or reports a failure. The following table provides a description of the ACU_CALLID_IN associated fields:

Field | Description
status | Contains 0 if delivery succeeds and an error code upon failure.
callid | The identity of the second call involved in the transfer request.
callid_present | A value of 1 indicates that the callid field contains a valid value.

### ACU_TRANSFER_CO message

The ACU_TRANSFER_CO message returns the status of the requested transfer. The following table provides a description of the ACU_TRANSFER_CO associated fields:

Field | Description
status | Contains 0 if transfer succeeds and an error code upon failure.
callid | For NI2/TBCT this will contain the call tag for the notification to controller (NTC) feature. For other protocols this field is unused. Note: The call tag is not the callid.
callid_present | A value of 1 indicates that the callid field contains a valid value.

## ACU call transfer error codes

If either callid delivery or call transfer fails, the status field of the message contains one of the following error codes:

Status error name | Value | Meaning
--- | --- | ---
TRERR_UNKNOWN | 0x01 | Reason for failure is unknown.
TRERR_NOT_ALLOWED | 0x02 | Transfer or callid request is not allowed.
TRERR_BAD_CALLID | 0x03 | Callid field contains an invalid value.
TRERR_FAILED | 0x04 | General failure.

The callid_rq field in the acu_conn_rq_args structure enables a request for a callid when a call is placed. If the callid_rq field is set to 0, no request for a callid is made. Otherwise, the request is sent.

The callid_rq field is accessed through the Acu_conn_rq_callid_rq macro, as described in the NMS ISDN Messaging API Developer's Reference Manual.