(Page 3 of 6 in this chapter) Version
typedef struct ISDN_MESSAGE
{
nai_t nai; /* Network access interface index */
ent_id_t from_ent; /* Message source */
ent_id_t to_ent; /* Message destination */
sapi_t to_sapi; /* Destination Service Access Point */
union {
add_t conn_id; /* Connection identifier for the ACU layer*/
add_t crv; /*Call Reference value for NS layer. Not used. */
add_t ces; /*Connection Endpoint suffix (DL layer upper 1/2) */
add_t tei;/*Terminal Endpoint ID, DL layer lower 1/2 Not used*/
add_t chani; /* Physical layer channel identifier. Not used.*/
} add;
code_t code; /*Primitive code unique only between 2 entities*/
WORD inf0; /* Information location 0 */
WORD inf1; /* Information location 1 */
WORD inf2; /* Information location 2 */
WORD inf3; /* Information location 3 */
WORD inf4; /* Information location 4 */
WORD data_size; /* Size of data to follow */
WORD nfas_group;/* NFAS group number, used for configurations*/
/* with duplicate NAI values only */
DWORD userid; /* User ID */
} ISDN_MESSAGE;
CTAERR_INVALID_CTAHD
The CTA context handle is invalid.Events
ISDNERR_BAD_NAI
ISDNERR_BUFFER_TOO_BIG
DWORD sample_send_message (CTAHD ctahd, int mycode)
{
CTA_EVENT event;
DWORD ret;
ISDN_MESSAGE imsg={0};
code_t code;
unsigned char idata[MAX_ISDN_BUFFER_SIZE];
unsigned datasize;
;
{
;
/*
** Protocol already started
*/
imsg.nai = 0;
imsg.nfas_group = 0
/*
** when using ACU, all messages should be directed
** to ENT_ACU and the ACU_SAPI within it.
** The from field should always be ENT_API.
*/
imsg.from_ent = ENT_API;
imsg.to_ent = ENT_CC;
imsg.to_sapi = ACU_SAPI;
/*
** The connection ID is the logical connection number.
** For ACU, the lowest unused connection ID value must be used.
*/
imsg.add.conn_id = myGetLowestConnectionId();
/*
** Build the contents of the message for place call, release call, etc.
** This should fill the idata with the message contents and return the
** used part of the data buffer in datasize argument and the code for the
** function requested (ACU_CONN_RQ, ACU_CLEAR_RQ, etc).
*/
myBuildMessage( mycode, idata, &datasize, &code);
imsg.datasize = datasize;
imsg.code = code;
/*
** Add an ISDN-specific user ID to identify this message if it fails:
*/
imsg.userid = myGetNextMessageId();
ret = isdnSendMessage( ctahd, &imsg, idata, datasize);
if( ret != SUCCESS)
{
ctaGetText(ctahd, ret, errortext, 40;
printf("SEND_FAIL: %s mg id=%x\n", errortext, imsg.userid );
return MY_ERROR_SEND_FAILED;
}
myWaitForEvent( ctahd, &event)
if( event.value != SUCCESS)
{
ctaGetText(ctahd, event.value, errortext, 40);
printf("SEND_FAIL: %s mg id=%x\n", errortext, imsg.userid );
return MY_ERROR_SEND_FAILED;
}
...
}
(Page 3 of 6 in this chapter) Version