Table Of Contents
Cisco Device Specific Extensions
Cisco Line Device Specific Extensions
Structures
LINEDEVCAPS Device Specific Extensions
LINECALLINFO Device Specific Extensions
Description
Detail
Parameters
LINEDEVSTATUS Device Specific Extensions
Description
Detail
Parameters
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
Set User SRTP Algorithm IDs
Description
Class Detail
Supported Algorithm Constants
Parameters
Explicit Acquire
Description
Class Details
Parameters
Explicit De-Acquire
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
Send Line Open
Description
Class Detail
Cisco Phone Device Specific Extensions
CCiscoPhoneDevSpecific
Description
Header File
Class Detail
Functions
Parameter
Subclasses
Enumeration
CCiscoPhoneDevSpecificDataPassThrough
Description
Class Detail
Parameters
CCiscoPhoneDevSpecificAcquire
Description
Class Details
Parameters
CCiscoPhoneDevSpecificDeacquire
Description
Class Details
Parameters
CCiscoPhoneDevSpecificGetRTPSnapshot
Description
Class Details
Parameters
Messages
Description
Start Transmission Events
Start Reception Events
Stop Transmission Events
Stop Reception Events
Existing Call Events
Open Logical Channel Events
LINECALLINFO_DEVSPECIFICDATA Events
Call Tone Changed Events
Message Sequence Charts
Manual Outbound Call
Blind Transfer
Redirect Set Original Called (TxToVM)
Shared Line Scenarios
Initiate a New Call Manually
Presentation Indication
Make a Call Through Translation Pattern
Blind Transfer Through Translation Pattern
Forced Authorization and Client Matter Code Scenarios
Manual Call to a Destination that Requires a FAC
Manual Call to a Destination that Requires both FAC and CMC
lineMakeCall to a Destination that Requires a FAC
lineMakeCall to a Destination that Requires Both FAC and CMC
Timeout Waiting for FAC or Invalid FAC entered
Refer / Replaces Scenarios
In-Dialog Refer - Referrer in Cisco Unified CallManager Cluster
In-Dialog Refer Where ReferToTarget Redirects the Call in Offering State
In-Dialog Refer Where Refer Fails / Refer to Target is Busy
Out-of-Dialog Refer
Invite with Replace for Confirmed Dialog
Refer with Replace for All in Cluster
Refer with Replace for All in Cluster, Replace Dialog Belongs to Another Station
3XX scenario
SRTP Scenario
Media Terminate by Application (open secure CTI port or RP)
Media Terminate by TSP Wave Driver (open secure CTI port)
Cisco Device Specific Extensions
This chapter describes the Cisco device-specific TAPI extensions. It describes how to invoke the Cisco device-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 4-1 lists the subclasses of Cisco Line Device Specific Extensions.
Table 4-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.
|
Swap-Hold/SetupTransfer
|
This is not supported in Cisco Unified TSP 4.0 and higher. 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.
|
Set User SRTP Algorithm IDs
|
The CciscoLineDevSpecificUserSetSRTPAlgorithmID class is used to allow application to set SRTP algorithm IDs. Ths cilass should be used after lineopen and before CCiscoLineDevSpecificSetRTPParamsForCall or CCiscoLineDevSpecificUserControlRTPStream
|
Explicit Acquire
|
The CciscoLineDevSpecificAcquire class is used to Explicitly acquire any CTI Controllable device in the Cisco Unified CallManager system, which needs to be opened in Super Provider mode.
|
Explicit De-Acquire
|
The CciscoLineDevSpecificDeacquire class is used to Explicitly De-acquire any CTI Controllable device in the Cisco Unified CallManager system.
|
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 Monitor
|
The CCiscoLineDevSpecificCTIPortThirdPartyMonitor class is used to open a CTI port in third party mode.
|
Send Line Open
|
The CciscoLineDevSpecificSendLineOpen class is used to trigger actual line open from TSP side. This is used for delayed open mechanism.
|
Structures
This section describes device-specific extensions that have been made to the TAPI structures that the Cisco Unified TSP supports.
LINEDEVCAPS Device Specific Extensions
Description
The LineDevCaps_DevSpecificData structure describes the device-specific extensions that the Cisco Unified TSP has made to the LINEDEVCAPS structure.
Detail
A
typedef struct LineDevCaps_DevSpecificData
DWORD m_DevSpecificFlags;
}LINEDEVCAPS_DEV_SPECIFIC_DATA;
Note
This extension is only available if extension version 3.0 (0x00030000) or higher is negotiated.
B
typedef struct LocaleInfo
DWORD Locale; //This will have the locale info of the device
DWORD PartitionSize; //This will have the partition info of the line.
Note
The Locale info is only available along with LINEDEVCAPS_DEV_SPECIFIC_DATA if extension version 6.0 (0x00060000) or higher is negotiated.
C
typedef struct PartitionInfo
DWORD PartitionSize; //This will have the partition info of the line.
Note
Both the Locale and Partition Info is available along with LINEDEVCAPS_DEV_SPECIFIC_DATA if extension version 6.1 (0x00060001) or higher is negotiated.
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.
DWORD Locale
This identifies the locale information for the device. The typical values could be:
ENGLISH_UNITED_STATES = 1,
PORTUGUESE_PORTUGAL = 10,
TRADITIONAL_CHINESE_CHINA = 19,
SIMPLIFIED_CHINESE_CHINA = 20,
LINECALLINFO Device Specific Extensions
Description
The TSP_Unicode_Party_names structure and SRTP info structure describes the device specific extensions that have been made to the LINECALLINFO structure by the Cisco Unified TSP. DSCPValueForAudioCalls will contain the DSCP value sent by CTI in the StartTransmissionEvent.
ExtendedCallInfo structure will have extra call information. For this release ExtendedCallReason field will be part of the ExtendedCallInfo structure.
Detail
DWORD TapiCallerPartyUnicodeNameOffset;
DWORD TapiCallerPartyUnicodeNameSize;
DWORD TapiCallerPartyLocale;
DWORD TapiCalledPartyUnicodeNameOffset;
DWORD TapiCalledPartyUnicodeNameSize;
DWORD TapiCalledPartyLocale;
DWORD TapiConnectedPartyUnicodeNameOffset;
DWORD TapiConnectedPartyUnicodeNameSize;
DWORD TapiConnectedPartyLocale;
DWORD TapiRedirectionPartyUnicodeNameOffset;
DWORD TapiRedirectionPartyUnicodeNameSize;
DWORD TapiRedirectionPartyLocale;
DWORD TapiRedirectingPartyUnicodeNameOffset;
DWORD TapiRedirectingPartyUnicodeNameSize;
DWORD TapiRedirectingPartyLocale;
DWORD SRTPKeyInfoStructureOffset; // offset from base of LINECALLINFO
DWORD SRTPKeyInfoStructureSize; // includes variable length data total size
DWORD SRTPKeyInfoStructureElementCount;
DWORD SRTPKeyInfoStructureElementFixedSize;
DWORD DSCPValueInformationOffset;
DWORD DSCPValueInformationSize;
DWORD DSCPValueInformationElementCount;
DWORD DSCPValueInformationElementFixedSize;
DWORD PartitionInformationOffset; // offset from base of LINECALLINFO
DWORD PartitionInformationSize; // includes variable length data total size
DWORD PartitionInformationElementCount;
DWORD PartitionInformationElementFixedSize;
DWORD ExtendedCallInfoOffset;
DWORD ExtendedCallInfoSize;
DWORD ExtendedCallInfoElementCount;
DWORD ExtendedCallInfoElementSize;
typedef struct SRTPKeyInfoStructure
SRTPKeyInformation TransmissionSRTPInfo;
SRTPKeyInformation ReceptionSRTPInfo;
typedef struct SRTPKeyInformation
DWORD IsSRTPDataAvailable;
DWORD SecureMediaIndicator; // CiscoSecurityIndicator
DWORD AlgorithmID; // CiscoSRTPAlgorithmIDs
enum CiscoSRTPAlgorithmIDs
enum CiscoSecurityIndicator
SRTP_MEDIA_ENCRYPT_KEYS_AVAILABLE,
SRTP_MEDIA_ENCRYPT_USER_NOT_AUTH,
SRTP_MEDIA_ENCRYPT_KEYS_UNAVAILABLE,
If isSRTPInfoavailable is set to false, the rest of the information from SRTPKeyInformation should be ignored.
If MasterKeySize or MasterSlatSize is set to 0, then the corresponding MasterKeyOffset or MasterSaltOffset should be ignored.
typedef struct DSCPValueInformation
DWORD DSCPValueForAudioCalls;
typedef struct PartitionInformation
DWORD CallerIDPartitionOffset;
DWORD CallerIDPartitionSize;
DWORD CalledIDPartitionOffset;
DWORD CalledIDPartitionSize;
DWORD ConnecetedIDPartitionOffset;
DWORD ConnecetedIDPartitionSize;
DWORD RedirectionIDPartitionOffset;
DWORD RedirectionIDPartitionSize;
DWORD RedirectingIDPartitionOffset;
DWORD RedirectingIDPartitionSize;
DWORD ExtendedCallReason ;
DWORD CallerIDURLOffset; // CallPartySipURLInfo
DWORD CalledIDURLOffset; // CallPartySipURLInfo
DWORD ConnectedIDURIOffset; // CallPartySipURLInfo
DWORD ConnectedIDURISize;
DWORD RedirectionIDURIOffset; // CallPartySipURLInfo
DWORD RedirectionIDURISize;
DWORD RedirectingIDURIOffset; // CallPartySipURLInfo
DWORD RedirectingIDURISize;
Struct CallPartySipURLInfo
DWORD dwUserOffset; //sip user string
DWORD dwHostOffset; //host name string
DWORD dwPort; // integer port number
DWORD dwTransportType; // SIP_TRANS_TYPE
DWORD dwURLType; // SIP_URL_TYPE
Parameters
Parameter
|
Value
|
TapiCallerPartyUnicodeNameOffset TapiCallerPartyUnicodeNameSize
|
The size, in bytes, of the variably sized field containing the Unicode Caller party identifier name information, and the offset, in bytes, from the beginning of the LINECALLINFO data structure.
|
TapiCallerPartyLocale
|
Contains the Unicode Caller party identifier name Locale information
|
TapiCalledPartyUnicodeNameOffset TapiCalledPartyUnicodeNameSize
|
The size, in bytes, of the variably sized field containing the Unicode Called party identifier name information, and the offset, in bytes, from the beginning of the LINECALLINFO data structure.
|
TapiCalledPartyLocale
|
Contains the Unicode Called party identifier name Locale information
|
TapiConnectedPartyUnicodeNameOffset TapiConnectedPartyUnicodeNameSize
|
The size, in bytes, of the variably sized field containing the Unicode Connected party identifier name information, and the offset, in bytes, from the beginning of the LINECALLINFO data structure.
|
TapiConnectedPartyLocale
|
Contains the Unicode Connected party identifier name Locale information
|
TapiRedirectionPartyUnicodeNameOffset TapiRedirectionPartyUnicodeNameSize
|
The size, in bytes, of the variably sized field containing the Unicode Redirection party identifier name information, and the offset, in bytes, from the beginning of the LINECALLINFO data structure.
|
TapiRedirectionPartyLocale
|
Contains the Unicode Redirection party identifier name Locale information
|
TapiRedirectingPartyUnicodeNameOffset TapiRedirectingPartyUnicodeNameSize
|
The size, in bytes, of the variably sized field containing the Unicode Redirecting party identifier name information, and the offset, in bytes, from the beginning of the LINECALLINFO data structure.
|
TapiRedirectingPartyLocale
|
Contains the Unicode Redirecting party identifier name Locale information
|
SRTPKeyInfoStructureOffset
|
Point to SRTPKeyInfoStructure
|
SRTPKeyInfoStructureSize
|
Total size of SRTP info
|
SRTPKeyInfoStructureElementCount
|
Number of SRTPKeyInfoStructure element
|
SRTPKeyInfoStructureElementFixedSize
|
Fixed size of SRTPKeyInfoStructure
|
SecureMediaIndicator
|
Indicates whether media is secure and whether application is authorized for key information
|
MasterKeyOffset MasterKeySize
|
Contains the offset and size of SRTP MasterKey information
|
MasterSaltOffset MasterSaltSize
|
Contains the offset and size of SRTP MasterSaltKey information
|
AlgorithmID
|
Specifies negotiated SRTP algorithm ID
|
IsMKIPresent
|
Indicates whether MKI is present.
|
KeyDerivationRate
|
Provides the KeyDerivationRate.
|
DSCPValueForAudioCalls
|
Contains the DSCP value for Audio Calls.
|
CallerIDPartitionOffset CallerIDPartitionSize
|
The size, in bytes, of the variably sized field containing the Caller party identifier Partition information, and the offset, in bytes, from the beginning of LINECALLINFO data structure.
|
CalledIDPartitionOffset CalledIDPartitionSize
|
The size, in bytes, of the variably sized field containing the Called party identifier Partition information, and the offset, in bytes, from the beginning of LINECALLINFO data structure.
|
ConnectedIDPartitionOffset ConnecetedIDPartitionSize
|
The size, in bytes, of the variably sized field containing the Connected party identifier Partition information, and the offset, in bytes, from the beginning of LINECALLINFO data structure.
|
RedirectionIDPartitionOffset RedirectionIDPartitionSize
|
The size, in bytes, of the variably sized field containing the Redirection party identifier Partition information, and the offset, in bytes, from the beginning of LINECALLINFO data structure.
|
RedirectingIDPartitionOffset RedirectingIDPartitionSize
|
The size, in bytes, of the variably sized field containing the Redirecting party identifier Partition information, and the offset, in bytes, from the beginning of LINECALLINFO data structure.
|
ExtendedCallReason
|
Presents all the last feature related CTI Call reason code to application as an extension to the standard reason codes that TAPI supports. This provides the feature specific information per call. As SIPPhones are now supported through CTI, new features can be introduced for SIPPhones during releases. This field will not be backward compatible and can change as changes or additions are made in the SIPPhone support for a feature. Applications should implement some default behavior to handle any unknown reason codes that might be provided through this field.
For Refer the reason code is CtiCallReason_Refer.
For Replaces the reason code is CtiCallReason_Replaces.
|
CallerIDURLOffset CallerIDURLSize
|
The size, in bytes, of the variably sized field containing the Caller party identifier URL information, and the offset, in bytes, from the beginning of LINECALLINFO data structure.
|
CalledIDURLOffset CalledIDURLSize
|
The size, in bytes, of the variably sized field containing the Called party identifier URL information, and the offset, in bytes, from the beginning of LINECALLINFO data structure.
|
ConnectedIDURLOffset ConnecetedIDURLSize
|
The size, in bytes, of the variably sized field containing the Connected party identifier URL information, and the offset, in bytes, from the beginning of LINECALLINFO data structure.
|
RedirectionIDURLOffset RedirectionIDURLSize
|
The size, in bytes, of the variably sized field containing the Redirection party identifier URL information, and the offset, in bytes, from the beginning of LINECALLINFO data structure.
|
RedirectingIDURLOffset RedirectingIDURLSize
|
The size, in bytes, of the variably sized field containing the Redirecting party identifier URL information, and the offset, in bytes, from the beginning of LINECALLINFO data structure.
|

Note
To indicate there is partition Information in the LINECALLINFO structure, a LINECALLINFOSTATE_DEVSPECIFIC will be fired.
Also, whenever there is a change in the partition information, a LINEDEVSPECIFIC event will be fired indicating which exact field in the devSpecific portion of the LINECALLINFO has changed as shown below. This event if fired only if the application has negotiated 7.0 extension version or higher.
hDevice = hcall //call handle for which the info has changed.
dwParam1 = SLDSMT_LINECALLINFO_DEVSPECIFICDATA //indicates DevSpecific portion's changed
dwParam2 = SLDST_SRTP_INFO|SLDST_QOS_INFO|SLDST_PARTITION_INFO|SLDST_EXTENDED_CALL_INFO
dwParam3 will be security indicator if dwParam2 has bit set for SLDST_SRTP_INFO
SLDST_SRTP_INFO = 0x00000001
SLDST_QOS_INFO = 0x00000002
SLDST_PARTITION_INFO = 0x00000004
SLDST_EXTENDED_CALL_INFO = 0x00000008
LINEDEVSTATUS Device Specific Extensions
Description
The LINEDEVSTATUS_DEV_SPECIFIC_DATA structure describes the device specific extensions that have been made to the LINEDEVSTATUS structure by the Cisco Unified TSP.
Detail
typedef struct devSpecific_SupportedEncoding
DWORD dwSupportedEncoding;
LPCSTR lpszAlternateScript;
}LINEDEVSTATUS_DEV_SPECIFIC_DATA;
Note
This extension is only available if extension version 0x00060000 or higher is negotiated.
Parameters
DWORD dwSupportEncoding
This indicates the Support Encoding for the Unicode Party names being sent in device specfic extension of the LINECALLINFO structure.
The typical values could be:
UnknownEncoding = 0, // Unknown encoding
NotApplicableEncoding = 1, // Encoding not applicable to this device
AsciiEncoding = 2, // ASCII encoding
Ucs2UnicodeEncoding = 3 // UCS-2 Unicode encoding
LPCSTR lpszAlternateScript
This parameter specifies the alternate script supported by the device. An empty string indicates the device does not support or is not configured with an alternate script.
The only supported script in this release is "Kanji" for the Japanese locale.
CCiscoLineDevSpecific
+-- CCiscoLineDevSpecificMsgWaiting
+-- CCiscoLineDevSpecificMsgWaitingDirn
+-- CCiscoLineDevSpecificUserControlRTPStream
+--CciscoLineDevSpecificSetStatusMsgs
+--CCiscoLineDevSpecificRedirectResetOrigCalled
+--CCiscoLineDevSpecificPortRegistrationPerCall
+--CciscoLineDevSpecificSetRTPParamsForCall
+--CCiscoLineDevSpecificRedirectSetOrigCalled
+--CCiscoLineDevSpecificJoin
+--CciscoLineDevSpecificUserSetSRTPAlgorithmID
+--CCiscoLineDevSpecificAcquire
+--CciscoLineDevSpecificDeacquire
+-- CciscoLineDevSpecificSendLineOpen
Description
This section provides information on how to perform Cisco Unified 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
CCicsoLineDevSpecific(DWORD msgType);
virtual ~CCiscoLineDevSpecific();
DWORD GetMsgType(void) const {return m_MsgType;}
void* lpParams() {return &m_MsgType;}
virtual DWORD dwSize() = 0;
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_USER_CRTL_OF_RTP_STREAM,
SLDST_SET_STATUS_MESSAGES,
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_SRTP_ALGORITHM_ID,
Message Waiting
+-- CCiscoLineDevSpecificMsgWaiting
Description
The CCiscoLineDevSpecificMsgWaiting class turns the message waiting lamp on or off for the line that the hLine parameter specifies.
Note
This extension does not require an extension version to be negotiated.
Class Detail
class CCiscoLineDevSpecificMsgWaiting : public CCiscoLineDevSpecific
CCiscoLineDevSpecificMsgWaiting() : CCiscoLineDevSpecific(SLDST_MSG_WAITING){}
virtual ~CCiscoLineDevSpecificMsgWaiting() {}
virtual DWORD dwSize(void) const {return sizeof(*this)-4;}
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
+-- 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.
Note
This extension does not require an extension version to be negotiated.
Class Detail
class CCiscoLineDevSpecificMsgWaitingDirn : public CCiscoLineDevSpecific
CCiscoLineDevSpecificMsgWaitingDirn() :
CCiscoLineDevSpecific(SLDST_MSG_WAITING_DIRN) {}
virtual ~CCiscoLineDevSpecificMsgWaitingDirn() {}
virtual DWORD dwSize(void) const {return sizeof(*this)-4;}
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
+-- 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
CCiscoLineDevSpecificUserControlRTPStream() :
CCiscoLineDevSpecific(SLDST_USER_CRTL_OF_RTP_STREAM),
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];
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:
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_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_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,
Read MaxFramesPerPacket as MaxPacketSize. It specifies a 16-bit integer that indicates the maximum desired RTP packet size in milliseconds. Typically, this value is 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.
Media_G723BRate_5_3 = 1, //5.3Kbps
Media_G723BRate_6_4 = 2 //6.4Kbps
Set Status Messages
+-- 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 Unified 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
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
Identifies which status changes cause a LINE_DEVSPECIFIC message to be sent to the application.
The supported values are as follows:
#define DEVSPECIFIC_MEDIA_STREAM 0x00000001
#define DEVSPECIFIC_CALL_TONE_CHANGED 0x00000002
Swap-Hold/SetupTransfer
Note
This is not supported in Cisco Unified 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 two calls. In Cisco Unified 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 Unified TSP 4.0 and beyond.
+-- 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
CCiscoLineDevSpecificSwapHoldSetupTransfer() :
CCiscoLineDevSpecific(SLDST_SWAP_HOLD_SETUP_TRANSFER) {}
virtual ~CCiscoLineDevSpecificSwapHoldSetupTransfer() {}
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
+-- 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
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
+-- 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
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];
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:
DWORD MaxFramesPerPacket;
} 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.
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_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_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,
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.
Media_G723BRate_5_3 = 1, //5.3Kbps
Media_G723BRate_6_4 = 2 //6.4Kbps
Setting RTP Parameters for Call
+-- 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
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
+-- 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
CCiscoLineDevSpecificRedirectSetOrigCalled () :
CCiscoLineDevSpecific(SLDST_REDIRECT_SET_ORIG_CALLED) {}
virtual ~ CCiscoLineDevSpecificRedirectSetOrigCalled () {}
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
+-- 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 Unified 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 Unified 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
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:
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.
Set User SRTP Algorithm IDs
+-- CciscoLineDevSpecificUserSetSRTPAlgorithmID
Description
The CciscoLineDevSpecificUserSetSRTPAlgorithmID class is used to allow applications to set SRTP algorithm IDs. To use this class, the lineNegotiateExtVersion API must be called before opening the line. When calling lineNegotiateExtVersion the highest bit or second 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 CciscoLineDevSpecificUserSetSRTPAlgorithmID class.
Note
This extension is only available if extension version 0x80070000, 0x4007000 or higher is negotiated.
Procedure
Step 1
Call lineNegotiateExtVersion for the deviceID of the line to be opened. (0x80070000 or 0x4007000 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 CciscoLineDevSpecificUserSetSRTPAlgorithmID message in the lpParams parameter to specify SRTP algorithm ids.
Step 4
Call lineDevSpecific with either CciscoLineDevSpecificPortRegistrationPerCall or CCiscoLineDevSpecificUserControlRTPStream message in the lpParams parameter.
Class Detail
class CciscoLineDevSpecificUserSetSRTPAlgorithmID: public CCiscoLineDevSpecific
CciscoLineDevSpecificUserSetSRTPAlgorithmID () :
CCiscoLineDevSpecific(SLDST_USER_SET_SRTP_ALGORITHM_ID),
m_SRTP_Fixed_Element_Size(4)
virtual ~ CciscoLineDevSpecificUserSetSRTPAlgorithmID () {}
DWORD m_SRTPAlgorithmCount; //Maximum is MAX_CISCO_SRTP_ALGORITHM_IDS
DWORD m_SRTP_Fixed_Element_Size;//Should be size of DWORD, it should be always 4.
DWORD m_SRTPAlgorithm_Offset; //offset from beginning of the message buffer
virtual DWORD dwSize(void) const {return sizeof(*this)-4;} // subtract out the virtual
function table pointer
Supported Algorithm Constants
enum CiscoSRTPAlgorithmIDs
Parameters
DWORD m_MsgType
Equals SLDST_USER_SET_SRTP_ALGORITHM_ID
DWORD m_SRTPAlgorithmCount
This numbers of algorithm Ids specified in this message.
DWORD m_SRTP_Fixed_Element_Size
Should be size of DWORD, it should be always 4.
DWORD m_SRTPAlgorithm_Offset
Offset from the beginning of the message buffer. This is offset where you start put algorithm id array.
Note
dwSize should be recalculated based on size of the structure, m_SRTPAlgorithmCount and m_SRTP_Fixed_Element_Size.
Explicit Acquire
+--CCiscoLineDevSpecificAcquire
Description
The CCiscoLineDevSpecificAcquire class is used to explicitly acquire any CTI controllable device.
If an Superprovider app needs to open any CTI Controllable device on the Unified CM system. The app should explicitly acquire that device using the above interface. After successful response, it can open the device as usual.
Note
This extension is only available if extension version 0x00070000 or higher is negotiated.
Class Details
class CCiscoLineDevSpecificAcquire : public CCiscoLineDevSpecific
CCiscoLineDevSpecificAcquire () : CCiscoLineDevSpecific(SLDST_ACQUIRE) {}
virtual ~ CCiscoLineDevSpecificAcquire () {}
virtual DWORD dwSize(void) const {return sizeof(*this)-4;}
// subtract out the virtual function table pointer
Parameters
DWORD m_MsgType
Equals SLDST_ACQUIRE
char m_DeviceName[16]
The DeviceName that needs to be explicitly acquired.
Explicit De-Acquire
+--CCiscoLineDevSpecificDeacquire
Description
The CCiscoLineDevSpecificDeacquire class is used to explicitly de-acquire the explicitly acquired device.
If an Superprovider app has explicitly acquired any CTI Controllable device on the Unified CM system, then the app should explicitly De-acquire that device using the above interface.
Note
This extension is only available if extension version 0x00070000 or higher is negotiated.
Class Details
class CCiscoLineDevSpecificDeacquire : public CCiscoLineDevSpecific
CCiscoLineDevSpecificDeacquire () : CCiscoLineDevSpecific(SLDST_ACQUIRE) {}
virtual ~ CCiscoLineDevSpecificDeacquire () {}
virtual DWORD dwSize(void) const {return sizeof(*this)-4;}
// subtract out the virtual function table pointer
Parameters
DWORD m_MsgType
Equals SLDST_DEACQUIRE
char m_DeviceName[16]
The DeviceName that needs to be explicitly de-acquired.
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
CCiscoLineDevSpecificRedirectFACCMC () : CCiscoLineDevSpecific(SLDST_REDIRECT_FAC_CMC)
{}
virtual ~ CCiscoLineDevSpecificRedirectFACCMC () {}
// 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
+--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
CCiscoLineDevSpecificBlindTransferFACCMC () :
CCiscoLineDevSpecific(SLDST_BLIND_TRANSFER_FAC_CMC) {}
virtual ~ CCiscoLineDevSpecificBlindTransferFACCMC () {}
// 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
+-- 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
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
Send Line Open
+-- CciscoLineDevSpecificSendLineOpen
Description
The CciscoLineDevSpecificSendLineOpen class is used for general delayed open purpose. To use this class, the lineNegotiateExtVersion API must be called before opening the line. When calling lineNegotiateExtVersion the second 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 CciscoLineDevSpecificUserSetSRTPAlgorithmID class.
Procedure
Step 1
Call lineNegotiateExtVersion for the deviceID of the line to be opened. (0x40070000 with the dwExtLowVersion and dwExtHighVersion parameters)
Step 2
Call lineOpen for the deviceID of the line to be opened.
Step 3
Call other lineDevSpecific, like CciscoLineDevSpecificUserSetSRTPAlgorithmID message in the lpParams parameter to specify SRTP algorithm ids.
Step 4
Call lineDevSpecific with either CciscoLineDevSpecificSendLineOpen to trigger the lineopen from TSP side.
Note
This extension is only available if extension version 0x40070000 or higher is negotiated.
Class Detail
class CciscoLineDevSpecificSendLineOpen: public CCiscoLineDevSpecific
CciscoLineDevSpecificSendLineOpen () :
CCiscoLineDevSpecific(SLDST_SEND_LINE_OPEN) {}
virtual ~ CciscoLineDevSpecificSendLineOpen () {}
virtual DWORD dwSize(void) const {return sizeof(*this)-4;} // subtract out the virtual
function table pointer
Cisco Phone Device Specific Extensions
Table 4-2 lists the subclasses of CiscoPhoneDevSpecific.
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
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;
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
CCiscoPhoneDevSpecificDataPassThrough
+-- 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 a Cisco Unified 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
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.
CCiscoPhoneDevSpecificAcquire
+-- CCiscoPhoneDevSpecificAcquire
Description
The CCiscoPhoneDevSpecificAcquire class is used to explicitly acquire any CTI controllable device.
If an Superprovider app needs to open any CTI Controllable device on the Unified CM system. The app should explicitly acquire that device using the above interface. After successful response, it can open the device as usual.
Note
This extension is only available if extension version 0x00070000 or higher is negotiated.
Class Details
class CCiscoPhoneDevSpecific Acquire : public CCiscoPhoneDevSpecific
CCiscoPhoneDevSpecificAcquire () : CCiscoPhoneDevSpecific (CPDST_ACQUIRE) {}
virtual ~ CCiscoPhoneDevSpecificAcquire () {}
virtual DWORD dwSize(void) const {return sizeof(*this)-4;}
// subtract out the virtual function table pointer
Parameters
DWORD m_MsgType
equals CPDST_ACQUIRE
char m_DeviceName[16]
The DeviceName that needs to be explicitly acquired.
CCiscoPhoneDevSpecificDeacquire
+-- CCiscoPhoneDevSpecificDeacquire
Description
The CCiscoPhoneDevSpecificDeacquire class is used to explicitly de-acquire an explicitly acquired device.
If a SuperProvider application has explicitly acquired any CTI Controllable device on the CallManager system, then the application should explicitly de-acquire that device using this interface.
Note
This extension is only available if extension version 0x00070000 or higher is negotiated.
Class Details
class CCiscoPhoneDevSpecificDeacquire : public CCiscoPhoneDevSpecific
CCiscoPhoneDevSpecificDeacquire () : CCiscoPhoneDevSpecific (CPDST_ACQUIRE) {}
virtual ~ CCiscoPhoneDevSpecificDeacquire () {}
virtual DWORD dwSize(void) const {return sizeof(*this)-4;}
// subtract out the virtual function table pointer
Parameters
DWORD m_MsgType
equals CPDST_DEACQUIRE
char m_DeviceName[16]
The DeviceName that needs to be explicitly de-acquired.
CCiscoPhoneDevSpecificGetRTPSnapshot
+-- CCiscoPhoneDevSpecificGetRTPSnapshot
Description
The CCiscoPhoneDevSpecificGetRTPSnapshot class is used to request Call RTP snapshot event from the device. There will be LineCallDevSpecific event for each call on the device.
Note
This extension is only available if extension version 0x00070000 or higher is negotiated.
Class Details
class CCiscoPhoneDevSpecificGetRTPSnapshot: public CCiscoPhoneDevSpecific
CCiscoPhoneDevSpecificGetRTPSnapshot () : CCiscoPhoneDevSpecific
(CPDST_REQUEST_RTP_SNAPSHOT_INFO) {}
virtual ~ CCiscoPhoneDevSpecificGetRTPSnapshot () {}
virtual DWORD dwSize(void) const {return sizeof(*this)-4;}
// subtract out the virtual function table pointer
Parameters
DWORD m_MsgType
equals CPDST_DEACQUIRE
char m_DeviceName[16]
The DeviceName that needs to be explicitly de-acquired.
Messages
This section describes the line device specific messages that the Cisco Unified 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 secure media status.
The message type is an enumerated integer with the following values:
enum CiscoLineDevSpecificMsgType
SLDSMT_START_TRANSMISION = 1,
SLDSMT_LINE_EXISTING_CALL,
SLDSMT_OPEN_LOGICAL_CHANNEL,
SLDSMT_CALL_TONE_CHANGED,
SLDSMT_LINECALLINFO_DEVSPECIFICDATA,
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
SLDSMT_STOP_TRANSMISION
When a message is received, transmission of the streaming should be stopped.
At extension version 1.0 (0x00010000), stop transmission has the following format:
•
dwParam1 - Message type
At extension version 4.0 (0x00040000), stop transmission has the following format:
•
hCall - The call the Stop Transmission event is for
•
dwParam1 - Message type
Stop Reception Events
SLDSMT_STOP_RECEPTION
When a message is received, reception of the streaming should be stopped.
At extension version 1.0 (0x00010000), stop reception has the following format:
•
dwParam1 - message type
At extension version 4.0 (0x00040000), stop reception has the following format:
•
hCall - The call the Stop Reception event is for
•
dwParam1 - Message type
Existing Call Events
SLDSMT_LINE_EXISTING_CALL
These events inform the application of existing calls in the PBX when it starts up. The format of the parameters is as follows:
•
dwParam1 - Message type
•
dwParam2 - Call object
•
dwParam3 - TAPI call handle
Open Logical Channel Events
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
LINECALLINFO_DEVSPECIFICDATA Events
SLDSMT_LINECALLINFO_DEVSPECIFICDATA
This message indicates DEVSPECIFICDATA information change in the DEVSPECIFIC portion of the LINECALLINFO structure for SRTP, QoS and Partition support.
Note
This event is available only if extension version 0x00070000 or higher is negotiated.
The format of the parameters is:
•
hCall - The call handle
•
dwParam1 - Message type
SLDSMT_LINECALLINFO_DEVSPECIFICDATA\
•
dwParam2 - This is a bitMask Indicator field for SRTP, QoS and Partition.
SLDST_SRTP_INFO | SLDST_QOS_INFO | SLDST_PARTITION_INFO | SLDST_EXTENDED_CALL_INFO
The bit mask values are:
SLDST_SRTP_INFO = 0x00000001
SLDST_QOS_INFO = 0x00000002
SLDST_PARTITION_INFO = 0x00000004
SLDST_EXTENDED_CALL_INFO = 0x00000008
For example, if there are changes in SRTP and QoS but not in Partition, then both the SLDST_SRTP_INFO and SLDST_QOS_INFO bits will be set. The value for dwParam2 = SLDST_SRTP_INFO | SLDST_QOS_INFO = 0x00000011.
•
dwParam3
If there is a change in the SRTP Information, then this field would contain the CiscoSecurityIndicator.
enum CiscoSecurityIndicator
SRTP_MEDIA_ENCRYPT_KEYS_AVAILABLE,
SRTP_MEDIA_ENCRYPT_USER_NOT_AUTH,
SRTP_MEDIA_ENCRYPT_KEYS_UNAVAILABLE,
Note
dwParam3 is used when dwParam2 has the SRTP bit mask set.
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 Unified 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—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 Unified 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
|
CTI Messages
|
TAPI Messages
|
TAPI Structures
|
1. Party A goes offhook
|
NewCallEven 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_DEVSPECIFIC1 hDevice=hCall-1 dwCallBackInstance=0 dwParam1=StartReception dwParam2=IP Address dwParam3=Port
|
No change
|
CallStartTransmissionEvent, DH=A, CH=C1
|
LINE_DEVSPECIFIC2 hDevice=hCall-1 dwCallBackInstance=0 dwParam1=StartTransmission dwParam2=IP Address dwParam3=Port
|
No change
|
Blind Transfer
Precondition
A calls B. B answers. A and B are connected.
Action
|
CTI Messages
|
TAPI Messages
|
TAPI Structures
|
Party B does a lineBlindTranfser() to blind transfer call from party A to party C
|
Party A
|
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
|
Party C is offering
|
Party A
|
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.
Action
|
CTI Messages
|
TAPI Messages
|
TAPI Structures
|
Party B does lineDevSpecific for REDIRECT_SET_ORIG_CALLED with DestDN = C's VMP and SetOrigCalled = C.
|
Party A
|
CallPartyInfoChangedEvent, CH=C1, CallingChanged=False, Calling=A, CalledChanged=True, Called=C, OriginalCalled=NULL, LR=NULL, Cause=Redirect
|
LINE_CALLINFO, hDevice=hCall-1, dwCallbackInstance=0, dwParam1=CONNECTEDID, REDIRECTINGID, REDIRECTIONID
|
TSPI LINECALLINFO dwOrigin=OUTBOUND dwReason=DIRECT dwCallerID=A dwCalledID=C 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's VMP
|
NewCallEvent, CH=C3, origin=Internal_Inbound, reason=Redirect, Calling=A, Called=C, OriginalCalled=C, LR=B
|
TSPI: LINE_APPNEWCALL hDevice=C dwCallbackInstance=0 dwParam1=0 dwParam2=hCall-1 dwParam3=OWNER
|
TSPI LINECALLINFO dwOrigin=INTERNAL dwReason=REDIRECT dwCallerID=A dwCalledID=C dwConnectedID=NULL dwRedirectingID=B dwRedirectionID=C's VMP
|
Party C is offering
|
Party A
|
CallStateChangeEvent, CH=C1, State=Ringback, Reason=Direct, Calling=A, Called=C, OriginalCalled=C, 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's VMP
|
Party C
|
CallStateChangedEvent, CH=C3, State=Offering, Reason=Redirect, Calling=A, Called=C, OriginalCalled=C, 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
|
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
|
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, S tate=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
|
3. Party B accepts call (continued)
|
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
|
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's 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's 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
|
CallStartTransmissionEvent, DH=A, CH=C1
|
LINE_DEVSPECIFIC1 hDevice=hCall-1 dwCallBackInstance=0 dwParam1= StartTransmission dwParam2=IP Address dwParam3=Port
|
No change
|
Blind Transfer Through Translation Pattern
A calls via translation pattern B.
B answers.
A and B are connected.
Action
|
CTI Messages
|
TAPI Messages
|
TAPI Structures
|
Party B does a lineBlindTranfser() to blind transfer call from party A to party C via translation pattern
|
Party A
|
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's name dwConnectedIDFlags = LINECALLPARTYID_ BLOCKED dwConnectedID=NP dwConnectedIDName=NP dwRedirectingID=B dwRedirectingIDName= B's 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's name dwConnectedIDFlags = LINECALLPARTYID_ BLOCKED dwConnectedID=NP dwConnectedIDName=NP dwRedirectingID=B dwRedirectingIDName= B's name dwRedirectionIDFlags = LINECALLPARTYID_ BLOCKED dwRedirectionID=NP dwRedirectionIDName=NP
|
Party B does a lineBlindTranfser() to blind transfer call from party A to party C via translation pattern (continued)
|
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 C is offering
|
Party A
|
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's name dwConnectedIDFlags = LINECALLPARTYID_ BLOCKED dwConnectedID=NP dwConnectedIDName=NP dwRedirectingID=B dwRedirectingIDName= B's name dwRedirectionIDFlags = LINECALLPARTYID_ BLOCKED dwRedirectionID=NP dwRedirectionIDName=NP
|
Party C is offering (continued)
|
Party C
|
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 a 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.
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.
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 a 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
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 (continued)
|
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 a FAC and a CMC.
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
|
Party A does a lineMakeCall() to Party B (continued)
|
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 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
|
No change
|
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
|
Timeout Waiting for FAC or Invalid FAC entered
Preconditions
Party A is Idle. Party B requires a FAC.
Note that the scenario is similar if Party B required a CMC instead of a FAC.
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
|
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
|
T302 timer times out waiting for digits or Party A does a lineDial() with an invalid FAC.
|
CallStateChangedEvent, CH=C1, State=Disconnected, Cause= CtiNoRouteToDDestination, Reason=FACCMC, Calling=A, Called=NP, OrigCalled=NP, LR=NP
|
LINE_CALLSTATE hDevice=hCall-1 dwCallbackInstance=0 dwParam1=DISCONNECTED dwParam2=DISCONNECT MODE_FACCMC1 dwParam3=0
|
No change
|
CallStateChangedEvent, CH=C1, State=Idle, Cause=CtiCauseNoError, Reason=Direct, Calling=A, Called=NP, OrigCalled=NP, LR=NP
|
LINE_CALLSTATE hDevice=hCall-1 dwCallbackInstance=0 dwParam1=IDLE dwParam2=0 dwParam3=0
|
No change
|
1 dwParam2 will on be set to DISCONNECTMODE_FACCMC if the extension version on the line has been set to at least 0x00050000. Otherwise, dwParam2 will be set to DISCONNECTMODE_UNAVAIL.
|
Refer / Replaces Scenarios
In-Dialog Refer - Referrer in Cisco Unified CallManager Cluster
Actions
|
CallState/CallInfo @Referrer (A)
|
CallState/CallInfo @Referree (B)
|
CallState/CallInfo @Refer-to-Target (C)
|
Referrer (A), Referee (B,) and Refer-to-Target (C) are present in Cisco Unified CallManager cluster and CTI is monitoring those lines.
|
A-->B has a call in connected state. The call party information at A should be {calling=A, called=B, LRP=null, origCalled=B, reason=direct}
TAPI CallInfo dwCallerID = A dwCalledID = B dwRedirectingID = null dwRedirectionID = null dwConnectedID = B dwReason = Direct dwOrigin =LINECALL ORIGIN_INTERNAL
|
A-->B has a call in connected state. The call party information at B should be {calling=A, called=B, LRP=null, origCalled=B, reason=direct}
TAPI CallInfo dwCallerID = A dwCalledID = B dwRedirectingID = null dwRedirectionID = null dwConnectedID = A dwReason = Direct dwOrigin = LINECALL ORIGIN_INTERNAL
|
|
(A) initiates REFER (B) to (C)
|
A gets LINECALLSTATE_ UNKNOWN | CLDSMT_ CALL_WAITING_STATE with extended reason = REFER
TAPI CallInfo dwCallerID = A dwCalledID = B dwRedirectingID = null dwRedirectionID = null dwConnectedID = B dwReason = Direct dwOrigin =LINECALL ORIGIN_INTERNAL
|
|
NewCallEvent should be {calling=B, called=C, LRP=A, origCalled=C, reason=REFER}
LINECALLSTATE_OFFERING
TAPI CallInfo dwCallerID = B dwCalledID = C dwRedirectingID = A dwRedirectionID = C dwConnectedID = "" dwReason =LINECALL REASON_UNKNOWN with extended REFER dwOrigin = LINECALL ORIGIN_INTERNAL
|
C answers the call and Refer is successful
|
LINECALLSTATE_IDLE with extended REFER reason
|
CallPartyInfoChangedEvent @ B with {calling=B, called=C, LRP=A, origCalled=C, reason=REFER}
TAPI callInfo dwCallerID = B dwCalledID = B dwRedirectingID = A dwRedirectionID = C dwConnectedID = C dwReason = DIRECT dwOrigin = LINECALL ORIGIN_INTERNAL
|
LINECALLSTATE_CONNECTED
TAPI callInfo dwCallerID = B dwCalledID = C dwRedirectingID = A dwRedirectionID = C dwConnectedID = B dwReason = LINECALL REASON_UNKNOWN with extended REFER dwOrigin = LINECALL ORIGIN_INTERNAL
|
In-Dialog Refer Where ReferToTarget Redirects the Call in Offering State
Actions
|
CallState/CallInfo @Referrer (A)
|
CallState/CallInfo @Referree (B)
|
CallState/CallInfo @Refer-to-Target (C)
|
Referrer (A), Referee (B), and Refer-to-Target (C) are present in Cisco Unified CallManager cluster and CTI is monitoring those lines.
|
A-->B has a call in connected state. The call party information at A should be {calling=A, called=B, LRP=null, origCalled=B, reason=direct}
TAPI CallInfo dwCallerID = A dwCalledID = B dwRedirectingID = null dwRedirectionID = null dwConnectedID = B dwReason = Direct dwOrigin = LINECALL ORIGIN_INTERNAL
|
A-->B has a call in connected state. The call party information at B should be {calling=A, called=B, LRP=null, origCalled=B, reason=direct}
TAPI CallInfo dwCallerID = A dwCalledID = B dwRedirectingID = null dwRedirectionID = null dwConnectedID = A dwReason = Direct dwOrigin = LINECALL ORIGIN_INTERNAL
|
|
(A) initiates REFER (B) to (C)
|
A gets LINECALLSTATE_ UNKNOWN | CLDSMT_ CALL_WAITING_STATE with extended reason = REFER
TAPI CallInfo dwCallerID = A dwCalledID = B dwRedirectingID = null dwRedirectionID = null dwConnectedID = B dwReason = Direct dwOrigin = LINECALL ORIGIN_INTERNAL
|
B gets CPIC with (calling = B, called = C, ocdpn=C, LRP = A, reason = REFER, call state = Ringback)
TAPI CallInfo dwCallerID = B dwCalledID = C dwRedirectingID = A dwRedirectionID = C dwConnectedID = null dwReason = Direct dwOrigin = LINECALL ORIGIN_INTERNAL
|
NewCallEvent should be {calling=B, called=C, LRP=A, origCalled=C, reason=REFER}
LINECALLSTATE_OFFERING
TAPI callInfo dwCallerID = B dwCalledID = C dwRedirectingID = A dwRedirectionID = C dwConnectedID = null dwReason = LINECALL REASON_UNKNOWN with extended REFER dwOrigin = LINECALL ORIGIN_INTERNAL
|
C Redirects the call to D in offering state and D answers
|
LINECALLSTATE_IDLE with extended reason = REFER
(REFER considered as successful when D answers)
|
CallPartyInfoChangedEvent @ B with {calling=B, called=D, LRP=C, origCalled=C, reason=Redirect}
Callstate = connected
TAPI callInfo dwCallerID = B dwCalledID = B dwRedirectingID = C dwRedirectionID = D dwConnectedID = D dwReason = DIRECT dwOrigin = LINECALL ORIGIN_INTERNAL
|
IDLE with reason = Redirect
TAPI LINECALLSTATE_IDLE
D will get NewCallEvent with reason = Redirect call info same as B's call info. (calling=B, called=D, ocdpn = C, LRP = C, reason = redirect)
Offering/accepted/connected
|
In-Dialog Refer Where Refer Fails / Refer to Target is Busy
Actions
|
CallState/CallInfo @Referrer (A)
|
CallState/CallInfo @Referree (B)
|
CallState/CallInfo @Refer-to-Target (C)
|
Referrer (A), Referee (B,) and Refer-to-Target (C) are present in Cisco Unified CallManager cluster and CTI is monitoring those lines.
|
A-->B has a call in connected state. The call party information at A should be {calling=A, called=B, LRP=null, origCalled=B, reason=direct}
TAPI CallInfo dwCallerID = A dwCalledID = B dwRedirectingID = null dwRedirectionID = null dwConnectedID = B dwReason = Direct dwOrigin = LINECALL ORIGIN_INTERNAL
|
A-->B has a call in connected state. The call party information at B should be {calling=A, called=B, LRP=null, origCalled=B, reason=direct}
TAPI CallInfo dwCallerID = A dwCalledID = B dwRedirectingID = null dwRedirectionID = null dwConnectedID = A dwReason = Direct dwOrigin = LINECALL ORIGIN_INTERNAL
|
|
(A) initiates REFER (B) to (C)
|
A gets LINECALLSTATE_ UNKNOWN | CLDSMT_ CALL_WAITING_STATE with extended reason = REFER
TAPI CallInfo dwCallerID = A dwCalledID = B dwRedirectingID = null dwRedirectionID = null dwConnectedID = B dwReason = Direct dwOrigin = LINECALL ORIGIN_INTERNAL
|
No change
|
|
C is busy / C does not answer
|
A gets LINECALLSTATE_ CONNECTED with extended reason = REFER
(REFER considered as failed)
|
If B goes to ringback when call is offered to C (C does not answer finally) it should also receive Connected Call State and CPIC event
TAPI CallInfo dwCallerID = A dwCalledID = B dwRedirectingID = null dwRedirectionID = null dwConnectedID = A dwReason = Direct dwOrigin = LINECALL ORIGIN_INTERNAL
|
|
Out-of-Dialog Refer
Actions
|
CallState/CallInfo @Referrer (A)
|
CallState/CallInfo @Referree (B)
|
CallState/CallInfo @Refer-to-Target (C)
|
Referrer (A), Referee (B,) and Refer-to-Target (C) are present in Cisco Unified CallManager cluster and CTI is monitoring those lines.
|
There is no preexisting call between A and B.
|
There is no preexisting call between A and B.
|
|
A initiates REFER B to (C).
|
|
B should get NewCallEvent with call info as {calling=A, called=B, LRP=null, origCalled=B, reason=REFER}
TAPI CallInfo dwCallerID = A dwCalledID = B dwRedirectingID = null dwRedirectionID = null dwConnectedID = A dwReason = LINECALL REASON_ UNKNOWN with extended REFER dwOrigin =LINECALL ORIGIN_EXTERNAL
|
|
B answers
|
|
Call state = connected (there will not be media flowing between A and B when call goes to connected state)
TAPI CallInfo (no change)
|
|
Cisco Unified CallManager redirects the call to C
|
|
CallPartyInfoChangedEvent @ B with {calling=B, called=C, LRP=A, origCalled=C, reason=REFER}
TAPI callInfo dwCallerID = B dwCalledID = B dwRedirectingID = A dwRedirectionID = C dwConnectedID = C dwReason = LINECALL REASON_ UNKNOWN with extended REFER dwOrigin = LINECALL ORIGIN_EXTERNAL
|
NewCallEvent should be {calling=B, called=C, LRP=A, origCalled=C, reason=REFER} This info is exactly same as though caller (A) performed REDIRECT operation (except the reason is different here).
TAPI callInfo dwCallerID = B dwCalledID = C dwRedirectingID = A dwRedirectionID = C dwConnectedID = B dwReason = LINECALL REASON_ UNKNOWN with extended REFER dwOrigin = LINECALL ORIGIN_INTERNAL
|
Invite with Replace for Confirmed Dialog
Preconditions
A, B, and C are inside Cisco Unified CallManager. There is a confirmed dialog between A and B.
C initiates Invite to A with replace B's dialog id
Actions
|
CallState/CallInfo @Referrer (A)
|
CallState/CallInfo @Referree (B)
|
CallState/CallInfo @Refer-to-Target (C)
|
Confirmed dialog between A and B
|
Call State = connected, Caller=A, Called=B, Connected=B, Reason =direct, gcid = GC1
|
Call State = connected Caller=A, Called=B, Connected=A, Reason =direct, gcid = GC1
|
|
C Invites A by replacing B's dialog
|
|
|
NewCall at C gcid = GC2, reason=REPLACEs, Call state = Dialing, Caller=C, Called=null, Reason = REPLACEs
|
Cisco Unified CallManager joins A and C in a call and disconnects call leg @ B
|
GCID Changed to GC2, Reason = REPLACEs
CPIC Caller = C, Called = A, ocdpn = A, LRP = B Reason = REPLACEs
Callstate = connected
TAPI callinfo caller=C, called=B, connected=C, redirecting=B, redirection=A, reason=DIRECT with extended REPLACEs, callID=GC2
|
Call State = IDLE, extended reason = REPLACEs
|
CPIC changed
Caller = C, Called = A, ocdpn = A, LRP = B, Reason=REPLACEs
CallState = connected
TAPI callinfo Caller=C, Called=A, Connected=A, Redirecting=B, Redirection=A, reason=UNKNOWN with extended REPLACEs, callID=GC2
|
Refer with Replace for All in Cluster
Preconditions
There is a confirmed dialog between A and B and A and C.
A initiates Refer to C with replace B's dialog id.
Actions
|
CallState/CallInfo @Referrer (A)
|
CallState/CallInfo @Referree (B)
|
CallState/CallInfo @Refer-to-Target (C)
|
dialog between A and B and dialog between A and C
|
Call State = onhold, GC1, Caller=A, Called=C, Connected=C, Reason =direct
CallState = connected, GC2, Caller = A, Called = B, Connected=B, Reason =direct
|
Call State = connected Caller=A, Called=B, Connected=A, Reason =direct, gcid = GC2
|
Call State = connected Caller=A, Called=C, Connected=A, Reason =direct, gcid = GC1
|
A completes Refer to C replacing A->B's dialog (B is refer to target)
|
From CTI (callState = IDLE with reason = TRANSFER.)
TAPI call state IDLE with Reason = DIRECT with extended reason TRANSFER
|
GCID changed from CTI reason = TRANSFER
CPIC Changed from CTI Caller=B, Called=C, Origcalled = C, LRP=A, Reason=TRANSFER
TAPI callinfo Caller=B, Called=B, Connected = C, Redirecting=A, Redirection=C, Reason = DIRECT with extended reason TRANSFER. CallId=GC1
|
CPIC Changed from CTI with Caller=B, Called=C, Origcalled = C, LRP=A, Reason=TRANSFER
TAPI callinfo caller=B, called=C, connected=B, redirecting=A, redirection=C, reason=direct with extended TRANSFER. callId=GC1
|
Refer with Replace for All in Cluster, Replace Dialog Belongs to Another Station
Preconditions
A is Referrer, D is Referee, and C is Refer-to-Target.
There is a confirmed dialog between A(d1) and B & C(d2) and D.
A initiates Refer to D on (d1) with Replaces (d2).
Actions
|
CallState/CallInfo @Referrer (A)
|
CallState/CallInfo @B
|
CallState/CallInfo @Refer-to-Target (C)
|
CallState/CallInfo @Referree (D)
|
Dialog between A and B and dialog between C and D
|
Call State = onhold,
Caller=A, Called=B, Connected=B, Reason =direct, gcid=GC1
|
Call State = connected
Caller=A, Called=B, Connected=A, Reason =direct, gcid = GC1
|
Call State = connected
Caller=C, Called=D, Connected=D, Reason =direct, gcid = GC2
|
Call State = connected
Caller=C, Called=D, Connected=C, Reason =direct, gcid = GC2
|
A initiates Refer to D on (d1) with Replaces (d2)
|
From CTI (callState = IDLE with reason = REFER.)
TAPI call state IDLE with reason = DIRECT with extended reason = REFER
|
CPIC Changed from CTI Caller=B, Called=C, Origcalled = D, LRP=C, Reason=REPLACEs
TAPI callinfo Caller=B, Called=B, Connected = D, Redirecting=C, Redirection=D, Reason=DIRECT with extended REPLACEs, CallId=GC1
|
From CTI (callState = IDLE with reason = REPLACEs.)
TAPI call state IDLE with reason = DIRECT with extended reason = REPLACEs
|
GCID changed from CTI to GC1
CPIC Changed from CTI with Caller=B (referee), Called=D, Origcalled = D, LRP=C, Reason=REPLACEs
TAPI callinfo caller=B, called=D, connected=B, redirecting=C, redirection=D, reason=DIRECT with extended REPLACEs, callId=GC1
|
3XX scenario
Preconditions
Application is monitoring B.
Actions
|
CallState/CallInfo @Referrer (A)
|
CallState/CallInfo @Referree (B)
|
CallState/CallInfo @Refer-to-Target (C)
|
A calls external SIP phone which has CFDUNC set to B
|
|
TSPI: LINE_APPNEWCALL
Reason = LINECALL REASON_REDIRECT
|
|
SRTP Scenario
Media Terminate by Application (open secure CTI port or RP)
•
Negotiate version
•
Sends LineOpen with extension version as 0x8007000
•
Send CciscoLineDevSpecificUserSetSRTPAlgorithmID
•
Send CCiscoLineDevSpecificUserControlRTPStream
•
Now the CTI port or RP is registered as secure port
•
Make call from secure IP phone to the CTI port or RP port
•
Answer the call from application
•
SRTP indication will be reported as LineDevSpecific event
•
SRTP key information will be stored in LINECALLINFO::devSpecifc for retrieval
Media Terminate by TSP Wave Driver (open secure CTI port)
•
Negotiate version
•
Sends LineOpen with extension version as 0x4007000
•
Send CciscoLineDevSpecificUserSetSRTPAlgorithmID
•
Send CciscoLineDevSpecificSendLineOpen
•
Now the CTI port is registered as secure port
•
Make call from secure IP phone to the CTI port
•
Answer the call from application
•
SRTP indication will be reported as LineDevSpecific event
•
SRTP key information will be stored in LINECALLINFO::devSpecifc for retrieval