PREV TOC HOME INDEX NEXT


Network Facility Request - Two B Channel Transfer (TBCT) (Synchronous Mode)

TBCT enables an ISDN PRI user to request the switch to connect together two independent calls on the user's interface. The two calls can be served by the same PRI trunk or by different PRI trunks. If the switch accepts the request, the user is released from the calls and the two calls are connected directly. Billing for the two original calls continues in the same manner as if the transfer had not occurred. As an option, TBCT also allows for transfer notification to the transferred users.

TBCT works only when all of the following conditions are met:

To invoke the TBCT feature, send a FACILITY message to the Network containing, among other things, the Call Reference Values (CRVs) of the two calls to be transferred. The gc_GetNetCRV( ) function allows applications to query the Intel® Dialogic® firmware directly for the Network Call Reference Value. (See the Global Call API Library Reference for detailed information about using this function.)

When a transferred call is disconnected, the network informs the TBCT controller by sending a NOTIFY message with the Network Call Reference Value. The application receives the GCEV_EXTENSION event (with ext_id = GCIS_EXEV_NOTIFY) event.

Figure 25 and Figure 26 provide line diagrams that illustrate the operation of the TBCT feature.

The sample code that follows Figure 29 uses the gc_GetNetCRV( ) function to acquire the Call Reference Values (CRVs) of the two calls to be transferred.

Figure 25. TBCT Invocation with Notification (Both Calls Answered)

Figure 26. TBCT Invocation with Notification (Call 1 Answered/Call 2 Alerting)

Figure 27, Figure 28, and Figure 29 illustrate the procedures for initiating a TBCT. The scenario is followed by code samples that demonstrate the use of Intel® Dialogic® API in initiating a TBCT.

Figure 27. Synchronous Programming: Initiating TBCT

Figure 28. Synchronous Programming: Initiating TBCT (Users A and B Connected)

Figure 29. Synchronous Programming: Initiating TBCT (Users A and B Disconnected)

The following example code illustrates the use of the Global Call API at various stages of the TBCT call scenario.

  1. Opening a board-level device:
LINEDEV     dti_dev1_hdl; 
      . 
      . 
 rc = gc_Open( &dti_bd_hdl, ":N_dtiB1:P_isdn", 0); 
      . 
      .  
  1. Retrieving the Network's Call Reference Value:
CRN  crn1=0; 
 unsigned short  crn1_crv=0; 
      . 
      . 
 rc = gc_GetNetCRV ( crn1, &crn1_crv );
      . 
      .  
  1. Building and sending the Facility message to initiate the TBCT:
typedef union { 
    struct { 
      unsigned char ie_id;                    // Byte 1 
      unsigned char length;                   // Byte 2 
      unsigned char prot_profile      :5;     // Byte 3, Intel Layout 
      unsigned char spare             :2; 
      unsigned char extension_1       :1; 
      unsigned char comp_type;                // Byte 4 
      unsigned char comp_length;              // Byte 5 
      unsigned char comp_data[249];           // Bytes 6 to 254 
      . 
      . 
// Preparing the Facility IE Element 
tbct_ie.bits.ie_id          = 0x1C; 
tbct_ie.bits.length         = 21;  
tbct_ie.bits.extension_1    = 1; 
tbct_ie.bits.spare          = 0x00; 
tbct_ie.bits.prot_profile   = 0x11; // Supplementary Service (ROSE)  
tbct_ie.bits.comp_type      = 0xA1; // Invoke 
tbct_ie.bits.comp_length    = 18;   // Component Length (Data Only)  
tbct_ie.bits.comp_data[0]   = 0x02; // Invoke Identifier, tag 
tbct_ie.bits.comp_data[1]   = 0x01; // Invoke Identifier, length 
tbct_ie.bits.comp_data[2]   = 0x2E; // Invoke Identifier, invoke ie (varies)  
tbct_ie.bits.comp_data[3]   = 0x06; // Operation Object, tag 
tbct_ie.bits.comp_data[4]   = 0x07; // Operation Object, length 
tbct_ie.bits.comp_data[5]   = 0x2A; // Operation Object, Operation Value 
tbct_ie.bits.comp_data[6]   = 0x86; // Operation Object, Operation Value 
tbct_ie.bits.comp_data[7]   = 0x48; // Operation Object, Operation Value 
tbct_ie.bits.comp_data[8]   = 0xCE; // Operation Object, Operation Value 
tbct_ie.bits.comp_data[9]   = 0x15; // Operation Object, Operation Value 
tbct_ie.bits.comp_data[10]  = 0x00; // Operation Object, Operation Value 
tbct_ie.bits.comp_data[11]  = 0x08; // Operation Object, Operation Value  
tbct_ie.bits.comp_data[12]  = 0x30; // Sequence, tag 
tbct_ie.bits.comp_data[13]  = 0x04; // Sequence, length (varies, combined length of Link & D Channel ID )  
tbct_ie.bits.comp_data[14]  = 0x02; // Link ID, tag 
tbct_ie.bits.comp_data[15]  = 0x02; // Link ID, length (varies) 
tbct_ie.bits.comp_data[16]  = (unsigned char) ((crn2_crv>>8)&0xFF); 
// Link ID, linkid value (varies) 
tbct_ie.bits.comp_data[17]  = (unsigned char) (crn2_crv&0xFF);      
// Link ID, inkid value (varies)  
// The D Channel Identifier is Optional 
//  tbct_ie.bits.comp_data[18]  = 0x04; // D Channel ID, tag 
//  tbct_ie.bits.comp_data[19]  = 0x04; // D Channel ID, length 
//  tbct_ie.bits.comp_data[20]  = 0x00; // D Channel ID, dchid (varies) 
//  tbct_ie.bits.comp_data[21]  = 0x00; // D Channel ID, dchid (varies) 
//  tbct_ie.bits.comp_data[22]  = 0x00; // D Channel ID, dchid (varies) 
//  tbct_ie.bits.comp_data[23]  = 0x00; // D Channel ID, dchid (varies) 
/* 
** Load all the IE's into a single IE block 
**   !!NOTE!! - IE must be added in IE ID order! 
*/ 
ie_blk.length = (5 + 18); 
for ( ctr = 0; ctr < ie_blk.length; ctr++ ) { 
      ie_blk.data[ctr] = tbct_ie.bytes[ctr]; 
} /* end if */ 
/* 
** Send out a facility message that will execute the transfer 
*/ 
rc = gc_SndMsg( crn2, SndMsg_Facility, &ie_blk ); 
 
  1. Processing the Network response to a TBCT request:
typedef union { 
    struct { 
      unsigned char ie_id;                    // Byte 1 
      unsigned char length;                   // Byte 2 
      unsigned char prot_profile      :5;     // Byte 3, Intel Layout 
      unsigned char spare             :2; 
      unsigned char extension_1       :1; 
      unsigned char comp_type;                // Byte 4 
      unsigned char comp_length;              // Byte 5 
      unsigned char comp_data[249];           // Bytes 6 to 254  
    } bits; 
unsigned char bytes[254]; 
} FACILITY_IE_LAYOUT; 
      . 
FACILITY_IE_LAYOUT  *tbct_ie; 
      . 
IE_BLK ie_list; 
      . 
ext_id = (EXTENSIONEVTBLK*) (metaevt.extevtdatap);
/*assumes 'metaevt' is filled by gc_GetMetaEvent */
switch ( event ) 
       { 
               . 
               . 
            case GCEV_EXTENSION:
                  switch (ext_id)
                  {
                           .
                           .
                           .
                       case GCIS_EXEV_FACILITY: 
                            gc_GetCallInfo( crn2, U_IES, &ie_list);;
                              .
                              .
                              . 
                  // retrieve facility IE 
            for (ie_len = 2; ie_len < ie_list.length;) 
            { 
                  if (ie_list[ie_len] == FACILITY_IE) 
      // found the facility IE 
      {  
            tbct_ie = &ie_list[ie_len];   // process the Facility IE 
tbct_ie_len = tbct_id->length; 
#define FACILITY_IE     0x1C 
#define RETURN_RESULT   0xA2 
#define RETURN_ERROR    0xA3 
#define REJECT          0xA4 
#define INVOKE_IDEN_TAG 0x02 
                              if (tbct_ie->bits.comp_type == RETURN_RESULT) 
                              // network accepted TBCT request{ 
                              . 
                              . 
// if subscribed to Notification to Controller, check for Invoke component // 
if (tbct_ie->bits.comp_data[0] == INVOKE_IDEN_TAG) 
{
      invoke_iden = tbct_ie->bits.comp_data[2]; 
                            // get invoke identifier 
}} 
                             else if (tbct_ie->bits.comp_type == RETURN_RESULT) 
                                  // network accepted TBCT request  
}
                  else 
                  { 
                  /* if it is not facility IE, go to the next IE */ 
                  /* if this is single byte IE */ 
                  if (ie_list[ie_len] & 0x80) 
                        /* increment by one byte */ 
                        ie_len = ie_len + 1; 
                  else/* otherwise increment by length of the IE */ 
                        ie_len = ie_len + ie_list[ie_len + 1]; 
            } 
            } 
            break; 
                 . 
                 . 
                 . 
                 .  
  1. Processing the Network notification for disconnecting transferred calls:
ext_id = (EXTENSIONEVTBLK*) (metaevt.extevtdatap);
/*assumes 'metaevt' is filled by gc_GetMetaEvent */ 
switch ( event ) 
       { 
               . 
               . 
            case GCEV_EXTENSION:
                  switch (ext_id)
                  {
                           .
                           .
                           .
                       case GCIS_EXEV_NOTIFY: 
                          gc_GetInfoElem( boarddev, &ie_list );
                              .
                              .
                              . 
                  // retrieve Notification IE 
            for (ie_len = 2; ie_len < ie_list.length;) 
            { 
                  if (ie_list[ie_len] == NOTIFICATION_IE) 
            // found the Notification IE
                  {  
                  } 
                  else 
                  { 
                  /* if it is not facility IE, go to the next IE */ 
                  /* if this is single byte IE */ 
                  if (ie_list[ie_len] & 0x80) 
                        /* increment by one byte */ 
                        ie_len = ie_len + 1;
                  else
                        /* otherwise increment by length of the IE */ 
                        ie_len = ie_len + ie_list[ie_len + 1]; 
                  } 
            } 
break; 
                 . 
                 . 
} 

PREV TOC HOME INDEX NEXT

Click here to contact Telecom Support Resources

Copyright 2003, Intel Corporation
All rights reserved
This page generated January, 2003