Cisco TAPI Developer Guide for Cisco CallManager 4.2(1)
Cisco Device Specific Extensions
Downloads: This chapterpdf (PDF - 496.0KB) The complete bookPDF (PDF - 5.25MB) | Feedback

Cisco Device Specific Extensions

Table Of Contents

Cisco Device Specific Extensions

Cisco Line Device Specific Extensions

Structures

LINEDEVCAPS Device Specific Extensions

CCiscoLineDevSpecific

Description

Header File

Class Detail

Functions

Parameter

Subclasses

Enumeration

Message Waiting

Description

Class Detail

Parameters

Message Waiting Dirn

Description

Class Detail

Parameters

Audio Stream Control

Description

Class Detail

Parameters

Set Status Messages

Description

Class Detail

Parameters

Swap-Hold/SetupTransfer

Description

Class Details

Parameters

Redirect Reset Original Called ID

Description

Class Details

Parameters

Port Registration per Call

Description

Class Details

Parameters

Setting RTP Parameters for Call

Description

Class Details

Parameters

Redirect Set Original Called ID

Description

Class Details

Parameters

Join

Description

Class Details

Parameters

Redirect FAC CMC

Description

Class Detail

Parameters

Blind Transfer FAC CMC

Description

Class Detail

Parameters

CTI Port Third Party Monitor

Description

Class Detail

Parameters

Cisco Phone Device Specific Extensions

CCiscoPhoneDevSpecific

Description

Header File

Class Detail

Functions

Parameter

Subclasses

Enumeration

Device Data Passthrough

Description

Class Detail

Parameters

Messages

Description

Call Tone Changed Events

Message Sequence Charts

Manual Outbound Call

Blind Transfer

Redirect Set original Called (TxToVM)

Shared Line Scenarios

Presentation Indication

Blind Transfer through Translation Pattern

Forced Authorization and Client Matter Code Scenarios

Manual Call to a Destination that Requires both FAC and CMC

lineMakeCall to a Destination that Requires an FAC

lineMakeCall to a Destination that Requires Both FAC and CMC


Cisco Device Specific Extensions


This chapter describes the Cisco-specific TAPI extensions. It describes how to invoke Cisco-specific TAPI extensions with the lineDevSpecific function. It also describes a set of classes that can be used when calling phoneDevSpecific.

Cisco Line Device Specific Extensions

CiscoLineDevSpecific, the CCiscoPhoneDevSpecific class, represents the parent class.

Table 3-1 lists the subclasses of Cisco Line Device Specific Extensions.

Table 3-1 Cisco-Specific TAPI functions 

Cisco Functions
Synopsis

CCiscoLineDevSpecific

The CCiscoLineDevSpecific class specifies the parent class to the following classes.

Message Waiting

The CCiscoLineDevSpecificMsgWaiting class turns the message waiting lamp on or off for the line that the hLine parameter specifies.

Message Waiting Dirn

The CCiscoLineDevSpecificMsgWaiting class turns the message waiting lamp on or off for the line that a parameter and remains independent of the hLine parameter specifies.

Audio Stream Control

The CCiscoLineDevSpecificUserControlRTPStream class controls the audio stream for a line.

Set Status Messages

The CCiscoLineDevSpecificSetStatusMsgs class controls the reporting of certain line device specific messages for a line. The application receives LINE_DEVSPECIFIC messages to signal when to stop and start streaming RTP audio.

Redirect Reset Original Called ID

This is not supported in Cisco TSP 4.0.
The CCiscoLineDevSpecificSwapHoldSetupTransfer class performs a setupTransfer between a call that is in CONNECTED state and a call that is in ONHOLD state. This function will change the state of the connected call to ONHOLDPENDTRANSFER state and the ONHOLD call to CONNECTED state. This action will then allow a completeTransfer to be performed on the two calls.

Redirect Reset Original Called ID

The CCiscoLineDevSpecificRedirectResetOrigCalled class gets used to redirects a call to another party while resetting the original called ID of the call to the destination of the redirect.

Port Registration per Call

The CciscoLineDevSpecificPortRegistrationPerCall class gets used to register a CTI Port or route Point for the Dynamic Port Registration feature, which allows applications to specify the IP address and UDP port number on a call-by-call basis.

Setting RTP Parameters for Call

The CciscoLineDevSpecificSetRTPParamsForCall class sets the IP address and UDP port number for the specified call.

Redirect Set Original Called ID

The CciscoLineDevSpecificSetOrigCalled class gets used to redirect a call to another party while setting the original called ID of the call to any other party.

Join

The CciscoLineDevSpecificJoin class gets used to join two or more calls into one conference call.

Redirect FAC CMC

The CCiscoLineDevSpecificRedirectFACCMC class is used to redirect a call to another party while including a FAC, CMC, or both.

Blind Transfer FAC CMC

The CCiscoLineDevSpecificBlindTransferFACCMC class is used to blind transfer a call to another party while including a FAC, CMC, or both.

CTI Port Third Party Monitoring

The CCiscoLineDevSpecificCTIPortThirdPartyMonitor class is used to open a CTI port in third party mode.


Structures

This section describes device-specific extensions that have been made to the TAPI structures that the Cisco TSP supports.

LINEDEVCAPS Device Specific Extensions

Description

The LineDevCaps_DevSpecificData structure describes the device-specific extensions that the Cisco TSP has made to the LINEDEVCAPS structure.

Detail

typedef struct LineDevCaps_DevSpecificData
{
	DWORD m_DevSpecificFlags;
}LINEDEVCAPS_DEV_SPECIFIC_DATA;

Parameters

DWORD m_DevSpecificFlags

A bit array that identifies device specific properties for the line. The bits definition follows:

LINEDEVCAPSDEVSPECIFIC_PARKDN (0x00000001)—Indicates whether this line is a Call Park DN.


Note This extension is only available if extension version 3.0 (0x00030000) or higher is negotiated.


CCiscoLineDevSpecific

CCiscoLineDevSpecific
  |
  +-- CCiscoLineDevSpecificMsgWaiting
  |
  +-- CCiscoLineDevSpecificMsgWaitingDirn
  |
  +-- CCiscoLineDevSpecificUserControlRTPStream
  |
  +--CCiscoLineDevSpecificSetStatusMsgs
  |
  +--CCiscoLineDevSpecificRedirectResetOrigCalled
  |
  +--CCiscoLineDevSpecificPortRegistrationPerCall
  |
  +--CCiscoLineDevSpecificSetRTPParamsForCall
  |
  +--CCiscoLineDevSpecificRedirectSetOrigCalled
  |
  +--CCiscoLineDevSpecificJoin
  |
  +--CCiscoLineDevSpecificRedirectFACCMC
  |
  +--CCiscoLineDevSpecificBlindTransferFACCMC
  |
  +--CCiscoLineDevSpecificCTIPortThirdPartyMonitor
 
   

Description

This section provides information on how to perform Cisco TAPI specific functions with the CCiscoLineDevSpecific class, which represents the parent class to all the following classes. It comprises a virtual class and is provided here for informational purposes.

Header File

The file CiscoLineDevSpecific.h contains the constant, structure, and class definition for the Cisco line device-specific classes.

Class Detail

class CCiscoLineDevSpecific 
  {
  public:
CCicsoLineDevSpecific(DWORD msgType);
virtual ~CCiscoLineDevSpecific();
    DWORD GetMsgType(void) const {return m_MsgType;}
    void* lpParams() {return &m_MsgType;}
    virtual DWORD dwSize() = 0;
  private:
    DWORD m_MsgType;
  };

Functions

lpParms()

Function can be used to obtain the pointer to the parameter block.

dwSize()

Function will give the size of the parameter block area.

Parameter

m_MsgType

Specifies the type of message.

Subclasses

Each subclass of CCiscoLineDevSpecific has a different value assigned to the parameter m_MsgType. If you are using C instead of C++, this is the first parameter in the structure.

Enumeration

The CiscoLineDevSpecificType enumeration provides valid message identifiers.

enum CiscoLineDevSpecificType  {
SLDST_MSG_WAITING = 1,
SLDST_MSG_WAITING_DIRN,
SLDST_USER_CRTL_OF_RTP_STREAM,
SLDST_SET_STATUS_MESSAGES,
SLDST_NUM_TYPE,
SLDST_SWAP_HOLD_SETUP_TRANSFER, // Not Supported in Cisco TSP 3.4 and 
Beyond
SLDST_REDIRECT_RESET_ORIG_CALLED, 
SLDST_USER_RECEIVE_RTP_INFO,
SLDST_USER_SET_RTP_INFO,
SLDST_JOIN,
SLDST_REDIRECT_FAC_CMC,
SLDST_BLIND_TRANSFER_FAC_CMC,
SLDST_CTI_PORT_THIRD_PARTY_MONITOR
};

Message Waiting

CCiscoLineDevSpecific
  |
  +-- CCiscoLineDevSpecificMsgWaiting

Description

The CCiscoLineDevSpecificMsgWaiting class turns the message waiting lamp on or off for the line that the hLine parameter specifies.

Class Detail

class CCiscoLineDevSpecificMsgWaiting : public CCiscoLineDevSpecific
 {
 public:
  CCiscoLineDevSpecificMsgWaiting() : 
CCiscoLineDevSpecific(SLDST_MSG_WAITING){}
  virtual ~CCiscoLineDevSpecificMsgWaiting() {}
  virtual DWORD dwSize(void) const {return sizeof(*this)-4;}
  DWORD m_BlinkRate; 
 };

Parameters

DWORD m_MsgType

Equals SLDST_MSG_WAITING.

DWORD m_BlinkRate

Any supported PHONELAMPMODE_ constants that are specified in the phoneSetLamp() function.


Note Only PHONELAMPMODE_OFF and PHONELAMPMODE_STEADY are supported on Cisco 79xx IP Phones.


Message Waiting Dirn

CCiscoLineDevSpecific
  |
  +-- CCiscoLineDevSpecificMsgWaitingDirn

Description

The CCiscoLineDevSpecificMsgWaitingDirn class turns the message waiting lamp on or off for the line that a parameter specifies and is independent of the hLine parameter.

Class Detail

class CCiscoLineDevSpecificMsgWaitingDirn : public 
CCiscoLineDevSpecific
 {
 public:
  CCiscoLineDevSpecificMsgWaitingDirn() :  
    CCiscoLineDevSpecific(SLDST_MSG_WAITING_DIRN) {}
  virtual ~CCiscoLineDevSpecificMsgWaitingDirn() {}
  virtual DWORD dwSize(void) const {return sizeof(*this)-4;}
  DWORD m_BlinkRate; 
  char m_Dirn[25];
 };

Parameters

DWORD m_MsgType

Equals SLDST_MSG_WAITING_DIRN.

DWORD m_BlinkRate

As in the CCiscoLineDevSpecificMsgWaiting message.


Note Only PHONELAMPMODE_OFF and PHONELAMPMODE_STEADY are supported on Cisco 79xx IP Phones.


char m_Dirn[25]

The directory number for which the message waiting lamp should be set.

Audio Stream Control

CCiscoLineDevSpecific
  |
  +-- CCiscoLineDevSpecificUserControlRTPStream

Description

The CCiscoLineDevSpecificUserControlRTPStream class controls the audio stream of a line. To use this class, the lineNegotiateExtVersion API must be called before opening the line. When lineNegotiateExtVersion is called, the highest bit must be set on both the dwExtLowVersion and dwExtHighVersion parameters. This causes the call to lineOpen to behave differently. The line does not actually open, but waits for a lineDevSpecific call to complete the open with more information. The CCiscoLineDevSpecificUserControlRTPStream class provides the extra information that is required.

Procedure


Step 1 Call lineNegotiateExtVersion for the deviceID of the line that is to be opened (OR 0x80000000 with the dwExtLowVersion and dwExtHighVersion parameters).

Step 2 Call lineOpen for the deviceID of the line that is to be opened.

Step 3 Call lineDevSpecific with a CCiscoLineDevSpecificUserControlRTPStream message in the lpParams parameter.


Class Detail

class CCiscoLineDevSpecificUserControlRTPStream : public 
CCiscoLineDevSpecific
 {
  public:
  CCiscoLineDevSpecificUserControlRTPStream() :  
    CCiscoLineDevSpecific(SLDST_USER_CRTL_OF_RTP_STREAM),
    m_ReceiveIP(-1), 
    m_ReceivePort(-1), 
    m_NumAffectedDevices(0)
     {
     memset(m_AffectedDeviceID, 0, sizeof(m_AffectedDeviceID));
     }
  virtual ~CCiscoLineDevSpecificUserControlRTPStream() {}
  DWORD m_ReceiveIP;   // UDP audio reception IP
  DWORD m_ReceivePort; // UDP audio reception port
  DWORD m_NumAffectedDevices;
  DWORD m_AffectedDeviceID[10];
  DWORD m_MediaCapCount;
  MEDIA_CAPS m_MediaCaps;
  virtual DWORD dwSize(void) const {return sizeof(*this)-4;}
 };

Parameters

DWORD m_MsgType

Equals SLDST_USER_CRTL_OF_RTP_STREAM

DWORD m_ReceiveIP:

The RTP audio reception IP address in network byte order

DWORD m_ReceivePort:

The RTP audio reception port in network byte order

DWORD m_NumAffectedDevices:

The TSP returns this value. It contains the number of deviceIDs in the m_AffectedDeviceID array that are valid. Any device with multiple directory numbers that are assigned to it will have multiple TAPI lines, one per directory number.

DWORD m_AffectedDeviceID[10]:

The TSP returns this value. It contains the list of deviceIDs for any device that is affected by this call. Do not call lineDevSpecific for any other device in this list.

DWORD m_mediaCapCount

The number of codecs that are supported for this line.

MEDIA_CAPS m_MediaCaps -

A data structure with the following format:

typedef struct {

DWORD MediaPayload;

DWORD MaxFramesPerPacket;

DWORD G723BitRate;

} MEDIA_CAPS[MAX_MEDIA_CAPS_PER_DEVICE];

This data structure defines each codec that is supported on a line. The limit specifies 18. The following description shows each member in the MEDIA_CAPS data structure:

MediaPayload specifies an enumerated integer that contains one of the following values:

enum
    { 
Media_Payload_G711Alaw64k = 2,
Media_Payload_G711Alaw56k = 3, // "restricted"
Media_Payload_G711Ulaw64k = 4,
Media_Payload_G711Ulaw56k = 5, // "restricted"
Media_Payload_G722_64k = 6,
Media_Payload_G722_56k = 7,
Media_Payload_G722_48k = 8,
Media_Payload_G7231 = 9,
Media_Payload_G728 = 10,
Media_Payload_G729 = 11,
Media_Payload_G729AnnexA = 12,
Media_Payload_G729AnnexB = 15,
Media_Payload_G729AnnexAwAnnexB = 16,
Media_Payload_GSM_Full_Rate = 18,
Media_Payload_GSM_Half_Rate = 19,
Media_Payload_GSM_Enhanced_Full_Rate = 20,
Media_Payload_Wide_Band_256k = 25,
Media_Payload_Data64 = 32,
Media_Payload_Data56 = 33,
Media_Payload_GSM = 80,
Media_Payload_G726_32K = 82,
Media_Payload_G726_24K = 83,
Media_Payload_G726_16K = 84,
// Media_Payload_G729_B = 85,
// Media_Payload_G729_B_LOW_COMPLEXITY = 86,
}   Media_PayloadType;
 
   

Read MaxFramesPerPacket as MaxPacketSize. It specifies a 16-bit integer that is specified in milliseconds. It indicates the maximum desired RTP packet size. Typically, this value gets set to 20.

G723BitRate specifies a 6-byte field that contains either the G.723.1 information bit rate or is ignored. The following list provides values for the G.723.1 field are values.

enum
    {  
    Media_G723BRate_5_3 = 1, //5.3Kbps
    Media_G723BRate_6_4 = 2  //6.4Kbps
    }   Media_G723BitRate;
 
   

Set Status Messages

CCiscoLineDevSpecific
|
+-- CCiscoLineDevSpecificSetStatusMsgs

Description

The CCiscoLineDevSpecificSetStatusMsgs class is used to turn on or off the status messages for the line specified by the hLine parameter. The Cisco TSP supports the following flags:

DEVSPECIFIC_MEDIA_STREAM—Setting this flag on a line turns on the reporting of media streaming messages for that line. Clearing this flag will turn off the reporting of media streaming messages for that line.

DEVSPECIFIC_CALL_TONE_CHANGED—Setting this flag on a line turns on the reporting of call tone changed events for that line. Clearing this flag will turn off the reporting of call tone changed events for that line.


Note This extension only applies if extension version 0x00020001 or higher is negotiated.


Class Detail

class CCiscoLineDevSpecificSetStatusMsgs : public 
CCiscoLineDevSpecific
{
public:
CCiscoLineDevSpecificSetStatusMsgs() : 
CCiscoLineDevSpecific(SLDST_SET_STATUS_MESSAGES) {}
virtual ~CCiscoLineDevSpecificSetStatusMsgs() {}
DWORD m_DevSpecificStatusMsgsFlag;
virtual DWORD dwSize(void) const {return sizeof(*this)-4;}
};

Parameters

DWORD m_MsgType

Equals SLDST_SET_STATUS_MESSAGES.

DWORD m_DevSpecificStatusMsgsFlag

Bit array that identifies for which status changes a LINE_DEVSPECIFIC message will be sent to the application.

The supported values follow:

#define DEVSPECIFIC_MEDIA_STREAM 0x00000001

#define DEVSPECIFIC_CALL_TONE_CHANGED 0x00000002

Swap-Hold/SetupTransfer


Note This is not supported in Cisco TSP 4.0 and beyond.


The CCiscoLineDevSpecificSwapHoldSetupTransfer class was used to perform a SetupTransfer between a call that is in CONNECTED state and a call that is in the ONHOLD state. This function would change the state of the connected call to ONHOLDPENDTRANSFER state and the ONHOLD call to CONNECTED state. This would then allow a CompleteTransfer to be performed on the 2 calls. In Cisco TSP 4.0 and beyond, the TSP allows applications to use lineCompleteTransfer() to transfer the calls without having to use the CCiscoLineDevSpecificSwapHoldSetupTransfer function. Therefore, this function returns LINEERR_OPERATIONUNAVAIL in Cisco TSP 4.0 and beyond.

 
   
CCiscoLineDevSpecific
|
+-- CCiscoLineDevSpecificSwapHoldSetupTransfer

Description

The CCiscoLineDevSpecificSwapHoldSetupTransfer class performs a setupTransfer between a call that is in CONNECTED state and a call that in ONHOLD state. This function will change the state of the connected call to ONHOLDPENDTRANSFER state and the ONHOLD call to CONNECTED state. This will then allow a completeTransfer to be performed on the two calls.


Note This extension only applies if extension version 0x00020002 or higher is negotiated.


Class Details

class CCiscoLineDevSpecificSwapHoldSetupTransfer : public 
CCiscoLineDevSpecific
    {
    public:
      CCiscoLineDevSpecificSwapHoldSetupTransfer() : 
CCiscoLineDevSpecific(SLDST_SWAP_HOLD_SETUP_TRANSFER) {}
      virtual ~CCiscoLineDevSpecificSwapHoldSetupTransfer() {}
      DWORD heldCallID;
      virtual DWORD dwSize(void) const {return sizeof(*this)-4;} // 
subtract out the virtual function table pointer
    };

Parameters

DWORD m_MsgType

Equals SLDST_SWAP_HOLD_SETUP_TRANSFER.

DWORD heldCallID

Equals the callid of the held call that is returned in dwCallID of LPLINECALLINFO.

HCALL hCall (in lineDevSpecific parameter list)

Equals the handle of the connected call.

Redirect Reset Original Called ID

CCiscoLineDevSpecific
|
+-- CCiscoLineDevSpecificRedirectResetOrigCalled

Description

The CCiscoLineDevSpecificRedirectResetOrigCalled class redirects a call to another party while resetting the original called ID of the call to the destination of the redirect.


Note This extension only applies if extension version 0x00020003 or higher is negotiated.


Class Details

class CCiscoLineDevSpecificRedirectResetOrigCalled: public 
CCiscoLineDevSpecific
    {
    public:
      CCiscoLineDevSpecificRedirectResetOrigCalled: 
CCiscoLineDevSpecific(SLDST_REDIRECT_RESET_ORIG_CALLED) {}
      virtual ~CCiscoLineDevSpecificRedirectResetOrigCalled{}
      char m_DestDirn[25]; //redirect destination address
      virtual DWORD dwSize(void) const {return sizeof(*this)-4;} // 
subtract out the virtual function table pointer
    };

Parameters

DWORD m_MsgType

Equals SLDST_REDIRECT_RESET_ORIG_CALLED.

DWORD m_DestDirn

Equals the destination address where the call needs to be redirected.

HCALL hCall (In lineDevSpecific parameter list)

Equals the handle of the connected call.

Port Registration per Call

CCiscoLineDevSpecific
|
+-- CCiscoLineDevSpecificPortRegistrationPerCall

Description

The CCiscoLineDevSpecificPortRegistrationPerCall class registers the CTI Port for the RTP parameters on a per call basis. With this request, the application receives the new lineDevSpecific event requesting that it needs to set the RTP parameters for the call.

To use this class, the lineNegotiateExtVersion API must be called before opening the line. When calling lineNegotiateExtVersion, the highest bit must be set on both the dwExtLowVersion and dwExtHighVersion parameters.

This causes the call to lineOpen to behave differently. The line is not actually opened, but waits for a lineDevSpecific call to complete the open with more information. The extra information required is provided in the CciscoLineDevSpecificPortRegistrationPerCall class.

Procedure


Step 1 Call lineNegotiateExtVersion for the deviceID of the line to be opened (or 0x80000000 with the dwExtLowVersion and dwExtHighVersion parameters)

Step 2 Call lineOpen for the deviceID of the line to be opened.

Step 3 Call lineDevSpecific with a CciscoLineDevSpecificPortRegistrationPerCall message in the lpParams parameter.



Note This extension is only available if the extension version 0x00040000 or higher gets negotiated.


Class Details

class CCiscoLineDevSpecificPortRegistrationPerCall: public 
CCiscoLineDevSpecific
{
public:
	CCiscoLineDevSpecificPortRegistrationPerCall () : 
	CCiscoLineDevSpecific(SLDST_USER_RECEIVE_RTP_INFO), 
	m_RecieveIP(-1), m_RecievePort(-1), m_NumAffectedDevices(0)
	{
	memset((char*)m_AffectedDeviceID, 0, sizeof(m_AffectedDeviceID));
	}
 
   
	virtual ~ CCiscoLineDevSpecificPortRegistrationPerCall () {}
	DWORD m_NumAffectedDevices;
	DWORD m_AffectedDeviceID[10];
	DWORD m_MediaCapCount;
	MEDIA_CAPS	m_MediaCaps;
	virtual DWORD dwSize(void) const {return sizeof(*this)-4;}  
// 	subtract out the virtual function table pointer
	};
 
   

Parameters

DWORD m_MsgType

Equals SLDST_USER_RECEIVE_RTP_INFO

DWORD m_NumAffectedDevices:

This value is returned by the TSP. It contains the number of deviceIDs in the m_AffectedDeviceID array which are valid. Any device with multiple directory numbers assigned to it will have multiple TAPI lines, one per directory number.

DWORD m_AffectedDeviceID[10]:

This value is returned by the TSP. It contains the list of deviceIDs for any device affected by this call. Do not call lineDevSpecific for any other device in this list.

DWORD m_mediaCapCount

The number of codecs supported for this line.

MEDIA_CAPS m_MediaCaps -

A data structure with the following format:

 
   
typedef struct {
DWORD MediaPayload;
DWORD MaxFramesPerPacket;
DWORD G723BitRate;
} MEDIA_CAPS[MAX_MEDIA_CAPS_PER_DEVICE];
 
   

This data structure defines each codec supported on a line. The limit is 18. The following is a description for each member in the MEDIA_CAPS data structure:

MediaPayload is an enumerated integer containing one of the following values.

enum
{
Media_Payload_G711Alaw64k = 2,
Media_Payload_G711Alaw56k = 3, // "restricted"
Media_Payload_G711Ulaw64k = 4,
Media_Payload_G711Ulaw56k = 5, // "restricted"
Media_Payload_G722_64k = 6,
Media_Payload_G722_56k = 7,
Media_Payload_G722_48k = 8,
Media_Payload_G7231 = 9,
Media_Payload_G728 = 10,
Media_Payload_G729 = 11,
Media_Payload_G729AnnexA = 12,
Media_Payload_G729AnnexB = 15,
Media_Payload_G729AnnexAwAnnexB = 16,
Media_Payload_GSM_Full_Rate = 18,
Media_Payload_GSM_Half_Rate = 19,
Media_Payload_GSM_Enhanced_Full_Rate = 20,
Media_Payload_Wide_Band_256k = 25,
Media_Payload_Data64 = 32,
Media_Payload_Data56 = 33,
Media_Payload_GSM = 80,
Media_Payload_G726_32K = 82,
Media_Payload_G726_24K = 83,
Media_Payload_G726_16K = 84,
// Media_Payload_G729_B = 85,
// Media_Payload_G729_B_LOW_COMPLEXITY = 86,
} Media_PayloadType;
 
   

MaxFramesPerPacket should read as MaxPacketSize and is a 16 bit integer specified in milliseconds. It indicates the RTP packet size. Typically, this value is set to 20.

G723BitRate is a six byte field which contains either the G.723.1 information bit rate or is ignored. The values for the G.723.1 field are values enumerated as follows.

 
   
enum
{
Media_G723BRate_5_3 = 1, //5.3Kbps
Media_G723BRate_6_4 = 2 //6.4Kbps
} Media_G723BitRate;
 
   

Setting RTP Parameters for Call

CCiscoLineDevSpecific
|
+-- CCiscoLineDevSpecificSetRTPParamsForCall

Description

The CCiscoLineDevSpecificSetRTPParamsForCall class sets the RTP parameters for a specific call.


Note This extension only applies if extension version 0x00040000 or higher gets negotiated.


Class Details

class CciscoLineDevSpecificSetRTPParamsForCall: public 
CCiscoLineDevSpecific
{
public:
	CciscoLineDevSpecificSetRTPParamsForCall () :  
CCiscoLineDevSpecific(SLDST_USER_SET_RTP_INFO) {}
	virtual ~ CciscoLineDevSpecificSetRTPParamsForCall () {}
	virtual DWORD dwSize(void) const {return sizeof(*this)-4;}  
	// subtract out the virtual function table pointer
	DWORD m_RecieveIP;   // UDP audio reception IP
	DWORD m_RecievePort; // UDP audio reception port
  	};
 
   

Parameters

DWORD m_MsgType

Equals SLDST_USER_SET_RTP_INFO

DWORD m_ReceiveIP

This is the RTP audio reception IP address in the network byte order to set for the call.

DWORD m_ReceivePort

This is the RTP audio reception port in the network byte order to set for the call.

Redirect Set Original Called ID

CCiscoLineDevSpecific
|
+-- CCiscoLineDevSpecificRedirectSetOrigCalled

Description

The CCiscoLineDevSpecificRedirectSetOrigCalled class redirects a call to another party while setting the original called ID of the call to any other party.


Note This extension only applies if extension version 0x00040000 or higher gets negotiated.


Class Details

class CCiscoLineDevSpecificRedirectSetOrigCalled: public 
CCiscoLineDevSpecific
{
public:
    CCiscoLineDevSpecificRedirectSetOrigCalled () : 
CCiscoLineDevSpecific(SLDST_REDIRECT_SET_ORIG_CALLED) {}
    virtual ~ CCiscoLineDevSpecificRedirectSetOrigCalled () {}
    char m_DestDirn[25]; 
    char m_SetOriginalCalledTo[25];
    // subtract virtual function table pointer
    virtual DWORD dwSize(void) const {return (sizeof (*this) - 4) ;
}

Parameters

DWORD m_MsgType

Equals SLDST_REDIRECT_SET_ORIG_CALLED

char m_DestDirn[25]

Indicates the destination of the redirect. If this request is being used to transfer to voice mail, then set this field to the voice mail pilot number of the DN of the line whose voice mail you want to transfer to.

char m_SetOriginalCalledTo[25]

Indicates the DN to which the OriginalCalledParty needs to be set to. If this request is being used to transfer to voice mail, then set this field to the DN of the line whose voice mail you want to transfer to.

HCALL hCall (in lineDevSpecific parameter list)

Equals the handle of the connected call.

Join

CCiscoLineDevSpecific
|
+-- CCiscoLineDevSpecificJoin

Description

The CCiscoLineDevSpecificJoin class joins two or more calls into one conference call. Each of the calls being joined can either be in the ONHOLD or the CONNECTED call state.

The Cisco CallManager may succeed in joining some of the calls specified in the Join request, but not all. In this case, the Join request will succeed and the Cisco CallManager attempts to join as many calls as possible.


Note This extension only applies if extension version 0x00040000 or higher gets negotiated.


Class Details

class CCiscoLineDevSpecificJoin : public CCiscoLineDevSpecific
{
    public:
        CCiscoLineDevSpecificJoin () : 
CCiscoLineDevSpecific(SLDST_JOIN) {}
        virtual ~ CCiscoLineDevSpecificJoin () {}
        DWORD m_CallIDsToJoinCount;
        CALLIDS_TO_JOIN m_CallIDsToJoin;
        virtual DWORD dwSize(void) const {return sizeof(*this)-4;} 
        // subtract out the virtual function table pointer
};
 
   

Parameters

DWORD m_MsgType

equals SLDST_JOIN

DWORD m_CallIDsToJoinCount

The number of callIDs contained in the m_CallIDsToJoin parameter.

CALLIDS_TO_JOIN m_CallIDsToJoin

A data structure that contains an array of dwCallIDs to join with the following format:

typedef struct {
    DWORD   CallID; // dwCallID to Join
} CALLIDS_TO_JOIN[MAX_CALLIDS_TO_JOIN];
 
   

where MAX_CALLIDS_TO_JOIN is defined as:

 
   
const DWORD MAX_CALLIDS_TO_JOIN = 14;
 
   

HCALL hCall (in LineDevSpecific parameter list)

equals the handle of the call that is being joined with callIDsToJoin to create the conference.

Redirect FAC CMC

CCiscoLineDevSpecific 
| 
+--CCiscoLineDevSpecificRedirectFACCMC

Description

The CCiscoLineDevSpecificRedirectFACCMC class is used to redirect a call to another party that requires a FAC, CMC, or both.


Note This extension is only available if extension version 0x00050000 or higher is negotiated.


If the FAC is invalid, then the TSP will return a new device specific error code LINEERR_INVALIDFAC. If the CMC is invalid, then the TSP will return a new device specific error code LINEERR_INVALIDCMC.

Class Detail

class CCiscoLineDevSpecificRedirectFACCMC: public 
CCiscoLineDevSpecific
{
public:
    	CCiscoLineDevSpecificRedirectFACCMC () : 
CCiscoLineDevSpecific(SLDST_REDIRECT_FAC_CMC) {}
    	virtual ~ CCiscoLineDevSpecificRedirectFACCMC () {}
	char m_DestDirn[49];
	char m_FAC[17];
	char m_CMC[17];
    	// subtract virtual function table pointer
    	virtual DWORD dwSize(void) const {return (sizeof (*this) - 4) ;
}

Parameters

DWORD m_MsgType

Equals SLDST_REDIRECT_FAC_CMC

char m_DestDirn[49]

Indicates the destination of the redirect.

char m_FAC[17]

Indicates the FAC digits. If the application does not want to pass any FAC digits, then it must set this parameter to a NULL string.

char m_CMC[17]

Indicates the CMC digits. If the application does not want to pass any CMC digits, then it must set this parameter to a NULL string.

HCALL hCall (in lineDevSpecific parameter list)

Equals the handle of the call to be redirected.

Blind Transfer FAC CMC

CCiscoLineDevSpecific
|
+--CCiscoLineDevSpecificBlindTransferFACCMC

Description

The CCiscoLineDevSpecificBlindTransferFACCMC class is used to blind transfer a call to another party that requires a FAC, CMC, or both.


Note This extension is only available if extension version 0x00050000 or higher is negotiated.


If the FAC is invalid, then the TSP will return a new device specific error code LINEERR_INVALIDFAC. If the CMC is invalid, then the TSP will return a new device specific error code LINEERR_INVALIDCMC.

Class Detail

class CCiscoLineDevSpecificBlindTransferFACCMC: public 
CCiscoLineDevSpecific
{
public:
    	CCiscoLineDevSpecificBlindTransferFACCMC () : 
CCiscoLineDevSpecific(SLDST_BLIND_TRANSFER_FAC_CMC) {}
    	virtual ~ CCiscoLineDevSpecificBlindTransferFACCMC () {}
	char m_DestDirn[49];
	char m_FAC[17];
	char m_CMC[17];
    	// subtract virtual function table pointer
    	virtual DWORD dwSize(void) const {return (sizeof (*this) - 4) ;
}

Parameters

DWORD m_MsgType

Equals SLDST_BLIND_TRANSFER_FAC_CMC

char m_DestDirn[49]

Indicates the destination of the blind transfer.

char m_FAC[17]

Indicates the FAC digits. If the application does not want to pass any FAC digits, then it must set this parameter to a NULL string.

char m_CMC[17]

Indicates the CMC digits. If the application does not want to pass any CMC digits, then it must set this parameter to a NULL string.

HCALL hCall (in lineDevSpecific parameter list)

Equals the handle of the call to be blind transferred.

CTI Port Third Party Monitor

CCiscoLineDevSpecific
|
+-- CCiscoLineDevSpecificCTIPortThirdPartyMonitor

Description

The CCiscoLineDevSpecificCTIPortThirdPartyMonitor class is used for opening CTI ports in third party mode.

To use this class, the lineNegotiateExtVersion API must be called before opening the line. When calling lineNegotiateExtVersion the highest bit must be set on both the dwExtLowVersion and dwExtHighVersion parameters. This causes the call to lineOpen to behave differently. The line is not actually opened, but waits for a lineDevSpecific call to complete the open with more information. The extra information required is provided in the CCiscoLineDevSpecificCTIPortThirdPartyMonitor class.

Procedure


Step 1 Call lineNegotiateExtVersion for the deviceID of the line to be opened. (OR 0x80000000 with the dwExtLowVersion and dwExtHighVersion parameters)

Step 2 Call lineOpen for the deviceID of the line to be opened.

Step 3 Call lineDevSpecific with a CCiscoLineDevSpecificCTIPortThirdPartyMonitor message in the lpParams parameter.



Note This extension is only available if extension version 0x00050000 or higher is negotiated.


Class Detail

class CCiscoLineDevSpecificCTIPortThirdPartyMonitor: public 
CCiscoLineDevSpecific
{
public:
	CCiscoLineDevSpecificCTIPortThirdPartyMonitor () : 
	CCiscoLineDevSpecific(SLDST_CTI_PORT_THIRD_PARTY_MONITOR) {}
	virtual ~ CCiscoLineDevSpecificCTIPortThirdPartyMonitor () {}
	virtual DWORD dwSize(void) const {return sizeof(*this)-4;} //  
	subtract out the virtual function table pointer
};

Parameters

DWORD m_MsgType

equals SLDST_CTI_PORT_THIRD_PARTY_MONITOR

Cisco Phone Device Specific Extensions

Table 3-2 lists the subclasses of CiscoPhoneDevSpecific.

Table 3-2 Cisco Phone Device Specific TAPI functions 

Cisco Functions
Synopsis

CCiscoPhoneDevSpecific

The CCiscoPhoneDevSpecific class is the parent class to the following class.

Device Data Passthrough

Allows application to send the Device Specific XSI data through CTI.


CCiscoPhoneDevSpecific

CCiscoPhoneDevSpecific
|
+-- CCiscoPhoneDevSpecificDataPassThrough
 
   

Description

This section provides information on how to perform Cisco TAPI specific functions with the CCiscoPhoneDevSpecific class, which is the parent class to all the following classes. It is a virtual class and is provided here for informational purposes.

Header File

The file CiscoLineDevSpecific.h contains the constant, structure and class definition for the Cisco phone device specific classes.

Class Detail

class CCiscoPhoneDevSpecific
{
	public :
		CCiscoPhoneDevSpecific(DWORD msgType):m_MsgType(msgType) {;}
		virtual ~CCiscoPhoneDevSpecific() {;}
		DWORD GetMsgType (void) const { return m_MsgType;}
		void *lpParams(void) const {return (void*)&m_MsgType;}
		virtual DWORD dwSize(void) const = 0;
	private :
		DWORD m_MsgType ;
}

Functions

lpParms()

function can be used to obtain the pointer to the parameter block

dwSize()

function will give the size of the parameter block area

Parameter

m_MsgType

specifies the type of message.

Subclasses

Each subclass of CCiscoPhoneDevSpecific has a different value assigned to the parameter m_MsgType. If you are using C instead of C++, this is the first parameter in the structure.

Enumeration

Valid message identifiers are found in the CiscoPhoneDevSpecificType enumeration.

 
   
enum CiscoLineDevSpecificType {
CPDST_DEVICE_DATA_PASSTHROUGH_REQUEST = 1
};
 
   

Device Data Passthrough

CCiscoPhoneDevSpecific
|
+-- CCiscoPhoneDevSpecificDataPassThrough
 
   
 
   

XSI enabled IP phones allow applications to directly communicate with the phone and access XSI features (e.g. manipulate display, get user input, play tone, etc.). In order to allow TAPI applications access to some of these XSI capabilities without having to setup and maintain an independent connection directly to the phone, TAPI will provide the ability to send device data through the CTI interface. This feature is exposed as Cisco TSP device specific extension.

PhoneDevSpecificDataPassthrough request is only supported for the IP phone devices. Application has to open a TAPI phone device with minimum extension version 0x00030000 to make use of this feature.

Description

The CCiscoPhoneDevSpecificDataPassThrough class is used to send the device specific data to CTI controlled IP Phone devices.


Note This extension requires applications to negotiate extension version as 0x00030000.


Class Detail

class CCiscoPhoneDevSpecificDataPassThrough : public 
CCiscoPhoneDevSpecific
{
public:
	CCiscoPhoneDevSpecificDataPassThrough () : 
    CCiscoPhoneDevSpecific(CPDST_DEVICE_DATA_PASSTHROUGH_REQUEST) 
	{
	  memset((char*)m_DeviceData, 0, sizeof(m_DeviceData)) ;
	}
	virtual ~CCiscoPhoneDevSpecificDataPassThrough() {;}
	// data size determined by MAX_DEVICE_DATA_PASSTHROUGH_SIZE
	TCHAR m_DeviceData[MAX_DEVICE_DATA_PASSTHROUGH_SIZE] ;
	// subtract out the virtual funciton table pointer size
	virtual DWORD dwSize (void) const {return (sizeof (*this)-4) ;} 
}
 
   

Parameters

DWORD m_MsgType

equals CPDST_DEVICE_DATA_PASSTHROUGH_REQUEST.

DWORD m_DeviceData

This is the character buffer containing the XML data to be sent to phone device


Note MAX_DEVICE_DATA_PASSTHROUGH_SIZE = 2000


A phone can pass data to an application and it can be retrieved by using PhoneGetStatus (PHONESTATUS:devSpecificData). See PHONESTATUS description for further details.

Messages

This section describes the line device specific messages that the Cisco TSP supports.

Description

An application receives nonstandard TAPI messages in the following LINE_DEVSPECIFIC messages:

A message to signal when to stop and start streaming RTP audio.

A message containing the call handle of active calls when the application starts up.

A message indicating to set the RTP parameters based on the data of the message.

A message indicating that a CallToneChangedEvent has occurred on a call.

The message type is an enumerated integer with the following values:

enum CiscoLineDevSpecificMsgType
{
	SLDSMT_START_TRANSMISION = 1,
	SLDSMT_STOP_TRANSMISION,
	SLDSMT_START_RECEPTION,
	SLDSMT_STOP_RECEPTION,
	SLDST_LINE_EXISTING_CALL,
	SLDST_OPEN_LOGICAL_CHANNEL,
	SLDST_CALL_TONE_CHANGED,
	SLDSMT_NUM_TYPE
};

Start Transmission Events

SLDSMT_START_TRANSMISION

When a message is received, the RTP stream transmission should commence.

dwParam2 specifies the network byte order IP address of the remote machine to which the RTP stream should be directed.

dwParam3, specifies the high-order word that is the network byte order IP port of the remote machine to which the RTP stream should be directed.

dwParam3, specifies the low-order word that is the packet size in milliseconds to use.

The application receives these messages to signal when to start streaming RTP audio. At extension version 1.0 (0x00010000), the parameters have the following format:

dwParam1 contains the message type.

dwParam2 contains the IP address of the remote machine.

dwParam3 contains the network byte order IP port of the remote machine to which the RTP stream should be directed in the high-order word and the packet size in milliseconds in the low-order word.

At extension version 2.0 (0x00020000), start transmission has the following format:

dwParam1:from highest order bit to lowest

First two bits blank

Precedence value 3 bits

Maximum frames per packet 8 bits

G723 bit rate 2 bits

Silence suppression value 1 bit

Compression type 8 bits

Message type 8 bits

dwParam2 contains the IP address of the remote machine

dwParam3 contains the network byte order IP port of the remote machine to which the RTP stream should be directed in the high-order word and the packet size in milliseconds in the low-order word.

At extension version 4.0 (0x00040000), start transmission has the following format:

hCall - The call of the Start Transmission event

dwParam1:from highest order bit to lowest

First two bits blank

Precedence value 3 bits

Maximum frames per packet 8 bits

G723 bit rate 2 bits

Silence suppression value 1 bit

Compression type 8 bits

Message type 8 bits

dwParam2 contains the IP address of the remote machine

dwParam3 contains the network byte order IP port of the remote machine to which the RTP stream should be directed in the high-order word and the packet size in milliseconds in the low-order word.

Start Reception Events

SLDSMT_START_RECEPTION

When a message is received, the RTP stream reception should commence.

dwParam2 specifies the network byte order IP address of the local machine to use.

dwParam3, specifies the high-order word that is the network byte order IP port to use.

dwParam3, specifies the low-order high-order word that is the packet size in milliseconds to use.

When a message is received, the RTP stream reception should commence.

At extension version 1, the parameters have the following format:

dwParam1 contains the message type.

dwParam2 contains the IP address of the remote machine.

dwParam3 contains the network byte order IP port of the remote machine to which the RTP stream should be directed in the high-order word and the packet size in milliseconds in the low-order word.

At extension version 2 start reception has the following format:

dwParam1:from highest order bit to lowest

First 13 bits blank

G723 bit rate 2 bits

Silence suppression value 1 bit

Compression type 8 bits

Message type 8 bits

dwParam2 contains the IP address of the remote machine

dwParam3 contains the network byte order IP port of the remote machine to which the RTP stream should be directed in the high-order word and the packet size in milliseconds in the low-order word.

At extension version 4.0 (0x00040000), start reception has the following format:

hCall - The call of the Start Reception event

dwParam1:from highest order bit to lowest

First 13 bits blank

G723 bit rate 2 bits

Silence suppression value 1 bit

Compression type 8 bits

Message type 8 bits

dwParam2 contains the IP address of the remote machine

dwParam3 contains the network byte order IP port of the remote machine to which the RTP stream should be directed in the high-order word and the packet size in milliseconds in the low-order word.

Stop Transmission Events

When a message is received,, the appropriate part of the streaming should be stopped.

SLDSMT_STOP_TRANSMISION

When a message is received, the transmission of the streaming should be stopped.

At extension version 1.0 (0x00010000), start transmission has the following format:

dwParam1 - Message type

At extension version 4.0 (0x00040000), start transmission has the following format:

hCall - The call the Stop Transmission event is for

dwParam1 - Message type

Stop Reception Events

When a message is received, the appropriate part of the streaming should be stopped.

SLDSMT_STOP_RECEPTION

When a message is received, the reception of the streaming should be stopped.

At extension version 1.0 (0x00010000), start transmission has the following format:

dwParam1 - message type

At extension version 4.0 (0x00040000), start transmission has the following format:

hCall - The call the Stop Reception event is for

dwParam1 - Message type

Existing Call Events

SLDSMT_LINE_EXISTING_CALL

When the application starts up, this message will inform the application of existing calls in the PBX.

These events inform the application of existing calls in the PBX when it starts up. The format of the parameters follows:

dwParam1 - Message type

dwParam2 - Call object

dwParam3 - TAPI call handle

Open Logical Channel Events

When a message is received, the appropriate part of the streaming should be started.

SLDSMT_OPEN_LOGICAL_CHANNEL

When a call has media established at a CTI Port or Route Point that is registered for Dynamic Port Registration, this message is received indicating that an IP address and UDP port number needs to be set for the call.


Note This extension is only available if extension version 0x00040000 or higher gets negotiated.


The following is the format of the parameters:

hCall - The call the Open Logical Channel event is for

dwParam1 - Message type

dwParam2 - Compression Type

dwParam3 - Packet size in milliseconds

Call Tone Changed Events

SLDSMT_CALL_TONE_CHANGED

When a tone change occurs on a call, this message is received indicating the tone and the feature that caused the tone change.


Note This extension is only available if extension version 0x00050000 or higher is negotiated. In the Cisco TSP 4.1 release and beyond, this event will only be sent for Call Tone Changed Events where the tone is CTONE_ZIPZIP and the tone is being generated as a result of the FAC/CMC feature.


The format of the parameters is as follows:

hCall—The call that the Call Tone Changed event is for

dwParam—Message type

dwParam2—Tone (see the following table)

Tone
Value
Description

CTONE_ZIPZIP

0x31

Zip Zip Tone


dwParam3—If dwParam2 is CTONE_ZIPZIP, this parameter contains a bitmask with the following possible values:

CZIPZIP_FACREQUIRED—If this bit is set, it indicates that a FAC is required.

CZIPZIP_CMCREQUIRED—If this bit is set, it indicates that a CMC is required.


Note For a DN that requires both codes, the first event is always for the FAC and CMC code. The application has the option to send both codes separated by # in the same request. The second event generation is optional based on what the application sends in the first request.


Message Sequence Charts

This section illustrates a subset of the call scenarios supported by the Cisco TSP. The event order is not guaranteed in all cases and can vary depending on the scenario and the event.

The following is a list of abbreviations used in the CTI events shown in each scenario.

NP—Not Present

LR—LastRedirectingParty

CH—CtiCallHandle

GCH—CtiGlobalCallHandle

RIU—RemoteInUse flag

DH—DeviceHandle

Manual Outbound Call

Precondition

Party A is idle.

Action

Party A

 
CTI Messages
TAPI Messages
TAPI Structures

1. Party A goes offhook

NewCallEvent, CH=C1, GCH=G1, Calling=A, Called=NP, OrigCalled=NP, LR=NP, State=Dialtone, Origin=OutBound, Reason=Direct

LINE_APPNEWCALL
hDevice=A
dwCallbackInstance=0
dwParam1=0
dwParam2=hCall-1
dwParam3=OWNER

LINECALLINFO (hCall-1)
hLine=A
dwCallID=T1
dwOrigin=OUTBOUND
dwReason=DIRECT
dwCallerID=A
dwCalledID=NP
dwConnectedID=NP
dwRedirectionID=NP
dwRedirectionID=NP

CallStateChangedEvent, CH=C1, State=Dialtone, Cause=CauseNoError, Reason=Direct, Calling=A, Called=NP, OrigCalled=NP, LR=NP

LINE_CALLSTATE
hDevice=hCall-1
dwCallbackInstance=0
dwParam1=DIALTONE
dwParam2=UNAVAIL
dwParam3=0

No change

2. Party A dials Party B

CallStateChangedEvent, CH=C1, State=Dialing, Cause=CauseNoError, Reason=Direct, Calling=A, Called=NP, OrigCalled=NP, LR=NP

LINE_CALLSTATE
hDevice=hCall-1
dwCallbackInstance=0
dwParam1=DIALING
dwParam2=0
dwParam3=0

No change

3. Party B accepts call

CallStateChangedEvent, CH=C1, State=Proceeding, Cause=CauseNoError, Reason=Direct, Calling=A, Called=B, OrigCalled=B, LR=NP

LINE_CALLSTATE
hDevice=hCall-1
dwCallbackInstance=0
dwParam1=PROCEEDING
dwParam2=0
dwParam3=0

LINE_CALLINFO
hDevice=hCall-1
dwCallbackInstance=0
dwParam1=CALLEDID
dwParam2=0
dwParam3=0

LINECALLINFO (hCall-1)
hLine=A
dwCallID=T1
dwOrigin=OUTBOUND
dwReason=DIRECT
dwCallerID=A
dwCalledID=B
dwConnectedID=NP
dwRedirectionID=NP
dwRedirectionID=NP

 

CallStateChangedEvent, CH=C1, State=Ringback, Cause=CauseNoError, Reason=Direct, Calling=A, Called=B, OrigCalled=B, LR=NP

LINE_CALLSTATE
hDevice=hCall-1
dwCallbackInstance=0
dwParam1=RINGBACK
dwParam2=0
dwParam3=0

No change

4. Party B answers call

CallStateChangedEvent, CH=C1, State=Connected, Cause=CauseNoError, Reason=Direct, Calling=A, Called=B, OrigCalled=B, LR=NP

LINE_CALLSTATE
hDevice=hCall-1
dwCallbackInstance=0
dwParam1=CONNECTED
dwParam2=ACTIVE
dwParam3=0

LINE_CALLINFO
hDevice=hCall-1
dwCallbackInstance=0
dwParam1=CONNECTEDID
dwParam2=0
dwParam3=0

LINECALLINFO (hCall-1)
hLine=A
dwCallID=T1
dwOrigin=OUTBOUND
dwReason=DIRECT
dwCallerID=A
dwCalledID=B
dwConnectedID=B
dwRedirectionID=NP
dwRedirectionID=NP

 

CallStartReceptionEvent, DH=A, CH=C1

LINE_DEVSPECIFIC
hDevice=hCall-1
dwCallBackInstance=0
dwParam1=StartReception
dwParam2=IP Address
dwParam3=Port

Note LINE_DEVSPECIFIC events are only sent if the application hs requested for them using lineDevSpecific()

No change

 

CallStartTransmissionEvent, DH=A, CH=C1

LINE_DEVSPECIFIC
hDevice=hCall-1
dwCallBackInstance=0
dwParam1=StartTransmission
dwParam2=IP Address
dwParam3=Port

Note LINE_DEVSPECIFIC events are only sent if the application hs requested for them using lineDevSpecific()

No change


Blind Transfer

Precondition

A calls B.

B answers.

A and B are connected.

Action
Party A
 
CTI Messages
TAPI Messages
TAPI Structures

Party B does a lineBlindTranfser() to blind transfer call from party A to party C

CallPartyInfoChangedEvent, CH=C1, CallingChanged=False, Calling=A, CalledChanged=True, Called=C, OriginalCalled=B,
LR=B, Cause=BlindTransfer

LINE_CALLINFO, hDevice=hCall-1, dwCallbackInstance=0, dwParam1=CONNECTEDID, REDIRECTINGID, REDIRECTIONID

TSPI LINECALLINFO
dwOrigin=OUTBOUND
dwReason=DIRECT
dwCallerID=A
dwCalledID=B
dwConnectedID=NULL
dwRedirectingID=NP
dwRedirectionID=NP

 
Party B
 

CallStateChangedEvent, CH=C2, State=Idle, reason=Direct, Calling=A, Called=B, OriginalCalled=B, LR=NULL

TSPI: LINE_CALLSTATE, hDevice=hCall-1, dwCallbackInstance=0, dwParam1=IDLE dwParam2=0
dwParam3=0

TSPI LINECALLINFO
dwOrigin=INTERNAL
dwReason=DIRECT
dwCallerID=A
dwCalledID=B
dwConnectedID=NULL
dwRedirectingID=NULL
dwRedirectionID=NULL

 
Party C
 

NewCallEvent, CH=C3, origin=Internal_Inbound, reason=BlindTransfer, Calling=A, Called=C, OriginalCalled=B, LR=B

TSPI: LINE_APPNEWCALL hDevice=C
dwCallbackInstance=0
dwParam1=0
dwParam2=hCall-1
dwParam3=OWNER

TSPI LINECALLINFO
dwOrigin=INTERNAL
dwReason=TRANSFER
dwCallerID=A
dwCalledID=C
dwConnectedID=NULL
dwRedirectingID=B
dwRedirectionID=C

Action
Party A
 
CTI Messages
TAPI Messages
TAPI Structures

Party C is offering

CallStateChangeEvent, CH=C1, State=Ringback, Reason=Direct, Calling=A, Called=C, OriginalCalled=B, LR=B

TSPI: LINE_CALLSTATE, hDevice=hCall-1, dwCallbackInstance=0, dwParam1= RINGBACK dwParam2=0
dwParam3=0

TSPI LINECALLINFO
dwOrigin=OUTBOUND
dwReason=DIRECT
dwCallerID=A
dwCalledID=B
dwConnectedID=NULL
dwRedirectingID=B
dwRedirectionID=C

 
Party C
 

CallStateChangedEvent, CH=C3, State=Offering, Reason=BlindTransfer, Calling=A, Called=C, OriginalCalled=B, LR=B

TSPI: LINE_CALLSTATE, hDevice=hCall-1, dwCallbackInstance=0, dwParam1= OFFERING dwParam2=0
dwParam3=0

TSPI LINECALLINFO
dwOrigin=INTERNAL
dwCallerID=A
dwCalledID=C
dwConnectedID=NULL
dwRedirectingID=B
dwRedirectionID=C


Redirect Set original Called (TxToVM)

Precondition

A calls B.

B answers.

A and B are connected.

Shared Line Scenarios

Initiate a New Call Manually

Party A and Party A' are shared line appearances.

Party A and Party A' are idle.

Action
CTI Messages
TAPI Messages
TAPI Structures

1. Party A goes offhook

Party A
 

NewCallEvent, CH=C1, GCH=G1, Calling=A, Called=NP, OrigCalled=NP, LR=NP, State=Dialtone, Origin=OutBound, Reason=Direct, RIU=false

LINE_APPNEWCALL
hDevice=A
dwCallbackInstance=0
dwParam1=0
dwParam2=hCall-1
dwParam3=OWNER

LINECALLINFO (hCall-1)
hLine=A
dwCallID=T1
dwOrigin=OUTBOUND
dwReason=DIRECT
dwCallerID=A
dwCalledID=NP
dwConnectedID=NP
dwRedirectionID=NP
dwRedirectionID=NP

 

CallStateChangedEvent, CH=C1, State=Dialtone, Cause=CauseNoError, Reason=Direct, Calling=A, Called=NP, OrigCalled=NP, LR=NP, RIU=false

LINE_CALLSTATE
hDevice=hCall-1
dwCallbackInstance=0
dwParam1=DIALTONE
dwParam2=UNAVAIL
dwParam3=0

No change

 
Party A'
 

NewCallEvent, CH=C1, GCH=G1, Calling=A', Called=NP, OrigCalled=NP, LR=NP, State=Dialtone, Origin=OutBound, Reason=Direct, RIU=true

LINE_APPNEWCALL
hDevice=A'
dwCallbackInstance=0
dwParam1=0
dwParam2=hCall-2
dwParam3=OWNER

LINECALLINFO (hCall-2)
hLine=A'
dwCallID=T1
dwOrigin=OUTBOUND
dwReason=DIRECT
dwCallerID=A'
dwCalledID=NP
dwConnectedID=NP
dwRedirectionID=NP
dwRedirectionID=NP

 

CallStateChangedEvent, CH=C1, State=Dialtone, Cause=CauseNoError, Reason=Direct, Calling=A, Called=NP, OrigCalled=NP, LR=NP, RIU=true

LINE_CALLSTATE
hDevice=hCall-2
dwCallbackInstance=0
dwParam1=CONNECTED
dwParam2=INACTIVE
dwParam3=0

No change

2. Party A dials Party B

Party A
 

CallStateChangedEvent, CH=C1, State=Dialing, Cause=CauseNoError, Reason=Direct, Calling=A, Called=NP, OrigCalled=NP, LR=NP, RIU=false

LINE_CALLSTATE
hDevice=hCall-1
dwCallbackInstance=0
dwParam1=DIALING
dwParam2=0
dwParam3=0

No change

 
Party A'
 

None

None

None

3. Party B accepts call

Party A
 

CallPartyInfoChangedEvent, CH=C1, CallingChanged=False, Calling=A, CalledChanged=true, Called=B, Reason=Direct, RIU=false

Ignored

No change

 

CallStateChangedEvent, CH=C1, State=Proceeding, Cause=CauseNoError, Reason=Direct, Calling=A, Called=B, OrigCalled=B, LR=NP, RIU=false

LINE_CALLSTATE
hDevice=hCall-1
dwCallbackInstance=0
dwParam1=PROCEEDING
dwParam2=0
dwParam3=0

LINE_CALLINFO
hDevice=hCall-1
dwCallbackInstance=0
dwParam1=CALLERID, CALLEDID
dwParam2=0
dwParam3=0

LINECALLINFO (hCall-1)
hLine=A
dwCallID=T1
dwOrigin=OUTBOUND
dwReason=DIRECT
dwCallerID=A
dwCalledID=B
dwConnectedID=NP
dwRedirectionID=NP
dwRedirectionID=NP

 

CallStateChangedEvent, CH=C1, State=Ringback, Cause=CauseNoError, Reason=Direct, Calling=A, Called=B, OrigCalled=B, LR=NP, RIU=false

LINE_CALLSTATE
hDevice=hCall-1
dwCallbackInstance=0
dwParam1=RINGBACK
dwParam2=0
dwParam3=0

No change

 
Party A'
 

CallPartyInfoChangedEvent, CH=C1, CallingChanged=False, Calling=A', CalledChanged=true, Called=B, Reason=Direct, RIU=true

Ignored

No change

 

CallStateChangedEvent, CH=C1, State=Proceeding, Cause=CauseNoError, Reason=Direct, Calling=A', Called=B, OrigCalled=B, LR=NP, RIU=true

LINE_CALLSTATE
hDevice=hCall-2
dwCallbackInstance=0
dwParam1=CONNECTED
dwParam2=INACTIVE
dwParam3=0

LINE_CALLINFO
hDevice=hCall-2
dwCallbackInstance=0
dwParam1=CALLERID, CALLEDID
dwParam2=0
dwParam3=0

LINECALLINFO (hCall-2)
hLine=A'
dwCallID=T1
dwOrigin=OUTBOUND
dwReason=DIRECT
dwCallerID=A'
dwCalledID=B
dwConnectedID=NP
dwRedirectionID=NP
dwRedirectionID=NP

 

CallStateChangedEvent, CH=C1, State=Ringback, Cause=CauseNoError, Reason=Direct, Calling=A', Called=B, OrigCalled=B, LR=NP, RIU=true

LINE_CALLSTATE
hDevice=hCall-2
dwCallbackInstance=0
dwParam1=CONNECTED
dwParam2=INACTIVE
dwParam3=0

No change

4. Party B answers call

Party A
 

CallStateChangedEvent, CH=C1, State=Connected, Cause=CauseNoError, Reason=Direct, Calling=A, Called=B, OrigCalled=B, LR=NP, RIU=false

LINE_CALLSTATE
hDevice=hCall-1
dwCallbackInstance=0
dwParam1=CONNECTED
dwParam2=ACTIVE
dwParam3=0

LINE_CALLINFO
hDevice=hCall-1
dwCallbackInstance=0
dwParam1=CONNECTEDID
dwParam2=0
dwParam3=0

LINECALLINFO (hCall-1)
hLine=A
dwCallID=T1
dwOrigin=OUTBOUND
dwReason=DIRECT
dwCallerID=A
dwCalledID=B
dwConnectedID=B
dwRedirectionID=NP
dwRedirectionID=NP

 
Party A'
 

CallStateChangedEvent, CH=C1, State=Connected, Cause=CauseNoError, Reason=Direct, Calling=A', Called=B, OrigCalled=B, LR=NP, RIU=true

LINE_CALLSTATE
hDevice=hCall-2
dwCallbackInstance=0
dwParam1=CONNECTED
dwParam2=INACTIVE
dwParam3=0

LINE_CALLINFO
hDevice=hCall-2
dwCallbackInstance=0
dwParam1=CONNECTEDID
dwParam2=0
dwParam3=0

LINECALLINFO (hCall-2)
hLine=A'
dwCallID=T1
dwOrigin=OUTBOUND
dwReason=DIRECT
dwCallerID=A'
dwCalledID=B
dwConnectedID=B
dwRedirectionID=NP
dwRedirectionID=NP


Presentation Indication

Make a Call through Translation pattern

In the Translation pattern admin pages, both the callerID/Name and ConnectedID/Name are set to "Restricted".

Action
Party A
 
CTI Messages
TAPI Messages
TAPI Structures

Party A goes offhook

NewCallEvent, CH=C1, GCH=G1, Calling=A, Called=NP, OrigCalled=NP, LR=NP, State=Dialtone, Origin=OutBound, Reason=Direct

LINE_APPNEWCALL
hDevice=A
dwCallbackInstance=0
dwParam1=0
dwParam2=hCall-1
dwParam3=OWNER

LINECALLINFO (hCall-1)
hLine=A
dwCallID=T1
dwOrigin=OUTBOUND
dwReason=DIRECT
dwCallerID=A
dwCalledID=NP
dwConnectedID=NP
dwRedirectionID=NP
dwRedirectionID=NP

CallStateChangedEvent, CH=C1, State=Dialtone, Cause=CauseNoError, Reason=Direct, Calling=A, Called=NP, OrigCalled=NP, LR=NP,

LINE_CALLSTATE
hDevice=hCall-1
dwCallbackInstance=0
dwParam1=DIALTONE
dwParam2=UNAVAIL
dwParam3=0

No change

Party A dials Party B through Translation pattern

CallStateChangedEvent, CH=C1, State=Dialing, Cause=CauseNoError, Reason=Direct, Calling=A, Called=NP, OrigCalled=NP, LR=NP

LINE_CALLSTATE
hDevice=hCall-1
dwCallbackInstance=0
dwParam1=DIALING
dwParam2=0
dwParam3=0

No change

Party B accepts the call

CallStateChangedEvent, CH=C1, State=Proceeding, Cause=CauseNoError, Reason=Direct, Calling=A, CallingPartyPI = Allowed, Called=B, CalledPartyPI = Restricted, OrigCalled=B, OrigCalledPI =restricted, LR=NP

LINE_CALLSTATE
hDevice=hCall-1
dwCallbackInstance=0
dwParam1=
PROCEEDING
dwParam2=0
dwParam3=0


LINE_CALLINFO
hDevice=hCall-1
dwCallbackInstance=0
dwParam1=CALLEDID
dwParam2=0
dwParam3=0

LINECALLINFO (hCall-1)
hLine=A
dwCallID=T1
dwOrigin=OUTBOUND
dwReason=DIRECT




dwCallerID=A dwCallerIDName=A's Name
dwCalledID=B
dwCalledIDName=
B name dwConnectedID=NP
dwConnectedIDName=
NP
dwRedirectionID=NP dwRedirectionIDName=NP
dwRedirectionID=NP dwRedirectionIDName=NP

Party B accepts the call
(continued)

CallStateChangedEvent, CH=C1, State=Ringback, Cause=CauseNoError, Reason=Direct, Calling=A, CallingPI = Allowed, Called=B, CalledPI = Restricted, OrigCalled=B, OrigCalledPI = Restricted, LR=NP

LINE_CALLSTATE
hDevice=hCall-1
dwCallbackInstance=0
dwParam1=RINGBACK
dwParam2=0
dwParam3=0

LINECALLINFO (hCall-1)
hLine=A
dwOrigin=OUTBOUND
dwReason=DIRECT

dwCallerID=A
dwCalledID=B

dwConnectedIDFlags = LINECALLPARTYID_
BLOCKED dwConnectedID=NP
dwRedirectionID=NP

dwRedirectionIDFlags = LINECALLPARTYID_
BLOCKED dwRedirectionID=NP

Party B answers the call

CallStateChangedEvent, CH=C1, State=Connected, Cause=CauseNoError, Reason=Direct, Calling=A, CallingPI = Allowed, Called=B, CalledPI = Restricted, OrigCalled=B, OrigCalledPI = Restricted, LR=NP

LINE_CALLSTATE
hDevice=hCall-1
dwCallbackInstance=0
dwParam1=
CONNECTED
dwParam2=ACTIVE
dwParam3=0

LINE_CALLINFO
hDevice=hCall-1
dwCallbackInstance=0
dwParam1=
CONNECTEDID
dwParam2=0
dwParam3=0

LINECALLINFO (hCall-1)
hLine=A
dwCallID=T1
dwOrigin=OUTBOUND
dwReason=DIRECT

dwCallerID=A dwCallerIDName=A's Name

dwCalledID=B dwCalledIDName=
B Name

dwConnectedID=A, dwConnectedIDName=
A's Name, dwRedirectingID=NP
dwRedirectingIDName=NP

dwRedirectionIDFlags = LINECALLPARTYID_
BLOCKED dwRedirectionID=NP dwRedirectionIDName=NP

CallStartReceptionEvent, DH=A, CH=C1

LINE_DEVSPECIFIC1
hDevice=hCall-1
dwCallBackInstance=0
dwParam1=
StartReception
dwParam2=IP Address
dwParam3=Port

No change

Party B answers the call

(continued)

CallStartTransmissionEvent, DH=A, CH=C1

LINE_DEVSPECIFIC1
hDevice=hCall-1
dwCallBackInstance=0
dwParam1=
StartTransmission
dwParam2=IP Address
dwParam3=Port

No change

1 LINE_DEVSPECIFIC events are only sent if the application has requested for them using lineDevSpecific().


Blind Transfer through Translation Pattern

A calls via translation pattern B.

B answers.

A and B are connected.

Action
Party A
 
CTI Messages
TAPI Messages
TAPI Structures

Party B does a lineBlindTranfser() to blind transfer call from party A to party C via translation pattern

CallPartyInfoChangedEvent, CH=C1, CallingChanged=False, Calling=A, CallingPartyPI=
Restricted, CalledChanged=True, Called=C, CalledPartyPI=
Restricted, OriginalCalled=NULL, OriginalCalledPI=
Restricted, LR=NULL, Cause=BlindTransfer

LINE_CALLINFO, hDevice=hCall-1, dwCallbackInstance=0, dwParam1=CONNECTEDID, REDIRECTINGID, REDIRECTIONID

TSPI LINECALLINFO
dwOrigin=OUTBOUND
dwReason=DIRECT

dwCallerIDFlags = LINECALLPARTYID_
BLOCKED dwCallerID=NP dwCallerIDName=NP
dwCalledID=B dwCalledIDName=
B name

dwConnectedIDFlags = LINECALLPARTYID_
BLOCKED dwConnectedID=NP dwConnectedIDName=NP dwRedirectingID=B
dwRedirectingIDName=B name

dwRedirectionIDFlags = LINECALLPARTYID_
BLOCKED dwRedirectionID=NP dwRedirectionIDName=NP

 
Party B
 

CallStateChangedEvent, CH=C2, State=Idle, reason=Direct, Calling=A, CallingPartyPI=Restricted, Called=B, CalledPartyPI=Restricted, OriginalCalled=B, OrigCalledPartyPI=Restricted, LR=NULL

TSPI: LINE_CALLSTATE, hDevice=hCall-1, dwCallbackInstance=0, dwParam1=IDLE dwParam2=0
dwParam3=0

TSPI LINECALLINFO
dwOrigin=INTERNAL
dwReason=DIRECT

dwCallerIDFlags = LINECALLPARTYID_
BLOCKED dwCallerID=NP dwCallerIDName=NP
dwCalledID=B dwCalledIDName=
B name

dwConnectedIDFlags = LINECALLPARTYID_
BLOCKED dwConnectedID=NP dwConnectedIDName=NP dwRedirectingID=B
dwRedirectingIDName=B name

dwRedirectionIDFlags = LINECALLPARTYID_
BLOCKED dwRedirectionID=NP dwRedirectionIDName=NP

 
Party C
 

NewCallEvent, CH=C3, origin=Internal_
Inbound, reason=BlindTransfer, Calling=A, CallingPartyPI=
Restricted, Called=C, CalledPartyPI=
Restricted, OriginalCalled=B, OrigCalledPartyPI=
Restricted, LR=B, LastRedirectingPartyPI=Restricted

TSPI: LINE_APPNEWCALL hDevice=C
dwCallbackInstance=0
dwParam1=0
dwParam2=hCall-1
dwParam3=OWNER

TSPI LINECALLINFO
dwOrigin=INTERNAL
dwReason=TRANSFER

dwCallerIDFlags = LINECALLPARTYID_
BLOCKED dwCallerID=NP dwCallerIDName=NP
dwCalledID=NP dwCalledIDName=NP

dwConnectedIDFlags = LINECALLPARTYID_
BLOCKED dwConnectedID=NP dwConnectedIDName=NP dwRedirectingID=B
dwRedirectingIDName=B's Name

dwRedirectionIDFlags = LINECALLPARTYID_
BLOCKED dwRedirectionID=NP dwRedirectionIDName=NP

 
Party A

Party C is offering

CallStateChangeEvent, CH=C1, State=Ringback, Reason=Direct, Calling=A, CallingPartyPI=
Restricted, Called=C, CalledPartyPI=
Restricted, OriginalCalled=B, OrigCalledPartyPI=
Restricted, LR=B, LastRedirectingPartyPI=Restricted

TSPI: LINE_CALLSTATE, hDevice=hCall-1, dwCallbackInstance=0, dwParam1= RINGBACK dwParam2=0
dwParam3=0

TSPI LINECALLINFO
dwOrigin=OUTBOUND
dwReason=DIRECT

dwCallerIDFlags = LINECALLPARTYID_
BLOCKED dwCallerID=NP dwCallerIDName=NP
dwCalledID=B dwCalledIDName=B

dwConnectedIDFlags = LINECALLPARTYID_
BLOCKED dwConnectedID=NP dwConnectedIDName=NP dwRedirectingID=B
dwRedirectingIDName=B name

dwRedirectionIDFlags = LINECALLPARTYID_
BLOCKED dwRedirectionID=NP dwRedirectionIDName=NP

 
Party C
 
CTI Messages
TAPI Messages
TAPI Structures
 

CallStateChangedEvent, CH=C3, State=Offering, Reason=BlindTransfer, Calling=A, CallingPartyPI=
Restricted, Called=C, CalledPartyPI=
Restricted, OriginalCalled=B, OrigCalledPartyPI=
Restricted, LR=B, LastRedirectingPartyPI=Restricted

TSPI: LINE_CALLSTATE, hDevice=hCall-1, dwCallbackInstance=0, dwParam1= OFFERING dwParam2=0
dwParam3=0

TSPI LINECALLINFO
dwOrigin=INTERNAL

dwCallerIDFlags = LINECALLPARTYID_
BLOCKED dwCallerID=NP dwCallerIDName=NP
dwCalledID=NP dwCalledIDName=NP

dwConnectedIDFlags = LINECALLPARTYID_
BLOCKED dwConnectedID=NP dwConnectedIDName=NP dwRedirectingID=B
dwRedirectingIDName=B's Name

dwRedirectionIDFlags = LINECALLPARTYID_
BLOCKED dwRedirectionID=NP dwRedirectionIDName=NP


Forced Authorization and Client Matter Code Scenarios

Manual Call to a Destination that Requires an FAC

Preconditions

Party A is Idle. Party B requires an FAC. Note that the scenario is similar if Party B requires a CMC instead of an FAC.

 
Party A
Actions
CTI Message
TAPI Messages
TAPI Structures

Party A goes offhook

NewCallEvent, CH=C1, GCH=G1, Calling=A, Called=NP, OrigCalled=NP, LR=NP, State=Dialtone, Origin=OutBound, Reason=Direct

LINE_APPNEWCALL

hDevice=A

dwCallbackInstance=0

dwParam1=0

dwParam2=hCall-1

dwParam3=OWNER

LINECALLINFO (hCall-1)

hLine=A

dwCallID=T1

dwOrigin=OUTBOUND

dwReason=DIRECT

dwCallerID=A

dwCalledID=NP

dwConnectedID=NP

dwRedirectionID=NP

dwRedirectionID=NP

CallStateChangedEvent, CH=C1, State=Dialtone, Cause=CauseNoError, Reason=Direct, Calling=A, Called=NP, OrigCalled=NP, LR=NP

LINE_CALLSTATE

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=DIALTONE

dwParam2=UNAVAIL

dwParam3=0

No change

Party A dials Party B

CallStateChangedEvent, CH=C1, State=Dialing, Cause=CauseNoError, Reason=Direct, Calling=A, Called=NP, OrigCalled=NP, LR=NP

LINE_CALLSTATE

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=DIALING

dwParam2=0

dwParam3=0

No change

CallToneChangedEvent, CH=C1, Tone=ZipZip, Feature=FACCMC, FACRequired=True, CMCRequired=False

LINE_DEVSPECIFIC

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=SLDSMT_CALL_TONE_CHANGED

dwParam2=CTONE_ZIPZIP

dwParam3=CZIPZIP_FACREQUIRED

No change

Party A dials the FAC and Party B accepts the call

CallStateChangedEvent, CH=C1, State=Proceeding, Cause=CauseNoError, Reason=Direct, Calling=A, Called=B, OrigCalled=B, LR=NP

LINE_CALLSTATE

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=PROCEEDING

dwParam2=0

dwParam3=0

LINE_CALLINFO

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=CALLEDID

dwParam2=0

dwParam3=0

LINECALLINFO (hCall-1)

hLine=A

dwCallID=T1

dwOrigin=OUTBOUND

dwReason=DIRECT

dwCallerID=A

dwCalledID=B

dwConnectedID=NP

dwRedirectionID=NP

dwRedirectionID=NP

CallStateChangedEvent, CH=C1, State=Ringback, Cause=CauseNoError, Reason=Direct, Calling=A, Called=B, OrigCalled=B, LR=NP

LINE_CALLSTATE

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=RINGBACK

dwParam2=0

dwParam3=0

No change


Manual Call to a Destination that Requires both FAC and CMC

Preconditions

Party A is Idle. Party B requires an FAC and a CMC.

 
Party A
Actions
CTI Message
TAPI Messages
TAPI Structures

Party A goes offhook

NewCallEvent, CH=C1, GCH=G1, Calling=A, Called=NP, OrigCalled=NP, LR=NP, State=Dialtone, Origin=OutBound, Reason=Direct

LINE_APPNEWCALL

hDevice=A

dwCallbackInstance=0

dwParam1=0

dwParam2=hCall-1

dwParam3=OWNER

LINECALLINFO (hCall-1)

hLine=A

dwCallID=T1

dwOrigin=OUTBOUND

dwReason=DIRECT

dwCallerID=A

dwCalledID=NP

dwConnectedID=NP

dwRedirectionID=NP

dwRedirectionID=NP

CallStateChangedEvent, CH=C1, State=Dialtone, Cause=CauseNoError, Reason=Direct, Calling=A, Called=NP, OrigCalled=NP, LR=NP

LINE_CALLSTATE

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=DIALTONE

dwParam2=UNAVAIL

dwParam3=0

No change

Party A dials Party B

CallStateChangedEvent, CH=C1, State=Dialing, Cause=CauseNoError, Reason=Direct, Calling=A, Called=NP, OrigCalled=NP, LR=NP

LINE_CALLSTATE

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=DIALING

dwParam2=0

dwParam3=0

No change

CallToneChangedEvent, CH=C1, Tone=ZipZip, Feature=FACCMC, FACRequired=True, CMCRequired=True

LINE_DEVSPECIFIC

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=SLDSMT_CALL_TONE_CHANGED

dwParam2=CTONE_ZIPZIP

dwParam3=CZIPZIP_FACREQUIRED, CZIPZIP_CMCREQUIRED

No change

Party A dials the FAC.

CallToneChangedEvent, CH=C1, Tone=ZipZip, Feature=FACCMC, FACRequired=False, CMCRequired=True

LINE_DEVSPECIFIC

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=SLDSMT_CALL_TONE_CHANGED

dwParam2=CTONE_ZIPZIP

dwParam3= CZIPZIP_CMCREQUIRED

No change

Party A dials the CMC and Party B accepts the call.

CallStateChangedEvent, CH=C1, State=Proceeding, Cause=CauseNoError, Reason=Direct, Calling=A, Called=B, OrigCalled=B, LR=NP

LINE_CALLSTATE

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=PROCEEDING

dwParam2=0

dwParam3=0

LINE_CALLINFO

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=CALLEDID

dwParam2=0

dwParam3=0

LINECALLINFO (hCall-1)

hLine=A

dwCallID=T1

dwOrigin=OUTBOUND

dwReason=DIRECT

dwCallerID=A

dwCalledID=B

dwConnectedID=NP

dwRedirectionID=NP

dwRedirectionID=NP

CallStateChangedEvent, CH=C1, State=Ringback, Cause=CauseNoError, Reason=Direct, Calling=A, Called=B, OrigCalled=B, LR=NP

LINE_CALLSTATE

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=RINGBACK

dwParam2=0

dwParam3=0

No change


lineMakeCall to a Destination that Requires an FAC

Preconditions

Party A is Idle. Party B requires an FAC. Note that the scenario is similar if Party requires a CMC instead of an FAC

 
Party A
Actions
CTI Message
TAPI Messages
TAPI Structures

Party A does a lineMake
Call() to Party B

NewCallEvent, CH=C1, GCH=G1, Calling=A, Called=NP, OrigCalled=NP, LR=NP, State=Dialtone, Origin=OutBound, Reason=Direct

LINE_CALLINFO

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=ORIGIN

dwParam2=0

dwParam3=0

LINE_CALLINFO

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=REASON, CALLERID

dwParam2=0

dwParam3=0

LINECALLINFO (hCall-1)

hLine=A

dwCallID=T1

dwOrigin=OUTBOUND

dwReason=DIRECT

dwCallerID=A

dwCalledID=NP

dwConnectedID=NP

dwRedirectionID=NP

dwRedirectionID=NP

CallStateChangedEvent, CH=C1, State=Dialing, Cause=CauseNoError, Reason=Direct, Calling=A, Called=NP, OrigCalled=NP, LR=NP

LINE_CALLSTATE

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=DIALING

dwParam2=0

dwParam3=0

No change

Party A does a lineMake
Call() to Party B (cont.)

CallToneChangedEvent, CH=C1, Tone=ZipZip, Feature=FACCMC, FACRequired=True, CMCRequired=False

LINE_DEVSPECIFIC

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=SLDSMT_CALL_TONE_CHANGED

dwParam2=CTONE_ZIPZIP

dwParam3=CZIPZIP_FACREQUIRED

No change

Party A does a lineDial() with the FAC in the dial string and Party B accepts the call

NewCallEvent, CH=C1, GCH=G1, Calling=A, Called=NP, OrigCalled=NP, LR=NP, State=Dialtone, Origin=OutBound, Reason=Direct

LINE_CALLSTATE

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=PROCEEDING

dwParam2=0

dwParam3=0

LINE_CALLINFO

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=CALLEDID

dwParam2=0

dwParam3=0

LINECALLINFO (hCall-1)

hLine=A

dwCallID=T1

dwOrigin=OUTBOUND

dwReason=DIRECT

dwCallerID=A

dwCalledID=B

dwConnectedID=NP

dwRedirectionID=NP

dwRedirectionID=NP

CallStateChangedEvent, CH=C1, State=Ringback, Cause=CauseNoError, Reason=Direct, Calling=A, Called=B, OrigCalled=B, LR=NP

LINE_CALLSTATE

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=RINGBACK

dwParam2=0

dwParam3=0

No change


lineMakeCall to a Destination that Requires Both FAC and CMC

Preconditions

Party A is Idle. Party B requires both an FAC and a CMC.

 
Party A
Actions
CTI Message
TAPI Messages
TAPI Structures

Party A does a lineMakeCall() to Party B

NewCallEvent, CH=C1, GCH=G1, Calling=A, Called=NP, OrigCalled=NP, LR=NP, State=Dialtone, Origin=OutBound, Reason=Direct

LINE_CALLINFO

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=ORIGIN

dwParam2=0

dwParam3=0

LINE_CALLINFO

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=REASON, CALLERID

dwParam2=0

dwParam3=0

LINECALLINFO (hCall-1)

hLine=A

dwCallID=T1

dwOrigin=OUTBOUND

dwReason=DIRECT

dwCallerID=A

dwCalledID=NP

dwConnectedID=NP

dwRedirectionID=NP

dwRedirectionID=NP

CallStateChangedEvent, CH=C1, State=Dialing, Cause=CauseNoError, Reason=Direct, Calling=A, Called=NP, OrigCalled=NP, LR=NP

LINE_CALLSTATE

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=DIALING

dwParam2=0

dwParam3=0

No change

Party A does a lineMakeCall() to Party B (Cont.)

CallToneChangedEvent, CH=C1, Tone=ZipZip, Feature=FACCMC, FACRequired=True, CMCRequired=True

LINE_DEVSPECIFIC

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=SLDSMT_CALL_TONE_CHANGED

dwParam2=CTONE_ZIPZIP

dwParam3=CZIPZIP_FACREQUIRED, CZIPZIP_CMCREQUIRED

No change

Party A does a lineDial() with the FAC in the dial string

CallToneChangedEvent, CH=C1, Tone=ZipZip, Feature=FACCMC, FACRequired=False, CMCRequired=True

LINE_DEVSPECIFIC

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=SLDSMT_CALL_TONE_CHANGED

dwParam2=CTONE_ZIPZIP

dwParam3= CZIPZIP_CMCREQUIRED

 

Party A does a lineDial() with the CMC in the dial string and Party B accepts the call.

CallStateChangedEvent, CH=C1, State=Proceeding, Cause=CauseNoError, Reason=Direct, Calling=A, Called=B, OrigCalled=B, LR=NP

LINE_CALLSTATE

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=PROCEEDING

dwParam2=0

dwParam3=0

LINE_CALLINFO

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=CALLEDID

dwParam2=0

dwParam3=0

LINECALLINFO (hCall-1)

hLine=A

dwCallID=T1

dwOrigin=OUTBOUND

dwReason=DIRECT

dwCallerID=A

dwCalledID=B

dwConnectedID=NP

dwRedirectionID=NP

dwRedirectionID=NP

 

CallStateChangedEvent, CH=C1, State=Ringback, Cause=CauseNoError, Reason=Direct, Calling=A, Called=B, OrigCalled=B, LR=NP

LINE_CALLSTATE

hDevice=hCall-1

dwCallbackInstance=0

dwParam1=RINGBACK

dwParam2=0

dwParam3=0

No change