Cisco Unified Communications Manager TAPI Developers Guide
Chapter 4. Device Specific Extensions
Downloads: This chapterpdf (PDF - 1.01MB) The complete bookPDF (PDF - 7.19MB) | Feedback

Cisco Device-Specific Extensions

Table Of Contents

Cisco Device-Specific Extensions

Cisco Line Device Specific Extensions

Structures

LINEDEVCAPS Device Specific Extensions

LINECALLINFO Device Specific Extensions

Description

Details

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

Set Intercom SpeedDial

Description

Class Detail

Parameters

Intercom Talk Back

Description

Class Detail

Start Call Monitoring

Description

Class Detail

Parameters

Return Values:

Start Call Recording

Description

Class Detail

Parameters

Return Values

StopCall Recording

Description

Class Detail

Parameters

Return Values

Cisco Line Device Feature Extensions

TAPI Structure Extensions

LINEDEVCAPS Device Specific Feature Extensions

LINEDEVSTATUS Device Specific Feature Extensions

CCiscoLineDevSpecificFeature

Description

Header File

Class Detail

Functions

Parameter

Subclasses

Do-Not-Disturb

Description

Class Detail

Parameters

Do-Not-Disturb Change Notification Event

Description

Message Details

Parameters

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 Communications Manager 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)

Intercom Feature Scenarios

Application Invoking Speeddial

Agent Invokes Talkback

Change the SpeedDial

Secure Conferencing Feature Scenarios

Conference with all parties as Secure

Hold/Resume in Secure Conference

Monitoring & Recording Feature Scenarios

Monitoring a Call

Automatic recording

Application-Controlled Recording

Conference Enhancement Use Cases

Non-Controller adding a party to a conference

Chaining two ad-hoc conferences using Join


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 you can use when you call 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 specifies and remains independent of the hLine parameter.

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

Cisco Unified TSP 4.0 and higher do not support this function.
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

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

Join

Use the CciscoLineDevSpecificJoin class to join two or more calls into one conference call.

Set User SRTP Algorithm IDs

Use the CciscoLineDevSpecificUserSetSRTPAlgorithmID class to allow application to set SRTP algorithm IDs. You should use this class after lineopen and before CCiscoLineDevSpecificSetRTPParamsForCall or CCiscoLineDevSpecificUserControlRTPStream

Explicit Acquire

Use the CciscoLineDevSpecificAcquire class to explicitly acquire any CTI Controllable device in the Cisco Unified Communications Manager system, which needs to be opened in Super Provider mode.

Explicit De-Acquire

Use the CciscoLineDevSpecificDeacquire class to explicitly de-acquire any CTI controllable device in the Cisco Unified Communications Manager system.

Redirect FAC CMC

Use the CCiscoLineDevSpecificRedirectFACCMC class to redirect a call to another party while including a FAC, CMC, or both.

Blind Transfer FAC CMC

Use the CCiscoLineDevSpecificBlindTransferFACCMC class to blind transfer a call to another party while including a FAC, CMC, or both.

CTI Port Third Party Monitor

Use the CCiscoLineDevSpecificCTIPortThirdPartyMonitor class to open a CTI port in third-party mode.

Send Line Open

Use the CciscoLineDevSpecificSendLineOpen class to trigger actual line open from TSP side. Use this for delayed open mechanism.

Start Call Monitoring

Use CCiscoLineDevSpecificStartCallMonitoringReq to allow applications to send a start monitoring request for the active call on a line.

Start Call Recording

Use CCiscoLineDevSpecificStartCallRecordingReq to allow applications to send a recording request for the active call on that line.

StopCall Recording

Use CCiscoLineDevSpecificStopCallRecordingReq to allow applications to stop recording a call on that line.

Set Intercom SpeedDial

Use the CciscoLineDevSpecificSetIntercomSpeedDial class to allow application to set or reset SpeedDial/Label on an intercom line.

Intercom Talk Back

Use the CCiscoLineDevSpecificTalkBack class to allow application to initiate talk back on a incoming Intercom call on a Intercom line.


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

Cisco TSP implements several line device-specific extensions and uses the DevSpecific (dwDevSpecificSize and dwDevSpecificOffset) variably sized area of the LINEDEVCAPS data structure for those extensions. The the Cisco_LineDevCaps_Ext structure in the CiscoLineDevSpecificMsg.h header file defines the DevSpecific area layout. Cisco TSP organizes the data in that structure based on the extension version in which the data was introduced:

//   LINEDEVCAPS Dev Specific extention   //
typedef struct Cisco_LineDevCaps_Ext
{
    Cisco_LineDevCaps_Ext00030000  ext30;
    Cisco_LineDevCaps_Ext00060000  ext60;
    Cisco_LineDevCaps_Ext00070000  ext70;
    Cisco_LineDevCaps_Ext00080000  ext80;
} CISCO_LINEDEVCAPS_EXT;

For a specific line device, the extension area will include a portion of this structure starting from the begining and up to the extension version that an application negotiated.

The individual extension version substructure definitions follow:

//    LINEDEVCAPS 00030000  extention    //
typedef struct Cisco_LineDevCaps_Ext00030000
{
    DWORD dwLineTypeFlags;
} CISCO_LINEDEVCAPS_EXT00030000; 
//    LINEDEVCAPS 00060000  extention    //
typedef struct Cisco_LineDevCaps_Ext00060000
{
	DWORD dwLocale;
} CISCO_LINEDEVCAPS_EXT00060000;
//    LINEDEVCAPS 00070000  extention    //
typedef struct Cisco_LineDevCaps_Ext00070000
{
    DWORD dwPartitionOffset; 
    DWORD dwPartitionSize; 
} CISCO_LINEDEVCAPS_EXT00070000;
//    LINEDEVCAPS  00080000  extention    //
typedef struct Cisco_LineDevCaps_Ext00080000
{
    DWORD                   dwLineDevCaps_DevSpecificFlags;        // 
LINEFEATURE_DEVSPECIFIC 
    DWORD                   dwLineDevCaps_DevSpecificFeatureFlags; // 
LINEFEATURE_DEVSPECIFICFEAT
    RECORD_TYPE_INFO        recordTypeInfo;
    INTERCOM_SPEEDDIAL_INFO intercomSpeedDialInfo;
} CISCO_LINEDEVCAPS_EXT00080000;

See the CiscoLineDevSpecificMsg.h header file for additional information on the DevSpecific structure layout and data.

Detail

A

typedef struct LineDevCaps_DevSpecificData
{
    DWORD m_DevSpecificFlags;
}LINEDEVCAPS_DEV_SPECIFIC_DATA;

Note Be aware that 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 PartitionOffset;
DWORD PartitionSize; //This will have the partition info of the line.
} LOCALE_INFO;

Note Be aware that 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 PartitionOffset;
DWORD PartitionSize; //This will have the partition info of the line.
} PARTITION_INFO;

Note Be aware that 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 Be aware that 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

enum
{
ENGLISH_UNITED_STATES	= 1,
FRENCH_FRANCE	= 2,
GERMAN_GERMANY	= 3,
RUSSIAN_RUSSIAN_FEDERATION	= 5,
SPANISH_SPAIN	= 6,
ITALIAN_ITALY	= 7,
DUTCH_NETHERLANDS	= 8,
NORWEGIAN_NORWAY	= 9,
PORGUGUESE_PORTUGAL	= 10,
SWEDISH_SWEDEN	= 11,
DANISH_DENMARK	= 12,
JAPANESE_JAPAN	= 13,
HUNGARAIN_HUNGARY	= 14,
POLISH_POLAND	= 15,
GREEK_GREECE	= 16,
CHINESE_TAIWAN 	= 19,
CHINESE_CHINA	= 20,
KOREAN_KOREA_REPUBLIC	= 21,
FINNISH_FINLAND	= 22,
PORTUGUESE_BRAZIL	= 23,
CHINESE_HONG_KONG	= 24,
SLOVAK_SLOVAKIA	= 25,
CZECH_CZECH_REPUBLIC	= 26,
BULGARIAN_BULGARIA	= 27,
CROATIAN_CROATIA	= 28,
SLOVENIAN_SLOVENIA	= 29,
ROMANIAN_ROMANIA	= 30,
CATALAN_SPAIN	= 32,
ENGLISH_UNITED_KINGDOM	= 33,
ARABIC_UNITED_ARAB_EMIRATES	= 35,
ARABIC_OMAN	= 36,
ARABIC_SAUDI_ARABIA	= 37,
ARABIC_KUWAIT	= 38,
HEBREW_ISRAEL	= 39,
SERBIAN_REPUBLIC_OF_SERBIA	= 40,
SERBIAN_REPUBLIC_OF_MONTENEGRO	= 41,
THAI_THAILAND	= 42,
ARABIC_ALGERIA	= 47,
ARABIC_BAHRAIN	= 48,
ARABIC_EGYPT	= 49,
ARABIC_IRAQ	= 50,
ARABIC_JORDAN	= 51,
ARABIC_LEBANON	= 52,
ARABIC_MOROCCO	= 53,
ARABIC_QATAR	= 54,
ARABIC_TUNISIA	= 55,
}

LINECALLINFO Device Specific Extensions

Description

Cisco TSP implements several line device-specific extensions and uses the DevSpecific (dwDevSpecificSize and dwDevSpecificOffset) variably sized area of the LINECALLINFO data structure for those extensions. The Cisco_LineCallInfo_Ext structure in the CiscoLineDevSpecificMsg.h header file defines DevSpecific area layout. Cisco TSP organizes the data in that structure based on the extension version in which the data was introduced:

//   LINECALLINFO Dev Specific extention   //
typedef struct Cisco_LineCallInfo_Ext
{
    Cisco_LineCallInfo_Ext00060000  ext60;
    Cisco_LineCallInfo_Ext00070000  ext70;
    Cisco_LineCallInfo_Ext00080000  ext80;
} CISCO_LINECALLINFO_EXT;

For a specific line device, the extension area will include a portion of this structure starting from the begining and up to the extension version that an application negotiated.

The individual extension version substructure definitions follow:

//    LINECALLINFO 00060000  extention    //
typedef struct Cisco_LineCallInfo_Ext00060000
{
    TSP_UNICODE_PARTY_NAMES  unicodePartyNames;
} CISCO_LINECALLINFO_EXT00060000; 
//    LINECALLINFO 00070000  extention    //
typedef struct Cisco_LineCallInfo_Ext00070000
{
    DWORD SRTPKeyInfoStructureOffset;   // offset from base of LINECALLINFO
    DWORD SRTPKeyInfoStructureSize;     // includes variable length data total size
    DWORD SRTPKeyInfoStructureElementCount;  
    DWORD SRTPKeyInfoStructureElementFixedSize;
    DWORD DSCPInformationOffset;        // offset from base of LINECALLINFO
    DWORD DSCPInformationSize;          // fixed size of the DSCPInformation structure
    DWORD DSCPInformationElementCount; 
    DWORD DSCPInformationElementFixedSize;	
    DWORD CallPartitionInfoOffset;      // offset from base of LINECALLINFO
    DWORD CallPartitionInfoSize;        // fixed size of the CallPartitionInformation 
structure
    DWORD CallPartitionInfoElementCount; 
    DWORD CallPartitionInfoElementFixedSize;
    DWORD ExtendedCallInfoOffset;       //  ===> ExtendedCallInfo { }
    DWORD ExtendedCallInfoSize;         //
    DWORD ExtendedCallInfoElementCount; //
    DWORD ExtendedCallInfoElementSize;  //
} CISCO_LINECALLINFO_EXT00070000;

//    LINECALLINFO 00080000  extention    //
//    ---------------------------------
typedef struct Cisco_LineCallInfo_Ext00080000
{
    DWORD CallSecurityStatusOffset;
    DWORD CallSecurityStatusSize; 
    DWORD CallSecurityStatusElementCount; 
    DWORD CallSecurityStatusElementFixedSize;
    DWORD CCMCallIDInfoOffset;
    DWORD CCMCallIDInfoSize;
    DWORD CCMCallIDInfoElementCount;
    DWORD CCMCallIDInfoElementFixedSize;
    DWORD CallAttrtibuteInfoOffset;
    DWORD CallAttrtibuteInfoSize;
    DWORD CallAttrtibuteInfoElementCount;
    DWORD CallAttrtibuteInfoElementFixedSize;
    DWORD TSPIntercomSideInfo;
    DWORD CallingPartyIpAddr;
} CISCO_LINECALLINFO_EXT00080000;


See the CiscoLineDevSpecificMsg.h header file for additional information on the DevSpecific structure layout and data.

Details

The TSP_Unicode_Party_names structure and SRTP info structure describe the device-specific extensions that have been made to the LINECALLINFO structure by the Cisco Unified TSP. DSCPValueForAudioCalls will contain the DSCP value that CTI sent in the StartTransmissionEvent.

ExtendedCallInfo structure will have extra call information. For this release, ExtendedCallReason field belongs to the ExtendedCallInfo structure.

CallAttributeInfo will contain the information about attributeType (Monitoring, Monitored, Recorder,securityStatus) and PartyInfo (Dn,Partition,DeviceName)

CCMCallID will contain CCM Call identifier value.

CallingPartyIPAddress will contain the IP address of the calling party if it is supported by the calling party device.

CallSecurityStatus structure will contain the overall security status of the call for two-party call as well as conference call.

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;
DWORD CallAttrtibuteInfoOffset;
DWORD CallAttrtibuteInfoSize;
DWORD CallAttrtibuteInfoElementCount;
DWORD CallAttrtibuteInfoElementSize;
DWORD CallingPartyIPAddress;
DWORD CCMCallIDInfoOffset;
DWORD CCMCallIDInfoSize;
DWORD CCMCallIDInfoElementCount;
DWORD CCMCallIDInfoElementFixedSize;
DWORD CallSecurityStatusOffset;
DWORD CallSecurityStatusSize;
DWORD CallSecurityStatusElementCount;
DWORD CallSecurityStatusElementFixedSize;

typedef struct SRTPKeyInfoStructure
{
	SRTPKeyInformation TransmissionSRTPInfo;
	SRTPKeyInformation ReceptionSRTPInfo;
} SRTPKeyInfoStructure;

typedef struct SRTPKeyInformation
{
	DWORD	IsSRTPDataAvailable;
	DWORD	SecureMediaIndicator;	// CiscoSecurityIndicator
	DWORD	MasterKeyOffset;
	DWORD	MasterKeySize;
	DWORD	MasterSaltOffset;
	DWORD	MasterSaltSize;
	DWORD	AlgorithmID;			// CiscoSRTPAlgorithmIDs
	DWORD	IsMKIPresent;
	DWORD	KeyDerivationRate;
} SRTPKeyInformation;

enum CiscoSRTPAlgorithmIDs
{
	SRTP_NO_ENCRYPTION=0, 
	SRTP_AES_128_COUNTER=1 
};

enum CiscoSecurityIndicator
{
    SRTP_MEDIA_ENCRYPT_KEYS_AVAILABLE,
    SRTP_MEDIA_ENCRYPT_USER_NOT_AUTH,
    SRTP_MEDIA_ENCRYPT_KEYS_UNAVAILABLE,
    SRTP_MEDIA_NOT_ENCRYPTED
};

If isSRTPInfoavailable is set to false, applications should ignore the rest of the information from SRTPKeyInformation.

If MasterKeySize or MasterSlatSize is set to 0, applications should ignore the corresponding MasterKeyOffset or MasterSaltOffset.

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;
} PartitionInformation;


Struct ExtendedCallInfo
{
DWORD ExtendedCallReason ;
DWORD CallerIDURLOffset;		// CallPartySipURLInfo
DWORD CallerIDURISize;
DWORD CalledIDURLOffset;		// CallPartySipURLInfo
DWORD CalledIDURISize;
DWORD ConnectedIDURIOffset;		// CallPartySipURLInfo
DWORD ConnectedIDURISize;
DWORD RedirectionIDURIOffset;		// CallPartySipURLInfo
DWORD RedirectionIDURISize;
DWORD RedirectingIDURIOffset;		// CallPartySipURLInfo
DWORD RedirectingIDURISize;
}

Struct CallPartySipURLInfo 
{
DWORD	dwUserOffset;  //sip user string
DWORD	dwUserSize;
DWORD	dwHostOffset; //host name string
DWORD	dwHostSize;
DWORD	dwPort;		// integer port number
DWORD	dwTransportType; 	// SIP_TRANS_TYPE
DWORD	dwURLType;		// SIP_URL_TYPE
}

enum {
        CTI_SIP_TRANSPORT_TCP=1,
        CTI_SIP_TRANSPORT_UDP,
        CTI_SIP_TRANSPORT_TLS
} SIP_TRANS_TYPE;

enum {
    CTI_NO_URL = 0,
    CTI_SIP_URL,
    CTI_TEL_URL 
} SIP_URL_TYPE;

typedef struct CallAttributeInfo
{
	DWORD CallAttributeType,
	DWORD PartyDNOffset,
	DWORD PartyDNSize,
	DWORD PartyPartitionOffset,
	DWORD PartyPartitionSize,
	DWORD DeviceNameOffset,
	DWORD DeviceNameSize,
}
typedef struct CCMCallHandleInformation
{
	DWORD CCMCallID;
}

enum CallAttributeType
{
 CallAttribute_Regular                    = 0,
 CallAttribute_SilentMonitorCall,  
 CallAttribute_SilentMonitorCall_Target,
 CallAttribute_RecordedCall
} ;

typedef struct CallSecurityStausInfo
{
	DWORD CallSecurityStaus
} CallSecurityStausInfo

enum OverallCallSecurityStatus
{  
   OverallCallSecurityStatus_Unknown = 0,
   OverallCallSecurityStatus_NotAuthenticated ,
   OverallCallSecurityStatus_Authenticated,
   OverallCallSecurityStatus_Encrypted
};


Parameters

Parameter
Value

TapiCallerPartyUnicodeNameOffset
TapiCallerPartyUnicodeNameSize

The size, in bytes, of the variably sized field that contains the Unicode Caller party identifier name informatio, and the offset, in bytes, from the beginning of the LINECALLINFO data structure

TapiCallerPartyLocale

The Unicode Caller party identifier name Locale information

TapiCalledPartyUnicodeNameOffset
TapiCalledPartyUnicodeNameSize

The size, in bytes, of the variably sized field that contains the Unicode Called party identifier name information and the offset, in bytes, from the beginning of the LINECALLINFO data structure

TapiCalledPartyLocale

The Unicode Called party identifier name locale information

TapiConnectedPartyUnicodeNameOffset
TapiConnectedPartyUnicodeNameSize

The size, in bytes, of the variably sized field that contains the Unicode Connected party identifier name information and the offset, in bytes, from the beginning of the LINECALLINFO data structure

TapiConnectedPartyLocale

The Unicode Connected party identifier name locale information

TapiRedirectionPartyUnicodeNameOffset
TapiRedirectionPartyUnicodeNameSize

The size, in bytes, of the variably sized field that contains the Unicode Redirection party identifier name information and the offset, in bytes, from the beginning of the LINECALLINFO data structure

TapiRedirectionPartyLocale

The Unicode Redirection party identifier name locale information

TapiRedirectingPartyUnicodeNameOffset
TapiRedirectingPartyUnicodeNameSize

The size, in bytes, of the variably sized field that contains the Unicode Redirecting party identifier name information and the offset, in bytes, from the beginning of the LINECALLINFO data structure

TapiRedirectingPartyLocale

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

The offset and size of SRTP MasterKey information

MasterSaltOffset
MasterSaltSize

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

The DSCP value for Audio Calls

CallerIDPartitionOffset
CallerIDPartitionSize

The size, in bytes, of the variably sized field that contains 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 that contains 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 that contains 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 that contains 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 that contains 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 the application as an extension to the standard reason codes that TAPI supports. This provides the feature-specific information per call. Because SIP phones are supported through CTI, new features can be introduced for SIP phones during releases. Be aware that this field will not be backward compatible and can change as changes or additions are made in the SIP phone 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 that contains 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 that contains 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 that contains 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 that contains 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 that contains the Redirecting party identifier URL information and the offset, in bytes, from the beginning of LINECALLINFO data structure

CallAttributeType

Identifies whether the following info(DN.Partition.DeviceName) is for a regular call, a monitoring call, a monitored call , or a recording call

PartyDNOffset,

PartyDNSize,

The size, in bytes, of the variably sized field that contains the Monitoring/Monitored/Recorder party DN information and the offset, in bytes, from the beginning of the LINECALLINFO data structure

PartyPartitionOffset

PartyPartitionSize

The size, in bytes, of the variably sized field that contains the Monitoring/Monitored/Recorder party partition information and the offset, in bytes, from the beginning of the LINECALLINFO data structure

DeviceNameOffset

DevcieNameSize

The size, in bytes, of the variably sized field that contains the Monitoring/Monitored/Recorder party device name, and the offset, in bytes, from the beginning of the LINECALLINFO data structure

OverallCallSecurityStatus

Tthe security status of the call for two-party calls and conference calls

CCMCallID

Tthe CCM call ID for each call leg



Note To indicate that partition information existsw in the LINECALLINFO structure, the system fires a LINECALLINFOSTATE_DEVSPECIFIC event.


Also, whenever a change occurs in the partition information, the system fires a LINEDEVSPECIFIC event that indicates which exact field in the devSpecific portion of the LINECALLINFO changed as shown below. This event fires only if the application has negotiated 7.0 extension version or higher.

LINEDEVSPECIFIC
{
  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 | SLDST_CALL_ATTRIBUTE_INFO|SLDST_CCM_CALLID|  
    SLDST_CALL_SECURITY_STATUS
  dwParam3 = ...
  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
SLDST_CALL_ATTRIBUTE_INFO = 0x00000010
SLDST_CCM_CALLID = 0x00000020
SLDST_CALL_SECURITY_STATUS=0x00000040

LINEDEVSTATUS Device Specific Extensions

Description

Cisco TSP implements several line device-specific extensions and uses the DevSpecific (dwDevSpecificSize and dwDevSpecificOffset) variably sized area of the LINEDEVSTATUS data structure for those extensions. Cisco TSP defines the DevSpecific area layout in the Cisco_LineDevStatus_Ext structure in the CiscoLineDevSpecificMsg.h header file. The data in that structure is organized based on the extension version in which the data was introduced:

//   LINEDEVSTATUS Dev Specific extention   //
typedef struct Cisco_LineDevStatus_Ext
{
    Cisco_LineDevStatus_Ext00060000  ext60;
    Cisco_LineDevStatus_Ext00070000  ext70;
    Cisco_LineDevStatus_Ext00080000  ext80;
} CISCO_LINEDEVSTATUS_EXT;

For a specific line device, the extension area will include a portion of this structure, starting from the begining and up to the extension version that an application negotiated.

Detail

The individual extension version substructure definitions follow:

//    LINEDEVSTATUS 00060000  extention    //
typedef struct Cisco_LineDevStatus_Ext00060000
{
    DWORD dwSupportedEncoding;
} CISCO_LINEDEVSTATUS_EXT00060000; 
//    LINEDEVSTATUS 00070000  extention    //
typedef struct Cisco_LineDevStatus_Ext00070000
{
    char lpszAlternateScript[MAX_ALTERNATE_SCRIPT_SIZE];
    // An empty string means there  is no alternate script configured
    // or the phone does not support alternate scripts
} CISCO_LINEDEVSTATUS_EXT00070000;
//    LINEDEVSTATUS 00080000  extention    //
typedef struct CiscoLineDevStatus_DoNotDisturb
{
    DWORD m_LineDevStatus_DoNotDisturbOption;
    DWORD m_LineDevStatus_DoNotDisturbStatus;
} CISCOLINEDEVSTATUS_DONOTDISTURB;

You can find additional information on the DevSpecific structure layout and data in the CiscoLineDevSpecificMsg.h header file.

The CiscoLineDevStatus_DoNotDisturb structure belongs to the LINEDEVSTATUS_DEV_SPECIFIC_DATA structure and is used to reflect the current state of the Do Not Disturb feature.

Parameters

DWORD dwSupportEncoding

This parameter indicates the Support Encoding for the Unicode Party names being sent in device-specific extension of the LINECALLINFO structure.

The typical values could be

enum {
UnknownEncoding = 0,	// Unknown encoding
NotApplicableEncoding = 1,	// Encoding not applicable to this device
AsciiEncoding = 2,          	// ASCII encoding
Ucs2UnicodeEncoding = 3     // UCS-2 Unicode encoding
}


Note Be aware that the dwSupportedEncoding extension is only available if extension version 0x00060000 or higher is negotiated.


LPCSTR lpszAlternateScript

This parameter specifies the alternate script that the defice supports. 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.

m_LineDevStatus_DoNotDisturbOption

This field contains DND option that is configured for the device and can be one of the following enum values:

enum CiscoDoNotDisturbOption {
    DoNotDisturbOption_NONE      = 0, 
    DoNotDisturbOption_RINGEROFF = 1,
    DoNotDisturbOption_REJECT    = 2 
};

m_LineDevStatus_ DoNotDisturbStatus field contains current DND status on the device 
and can be one of the following enum values:

enum CiscoDoNotDisturbStatus {
    DoNotDisturbStatus_UNKNOWN  = 0, 
    DoNotDisturbStatus_ENABLED  = 1,
    DoNotDisturbStatus_DISABLED = 2
};

Note Be aware that this extension is only available if extension version 8.0 (0x00080000) or higher is negotiated.


CCiscoLineDevSpecific

CCiscoLineDevSpecific
|
+-- CCiscoLineDevSpecificMsgWaiting
|
+-- CCiscoLineDevSpecificMsgWaitingDirn
|
+-- CCiscoLineDevSpecificUserControlRTPStream
|
+--CciscoLineDevSpecificSetStatusMsgs
|
+--CCiscoLineDevSpecificRedirectResetOrigCalled
|
+--CCiscoLineDevSpecificPortRegistrationPerCall
|
+--CciscoLineDevSpecificSetRTPParamsForCall
|
+--CCiscoLineDevSpecificRedirectSetOrigCalled
|
+--CCiscoLineDevSpecificJoin
|
+--CciscoLineDevSpecificUserSetSRTPAlgorithmID
|
+--CCiscoLineDevSpecificAcquire
|
+--CciscoLineDevSpecificDeacquire
|
+-- CciscoLineDevSpecificSendLineOpen
|
+-- CciscoLineSetIntercomSpeeddial
|
+-- CciscoLineIntercomTalkback
|
+-- CCiscoLineDevSpecificStartCallMonitoring
|
+-- CCiscoLineDevSpecificStartCallRecording
|
+-- CCiscoLineDevSpecificStopCallRecording

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 
  {
  public:
CCicsoLineDevSpecific(DWORD msgType);
virtual ~CCiscoLineDevSpecific();
    DWORD GetMsgType(void) const {return m_MsgType;}
    void* lpParams() {return &m_MsgType;}
    virtual DWORD dwSize() = 0;
  private:
    DWORD m_MsgType;
  };

Functions

lpParms()

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

dwSize()

Function will give the size of the parameter block area.

Parameter

m_MsgType

Specifies the type of message.

Subclasses

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

Enumeration

The CiscoLineDevSpecificType enumeration provides valid message identifiers.

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

Message Waiting

CCiscoLineDevSpecific
  |
  +-- 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
{
 public:
  CCiscoLineDevSpecificMsgWaiting() : CCiscoLineDevSpecific(SLDST_MSG_WAITING){}
  virtual ~CCiscoLineDevSpecificMsgWaiting() {}
  virtual DWORD dwSize(void) const {return sizeof(*this)-4;}
  DWORD m_BlinkRate; 
};

Parameters

DWORD m_MsgType

Equals SLDST_MSG_WAITING.

DWORD m_BlinkRate

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


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


Message Waiting Dirn

CCiscoLineDevSpecific
  |
  +-- CCiscoLineDevSpecificMsgWaitingDirn

Description

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


Note This extension does not require an extension version to be negotiated.


Class Detail

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

Parameters

DWORD m_MsgType

Equals SLDST_MSG_WAITING_DIRN.

DWORD m_BlinkRate

As in the CCiscoLineDevSpecificMsgWaiting message.


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


char m_Dirn[25]

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

Audio Stream Control

CCiscoLineDevSpecific
  |
  +-- CCiscoLineDevSpecificUserControlRTPStream

Description

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

Procedure


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

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

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


Class Detail

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

Parameters

DWORD m_MsgType

Equals SLDST_USER_CRTL_OF_RTP_STREAM

DWORD m_ReceiveIP:

The RTP audio reception IP address in network byte order

DWORD m_ReceivePort:

The RTP audio reception port in network byte order

DWORD m_NumAffectedDevices:

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

DWORD m_AffectedDeviceID[10]:

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

DWORD m_mediaCapCount

The number of codecs that are supported for this line.

MEDIA_CAPS m_MediaCaps -

A data structure with the following format:

typedef struct {

DWORD MediaPayload;

DWORD MaxFramesPerPacket;

DWORD G723BitRate;

} MEDIA_CAPS[MAX_MEDIA_CAPS_PER_DEVICE];

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

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

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

Read MaxFramesPerPacket as MaxPacketSize. It specifies a 16-bit integer that 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.

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

Set Status Messages

CCiscoLineDevSpecific
|
+-- CCiscoLineDevSpecificSetStatusMsgs

Description

The CCiscoLineDevSpecificSetStatusMsgs class is used to turn on or off the status messages for the line specified by the hLine parameter. The Cisco 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
{
public:
CCiscoLineDevSpecificSetStatusMsgs() : 
CCiscoLineDevSpecific(SLDST_SET_STATUS_MESSAGES) {}
virtual ~CCiscoLineDevSpecificSetStatusMsgs() {}
DWORD m_DevSpecificStatusMsgsFlag;
virtual DWORD dwSize(void) const {return sizeof(*this)-4;}
};

Parameters

DWORD m_MsgType

Equals SLDST_SET_STATUS_MESSAGES.

DWORD m_DevSpecificStatusMsgsFlag

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
#define CALL_DEVSPECIFIC_RTP_EVENTS 	0x00000003
#define DEVSPECIFIC_IDLE_TRANSFER_REASON		0x00000004
#define DEVSPECIFIC_SPEEDDIAL_CHANGED			0x00000008

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.


CCiscoLineDevSpecific
|
+-- CCiscoLineDevSpecificSwapHoldSetupTransfer

Description

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


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


Class Details

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

Parameters

DWORD m_MsgType

Equals SLDST_SWAP_HOLD_SETUP_TRANSFER.

DWORD heldCallID

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

HCALL hCall (in lineDevSpecific parameter list)

Equals the handle of the connected call.

Redirect Reset Original Called ID

CCiscoLineDevSpecific
|
+-- CCiscoLineDevSpecificRedirectResetOrigCalled

Description

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


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


Class Details

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

Parameters

DWORD m_MsgType

Equals SLDST_REDIRECT_RESET_ORIG_CALLED.

DWORD m_DestDirn

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

HCALL hCall (In lineDevSpecific parameter list)

Equals the handle of the connected call.

Port Registration per Call

CCiscoLineDevSpecific
|
+-- CCiscoLineDevSpecificPortRegistrationPerCall

Description

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

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

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

Procedure


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

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

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



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


Class Details

class CCiscoLineDevSpecificPortRegistrationPerCall: public CCiscoLineDevSpecific
{
public:
	CCiscoLineDevSpecificPortRegistrationPerCall () : 
	CCiscoLineDevSpecific(SLDST_USER_RECEIVE_RTP_INFO), 
	m_RecieveIP(-1), m_RecievePort(-1), m_NumAffectedDevices(0)
	{
	memset((char*)m_AffectedDeviceID, 0, sizeof(m_AffectedDeviceID));
	}

	virtual ~ CCiscoLineDevSpecificPortRegistrationPerCall () {}
	DWORD m_NumAffectedDevices;
	DWORD m_AffectedDeviceID[10];
	DWORD m_MediaCapCount;
	MEDIA_CAPS	m_MediaCaps;
	virtual DWORD dwSize(void) const {return sizeof(*this)-4;}  
// 	subtract out the virtual function table pointer
	};

Parameters

DWORD m_MsgType

Equals SLDST_USER_RECEIVE_RTP_INFO

DWORD m_NumAffectedDevices:

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

DWORD m_AffectedDeviceID[10]:

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

DWORD m_mediaCapCount

The number of codecs supported for this line.

MEDIA_CAPS m_MediaCaps -

A data structure with the following format:


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

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

MediaPayload is an enumerated integer that contains one of the following values.

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

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

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


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

Setting RTP Parameters for Call

CCiscoLineDevSpecific
|
+-- CCiscoLineDevSpecificSetRTPParamsForCall

Description

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


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


Class Details

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

Parameters

DWORD m_MsgType

Equals SLDST_USER_SET_RTP_INFO

DWORD m_ReceiveIP

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

DWORD m_ReceivePort

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

Redirect Set Original Called ID

CCiscoLineDevSpecific
|
+-- CCiscoLineDevSpecificRedirectSetOrigCalled

Description

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


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


Class Details

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

Parameters

DWORD m_MsgType

Equals SLDST_REDIRECT_SET_ORIG_CALLED

char m_DestDirn[25]

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

char m_SetOriginalCalledTo[25]

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

HCALL hCall (in lineDevSpecific parameter list)

Equals the handle of the connected call.

Join

CCiscoLineDevSpecific
|
+-- CCiscoLineDevSpecificJoin

Description

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

The Cisco Unified Communications Manager 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 Communications Manager attempts to join as many calls as possible.


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


Class Details

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

Parameters

DWORD m_MsgType

equals SLDST_JOIN

DWORD m_CallIDsToJoinCount

The number of callIDs contained in the m_CallIDsToJoin parameter.

CALLIDS_TO_JOIN m_CallIDsToJoin

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

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

where MAX_CALLIDS_TO_JOIN is defined as:


const DWORD MAX_CALLIDS_TO_JOIN = 14;

HCALL hCall (in LineDevSpecific parameter list)

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

Set User SRTP Algorithm IDs

CCiscoLineDevSpecific
|
+-- 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
{
  public:
    CciscoLineDevSpecificUserSetSRTPAlgorithmID () : 
    CCiscoLineDevSpecific(SLDST_USER_SET_SRTP_ALGORITHM_ID), 
    m_SRTPAlgorithmCount(0),
	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
{
	SRTP_NO_ENCRYPTION=0, 
	SRTP_AES_128_COUNTER=1 
};

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

CCiscoLineDevSpecific
|
+--CCiscoLineDevSpecificAcquire

Description

The CCiscoLineDevSpecificAcquire class is used to explicitly acquire any CTI controllable device.

If a Superprovider application needs to open any CTI Controllable device on the Cisco Unified Communications Manager system. The application 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
{
    public:
        CCiscoLineDevSpecificAcquire () : CCiscoLineDevSpecific(SLDST_ACQUIRE) {}
        virtual ~ CCiscoLineDevSpecificAcquire () {}
        char m_DeviceName[16];
        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

CCiscoLineDevSpecific
|
+--CCiscoLineDevSpecificDeacquire

Description

The CCiscoLineDevSpecificDeacquire class is used to explicitly de-acquire the explicitly acquired device.

If a Superprovider application has explicitly acquired any CTI Controllable device on the Cisco Unified Communications Manager system, then the application 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
{
    public:
CCiscoLineDevSpecificDeacquire () : CCiscoLineDevSpecific(SLDST_ACQUIRE) {}
        virtual ~ CCiscoLineDevSpecificDeacquire () {}
        char m_DeviceName[16];
        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
{
public:
    	CCiscoLineDevSpecificRedirectFACCMC () : CCiscoLineDevSpecific(SLDST_REDIRECT_FAC_CMC) 
{}
    	virtual ~ CCiscoLineDevSpecificRedirectFACCMC () {}
	char m_DestDirn[49];
	char m_FAC[17];
	char m_CMC[17];
    	// subtract virtual function table pointer
    	virtual DWORD dwSize(void) const {return (sizeof (*this) - 4) ;
}

Parameters

DWORD m_MsgType

Equals SLDST_REDIRECT_FAC_CMC

char m_DestDirn[49]

Indicates the destination of the redirect.

char m_FAC[17]

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

char m_CMC[17]

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

HCALL hCall (in lineDevSpecific parameter list)

Equals the handle of the call to be redirected.

Blind Transfer FAC CMC

CCiscoLineDevSpecific
|
+--CCiscoLineDevSpecificBlindTransferFACCMC

Description

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


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


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

Class Detail

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

Parameters

DWORD m_MsgType

Equals SLDST_BLIND_TRANSFER_FAC_CMC

char m_DestDirn[49]

Indicates the destination of the blind transfer.

char m_FAC[17]

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

char m_CMC[17]

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

HCALL hCall (in lineDevSpecific parameter list)

Equals the handle of the call to be blind transferred.

CTI Port Third Party Monitor

CCiscoLineDevSpecific
|
+-- CCiscoLineDevSpecificCTIPortThirdPartyMonitor

Description

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

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

Procedure


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

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

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



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


Class Detail

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

Parameters

DWORD m_MsgType

equals SLDST_CTI_PORT_THIRD_PARTY_MONITOR

Send Line Open

CCiscoLineDevSpecific
|
+-- 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
  {
  public:
    CciscoLineDevSpecificSendLineOpen () : 
	CCiscoLineDevSpecific(SLDST_SEND_LINE_OPEN) {} 

    virtual ~ CciscoLineDevSpecificSendLineOpen () {}
    virtual DWORD dwSize(void) const {return sizeof(*this)-4;} // subtract out the virtual 
function table pointer
};

Set Intercom SpeedDial

CCiscoLineDevSpecific
|
+-- CciscoLineSetIntercomSpeeddial

Description

Use the CciscoLineSetIntercomSpeeddial class to allow application to set or reset SpeedDial/Label on an intercom line.


Note Be aware that this extension is only available if extension version 0x00080000 or higher is negotiated


Procedure


Step 1 Call lineNegotiateExtVersion for the deviceID of the line to be opened (0x00080000 or higher).

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

Step 3 Wait for line in service.

Step 4 Call CciscoLineSetIntercomSpeeddial to set or reset speed dial setting on the intercom line.


Class Detail

class CciscoLineSetIntercomSpeeddial: public CCiscoLineDevSpecific
  {
  public:
    CciscoLineSetIntercomSpeeddial () : 
	CCiscoLineDevSpecific(SLDST_LINE_SET_INTERCOM_SPEEDDIAL) {} 

    virtual ~ CciscoLineSetIntercomSpeeddial () {}
    DWORD SetOption;        //0=clear app value, 1= set App Value
    char Intercom_DN[MAX_DIRN];
    char Intercom_Ascii_Label[MAX_DIRN];
    wchar_t Intercom_Unicode_Label[MAX_DIRN];
    virtual DWORD dwSize(void) const {return sizeof(*this)-4;} // subtract out the virtual 
function table pointer
};

Parameters

DWORD m_MsgType

Equals SLDST_USER_SET_INTERCOM_SPEEDDIAL

DWORD SetOption

Use this parameter to indicate whether the application wants to set a new intercom speed dial value or clear the previous value. 0 = clear, 1 = set.

Char Intercom_DN [MAX_DIRN]

A DN array that indicates the intercom target

Char Intercom_Ascii_Label[MAX_DIRN]

Indicates the ASCII value of the intercom line label

Wchar_tIntercom_Unicode_Label[MAX_DIRN]

Indicates the Unicode value of the intercom line label

MAX_DIRN is defined as 25.

Intercom Talk Back

CCiscoLineDevSpecific
|
+-- CCiscoLineDevSpecificTalkBack

Description

Use the CCiscoLineDevSpecificTalkBack class to allow application to initiate talk back on a incoming Intercom call on a Intercom line.


Note Be aware that this extension is only available if extension version 0x00080000 or higher is negotiated.


Class Detail

class CCiscoLineDevSpecificTalkBack: public CCiscoLineDevSpecific
{
  public:
    CCiscoLineDevSpecificTalkBack () : 
    CCiscoLineDevSpecific(SLDST_INTERCOM_TALKBACK) {} 

    virtual ~ CCiscoLineDevSpecificTalkBack () {}
    virtual DWORD dwSize(void) const {return sizeof(*this)-4;} // subtract out the virtual 
function table pointer
};

Start Call Monitoring

CCiscoLineDevSpecific
|
+-- CCiscoLineDevSpecificStartCallMonitoring

Description

Use CCiscoLineDevSpecificStartCallMonitoring to allow application to send a start monitoring request for the active call on a line.


Note Be aware that this extension is only available if extension version 0x00080000 or higher is negotiated.


Class Detail

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

} ;

Parameters

DWORD m_MsgType

Equals SLDST_START_MONITORING

DWORD m_ PermanentLineID

The permanent lineID of the line whose active call has to be monitored.

DWORD MonitorMode

This can have the following enum value:

	enum
             {
        	MonitorMode_None  = 0,
        	MonitorMode_Silent  = 1,
         	MonitorMode_Whisper = 2,    //  Not used 
             MonitorMode_Active  = 3    //  Not used 
    	} MonitorMode;

This release only supports Silent Monitoring mode, in which the supervisor cannot talk to the agent.

DWORD PlayToneDirection

This parameter specifies whether a tone should be played at the agent or customer phone when monitoring starts. It can have following enum values:

enum 
    {
     PlayToneDirection_LocalOnly = 0,    
     PlayToneDirection_RemoteOnly,
     PlayToneDirection_BothLocalAndRemote,
     PlayToneDirection_NoLocalOrRemote
    } PlayToneDirection

Return Values:

-	LINERR_OPERATIONFAILED
-	LINEERR_OPERATIONUNAVAIL
-	LINEERR_RESOURCEUNAVAIL
-	LINEERR_BIB_RESOURCE_UNAVAIL
-	LINERR_PENDING_REQUEST 
-	LINEERR_OPERATION_ALREADY_INPROGRESS
-	LINEERR_ALREADY_IN_REQUESTED_STATE
-	LINEERR_PRIMARY_CALL_INVALID
-	LINEERR_PRIMARY_CALL_STATE_INVALID

Start Call Recording

CCiscoLineDevSpecific
|
+-- CCiscoLineDevSpecificStartCallRecording

Description

Use CCiscoLineDevSpecificStartCallRecording to allow applications to send a recording request for the active call on that line.


Note Be aware that this extension is only available if extension version 0x00080000 or higher is negotiated


Class Detail

class CCiscoLineDevSpecificStartCallRecording: public CCiscoLineDevSpecific
{
public:
CCiscoLineDevSpecificStartCallRecording () : 
CCiscoLineDevSpecific(SLDST_START_CALL_RECORDING) {}
	virtual ~    CCiscoLineDevSpecificStartCallRecording () {}

	DWORD m_ToneDirection;    
	// subtract out the virtual function table pointer
	virtual DWORD dwSize(void) const {return sizeof(*this)-4;} 
} ;

Parameters

DWORD m_MsgType

Equals SLDST_START_RECORDING

DWORD PlayToneDirection

This parameter specifies whether a tone should play at the agent or customer phone when recording starts. It can have following enum values:

enum 
    {
     PlayToneDirection_NoLocalOrRemote = 0, 
     PlayToneDirection_LocalOnly,    
     PlayToneDirection_RemoteOnly,
     PlayToneDirection_BothLocalAndRemote
    } PlayToneDirection

Return Values

-	LINERR_OPERATIONFAILED
-	LINEERR_OPERATIONUNAVAIL
-	LINEERR_INVALCALLHANDLE
-	LINEERR_BIB_RESOURCE_UNAVAIL
-	LINERR_PENDING_REQUEST 
-	LINERR_OPERATION_ALREADY_INPROGRESS

StopCall Recording

CCiscoLineDevSpecific
|
+-- CCiscoLineDevSpecificStopCallRecording

Description

Use CCiscoLineDevSpecificStopCallRecording to allow application to stop recording a call on that line.


Note Be aware that this extension is only available if extension version 0x00080000 or higher is negotiated


Class Detail

class CCiscoLineDevSpecificStopCallRecording: public CCiscoLineDevSpecific
{
public:
CCiscoLineDevSpecificStopCallRecording () : 
CCiscoLineDevSpecific(SLDST_STOP_CALL_RECORDING) {}
	virtual ~    CCiscoLineDevSpecificStopCallRecording () {}

	// subtract out the virtual function table pointer
	virtual DWORD dwSize(void) const {return sizeof(*this)-4;} 
} ;

Parameters

DWORD m_MsgType

Equals SLDST_STOP_RECORDING

Return Values

-	LINERR_OPERATIONFAILED
-	LINEERR_OPERATIONUNAVAIL
-	LINEERR_INVALCALLHANDLE
-	LINERR_PENDING_REQUEST 

Cisco Line Device Feature Extensions

CCiscoLineDevSpecificFeature is the parent class. Currently, it has only one subclass: CCiscoLineDevSpecificFeature_DoNotDisturb, which allows applications to enable and disable the Do-Not-Disturb feature on a device.

TAPI Structure Extensions

This section describes line device feature-specific extensions to the TAPI structures that Cisco TSP supports.

LINEDEVCAPS Device Specific Feature Extensions

The CiscoLineDevCaps_DevSpecificFlags structure contains line device capability extension flags that describe the Cisco line device specific extensions for device capabilities. The m_LineDevCaps_DevSpecificFeatureFlags field in that structure reflects extended device feature capabilities. Currently, Cisco TSP uses only the LINEDEVCAPS_DEVSPECIFICFEATURE_DONOTDISTURB (0x00000001) bit in that field.

//   Line device capability extention flags
typedef struct CiscoLineDevCaps_DevSpecificFlags
{
    DWORD m_LineDevCaps_DevSpecificFlags;           // LINEFEATURE_DEVSPECIFIC 
    DWORD m_LineDevCaps_DevSpecificFeatureFlags;    // LINEFEATURE_DEVSPECIFICFEAT
} CISCOLINEDEVCAPS_DEVSPECIFICFLAGS;

// Bit assignments
#define LINEDEVCAPS_DEVSPECIFICFEATURE_DONOTDISTURB   0x00000001  // Ext 00080000

LINEDEVSTATUS Device Specific Feature Extensions

The LINEDEVSTATUS_DEV_SPECIFIC_DATA structure contains data for all device-specific extensions that have been added to the TAPI LINEDEVSTATUS structure by the Cisco TSP. The CiscoLineDevStatus_DoNotDisturb structure belongs to the LINEDEVSTATUS_DEV_SPECIFIC_DATA structure and reflects the current state of the Do-Not-Disturb feature.


Note Be aware that this extension is only available if extension version 8.0 (0x00080000) or higher is negotiated.


//    LINEDEVSTATUS 00080000  extention    //
//    ---------------------------------
typedef struct CiscoLineDevStatus_DoNotDisturb
{
    DWORD m_LineDevStatus_DoNotDisturbOption;
    DWORD m_LineDevStatus_DoNotDisturbStatus;
} CISCOLINEDEVSTATUS_DONOTDISTURB;

The m_LineDevStatus_DoNotDisturbOption field contains DND option that is configured for the device and can be one of the following enum values:

enum CiscoDoNotDisturbOption {
    DoNotDisturbOption_NONE      = 0, 
    DoNotDisturbOption_RINGEROFF = 1,
    DoNotDisturbOption_REJECT    = 2 
};

The m_LineDevStatus_ DoNotDisturbStatus field contains current DND status on the device and can be one of the following enum values:

enum CiscoDoNotDisturbStatus {
    DoNotDisturbStatus_UNKNOWN  = 0, 
    DoNotDisturbStatus_ENABLED  = 1,
    DoNotDisturbStatus_DISABLED = 2
};

CCiscoLineDevSpecificFeature

CCiscoLineDevSpecificFeature

Description

This section provides information on how to invoke Cisco-specific TAPI extensions with the CCiscoLineDevSpecificFeature class, which is the parent class to all the following classes. This virtual class is provided here for informational purposes.

Header File

The file CiscoLineDevSpecific.h contains the corresponding constant, structure and class definitions for the Cisco lineDevSpecificFeature extension classes.

Class Detail

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

Functions

lpParms()

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

dwSize()

function returns size of the parameter block area

Parameter

m_MsgType

Specifies the type of a message. The parameter value uniquely identifies the feature to invoke on the device. The PHONEBUTTONFUNCTION_ TAPI_Constants definition lists the valid feature identifiers. Currently the only recognized value is PHONEBUTTONFUNCTION_DONOTDISTURB (0x0000001A).

Each subclass of CCiscoLineDevSpecificFeature has a unique value assigned to the m_MsgType parameter.

Subclasses

Each subclass of CCiscoLineDevSpecificFeature carries a unique value that is assigned to the m_MsgType parameter. If you are using C instead of C++, this is the first parameter in the structure.

Do-Not-Disturb

CCiscoLineDevSpecificFeature
|
+-- CCiscoLineDevSpecificFeature_DoNotDisturb

Description

Use the CCiscoLineDevSpecificFeature_DoNotDisturb class in conjunction with the request to enable or disable the DND feature on a device.

The Do-Not-Disturb feature gives phone users the ability to go into a Do Not Disturb (DND) state on the phone when they are away from their phones or simply do not want to answer the incoming calls. A phone softkey, DND, allows users to enable or disable this feature

Class Detail

class CCiscoLineDevSpecificFeature_DoNotDisturb : public CCiscoLineDevSpecificFeature
{
public:
  CCiscoLineDevSpecificFeature_DoNotDisturb()
: CCiscoLineDevSpecificFeature(PHONEBUTTONFUNCTION_DONOTDISTURB),
	 m_Operation((CiscoDoNotDisturbOperation)0) {}
virtual ~CCiscoLineDevSpecificFeature_DoNotDisturb() {}
virtual DWORD dwSize(void) const {return sizeof(*this)-4;}

CiscoDoNotDisturbOperation  m_Operation;
};

Parameters

DWORD m_MsgType

Equals PHONEBUTTONFUNCTION_DONOTDISTURB.

CiscoDoNotDisturbOperation m_Operation

Specifies a requested operation and can be one of the following enum values:

enum CiscoDoNotDisturbOperation {
    DoNotDisturbOperation_ENABLE    = 1,
    DoNotDisturbOperation_DISABLE   = 2
};

Do-Not-Disturb Change Notification Event

Cisco TSP notifies applications via the LINE_DEVSPECIFICFEATURE message about changes in the DND configuration or status. To receive change notifications, an application needs to enable the DEVSPECIFIC_DONOTDISTURB_CHANGED message flag with a lineDevSpecific SLDST_SET_STATUS_MESSAGES request.

Description

The LINE_DEVSPECIFICFEATURE message notifies the application about device-specific events that occur on a line device. In the case of a Do-Not-Disturb Change Notification, the message includes information about the type of change that occurred on a device and the resulting feature status or configured option.

Message Details

LINE_DEVSPECIFICFEATURE
dwDevice = (DWORD) hLine;
dwCallbackInstance = (DWORD) hCallback;
dwParam1 = (DWORD) PHONEBUTTONFUNCTION_DONOTDISTURB;
dwParam2 = (DWORD) typeOfChange;
dwParam3 = (DWORD) currentValue;

enum CiscoDoNotDisturbOption {
    DoNotDisturbOption_NONE      = 0, 
    DoNotDisturbOption_RINGEROFF = 1,
    DoNotDisturbOption_REJECT    = 2 
};

enum CiscoDoNotDisturbStatus {
    DoNotDisturbStatus_UNKNOWN  = 0, 
    DoNotDisturbStatus_ENABLED  = 1,
    DoNotDisturbStatus_DISABLED = 2
};

enum CiscoDoNotDisturbNotification {
    DoNotDisturb_STATUS_CHANGED  = 1,
    DoNotDisturb_OPTION_CHANGED  = 2
};

Parameters

dwDevice

A handle to a line device

dwCallbackInstance

The callback instance supplied when opening the line

dwParam1

Always equal to PHONEBUTTONFUNCTION_DONOTDISTURB for the Do-Not-Disturb change notification

dwParam2

Indicate type of change and can have one of the following enum values:

enum CiscoDoNotDisturbNotification {
    DoNotDisturb_STATUS_CHANGED  = 1,
    DoNotDisturb_OPTION_CHANGED  = 2
};

dwParam3

If the dwParm2 indicates status change with the value DoNotDisturb_STATUS_CHANGED, this parameter can have one of the following enum values:

enum CiscoDoNotDisturbStatus {
    DoNotDisturbStatus_UNKNOWN  = 0, 
    DoNotDisturbStatus_ENABLED  = 1,
    DoNotDisturbStatus_DISABLED = 2
};

If the dwParm2 indicates option change with the value DoNotDisturb_OPTION_CHANGED, this parameter can have one of the following enum values:

enum CiscoDoNotDisturbOption {
    DoNotDisturbOption_NONE      = 0, 
    DoNotDisturbOption_RINGEROFF = 1,
    DoNotDisturbOption_REJECT    = 2 
};

Cisco Phone Device-Specific Extensions

Table 4-2 lists the subclasses of CiscoPhoneDevSpecific.

Table 4-2 Cisco Phone Device-Specific TAPI functions 

Cisco Functions
Synopsis

CCiscoPhoneDevSpecific

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

CCiscoPhoneDevSpecificDataPassThrough

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

CCiscoPhoneDevSpecificAcquire

Allows application to acquire any CTI-controllable device that can be opened later in superprovider mode.

CCiscoPhoneDevSpecificDeacquire

Allows application to deacquire a CTI-controllable device that was explicitly acquired.

CCiscoPhoneDevSpecificGetRTPSnapshot

Allows application to request secure RTP indicator for calls on the device.


CCiscoPhoneDevSpecific

CCiscoPhoneDevSpecific
|
+-- CCiscoPhoneDevSpecificDataPassThrough

Description

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

Header File

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

Class Detail

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

Functions

lpParms()

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

dwSize()

function will give the size of the parameter block area

Parameter

m_MsgType

specifies the type of message.

Subclasses

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

Enumeration

Valid message identifiers are found in the CiscoPhoneDevSpecificType enumeration.


enum CiscoLineDevSpecificType {
CPDST_DEVICE_DATA_PASSTHROUGH_REQUEST = 1
};

CCiscoPhoneDevSpecificDataPassThrough

CCiscoPhoneDevSpecific
|
+-- CCiscoPhoneDevSpecificDataPassThrough

XSI enabled IP phones allow applications to directly communicate with the phone and access XSI features (e.g. manipulate display, get user input, play tone, etc.). In order to allow TAPI applications access to some of these XSI capabilities without having to setup and maintain an independent connection directly to the phone, TAPI will provide the ability to send device data through the CTI interface. This feature is exposed as 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
{
public:
	CCiscoPhoneDevSpecificDataPassThrough () : 
    CCiscoPhoneDevSpecific(CPDST_DEVICE_DATA_PASSTHROUGH_REQUEST) 
	{
	  memset((char*)m_DeviceData, 0, sizeof(m_DeviceData)) ;
	}
	virtual ~CCiscoPhoneDevSpecificDataPassThrough() {;}
	// data size determined by MAX_DEVICE_DATA_PASSTHROUGH_SIZE
	TCHAR m_DeviceData[MAX_DEVICE_DATA_PASSTHROUGH_SIZE] ;
	// subtract out the virtual funciton table pointer size
	virtual DWORD dwSize (void) const {return (sizeof (*this)-4) ;} 
}

Parameters

DWORD m_MsgType

equals CPDST_DEVICE_DATA_PASSTHROUGH_REQUEST.

DWORD m_DeviceData

This is the character buffer that contains 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

CCiscoPhoneDevSpecific
|
+-- CCiscoPhoneDevSpecificAcquire

Description

The CCiscoPhoneDevSpecificAcquire class is used to explicitly acquire any CTI controllable device.

If a Superprovider application needs to open any CTI Controllable device on the Cisco Unified Communications Manager system. The application 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
{
    public:
CCiscoPhoneDevSpecificAcquire () : CCiscoPhoneDevSpecific (CPDST_ACQUIRE) {}
        virtual ~ CCiscoPhoneDevSpecificAcquire () {}
        char m_DeviceName[16];
        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

CCiscoPhoneDevSpecific
|
+-- 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 Communications Manager 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
{
    public:
CCiscoPhoneDevSpecificDeacquire () : CCiscoPhoneDevSpecific (CPDST_ACQUIRE) {}
        virtual ~ CCiscoPhoneDevSpecificDeacquire () {}
        char m_DeviceName[16];
        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

CCiscoPhoneDevSpecific
|
+-- 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
{
    public:
CCiscoPhoneDevSpecificGetRTPSnapshot () : CCiscoPhoneDevSpecific 
(CPDST_REQUEST_RTP_SNAPSHOT_INFO) {}
        virtual ~ CCiscoPhoneDevSpecificGetRTPSnapshot () {}
        char m_DeviceName[16];
        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 that contains 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_STOP_TRANSMISION,
	SLDSMT_START_RECEPTION,
	SLDSMT_STOP_RECEPTION,
	SLDSMT_LINE_EXISTING_CALL,
	SLDSMT_OPEN_LOGICAL_CHANNEL,
	SLDSMT_CALL_TONE_CHANGED,
	SLDSMT_LINECALLINFO_DEVSPECIFICDATA,
	SLDSMT_NUM_TYPE,
	SLDSMT_LINE_PROPERTY_CHANGED,
	SLDSMT_MONITORING_STARTED,
	SLDSMT_MONITORING_ENDED,
	SLDSMT_RECORDING_STARTED,
	SLDSMT_RECORDING_ENDED
};

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, Partition support, call security status, CallAttributeInfo, and CCM CallID.


Note SRTP, QoS , Partition support is available only if extension version 0x00070000 or higher is negotiated.

Call security status, CallAttributeInfo and CCM CallID is available only if extension version 0x00080000 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|SLDST_CALL_SECURITY_STATUS|SLDST_CALL_ATTRIBUTE_INFO 
|SLDST_CCM_CALLID

The bit mask values are:

SLDST_SRTP_INFO = 0x00000001
SLDST_QOS_INFO = 0x00000002
SLDST_PARTITION_INFO = 0x00000004
SLDST_EXTENDED_CALL_INFO = 0x00000008
SLDST_CALL_ATTRIBUTE_INFO = 0x00000010
SLDST_CCM_CALLID                     = 0x00000020
|SLDST_CALL_SECURITY_STATUS=0x00000040

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,
    SRTP_MEDIA_NOT_ENCRYPTED
};

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

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

2 LINE_DEVSPECIFIC events are sent only if the application has requested them using lineDevSpecific()


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

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


Blind Transfer Through Translation Pattern

A calls via translation pattern B.

B answers.

A and B are connected.

Action
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 Communications Manager 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 Communications Manager 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 Communications Manager 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 Communications Manager 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 Communications Manager 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 Communications Manager 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 Communications Manager. 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 Communications Manager 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

Intercom Feature Scenarios

This is the configuration used for all the use cases below.

1. 1. IPPhone A has 2 lines line1 (1000) line2 (5000). Line2 is a intercom line. Speeddial to 5001 with label ìAssistant_1î is configured.

2. 2. IPPhone B has 3 lines line1 (1001) line2 (5001) and Line3 (5002). Line2 and Line3 are intercom lines. Speeddial to 5000 with label ìManager_1î is configured on line2. Line 3 does not have Speeddial configured for it.

3. 3. IPPhone C has 2 lines (1002), line2 (5003). 5003 is intercom line and configured with Speeddial to 5002 with label ìAssistant_5002î.

4. 4. IPPhone D has 1 line (5004). 5004 is a intercom line.

5. 5. CTIPort X has 2 lines line1 (2000) line2 (5555). Line2 is a intercom line. Speedial to 5001 is configured with label ìAssistant_1î is configured.

6. 6. Intercom lines (5000 to 5003) are in same partition = Intercom_Group_1 and are reachable from each other. 5004 in Intercom_Group_2.

7. 7. Application monitoring all lines on all devices.

Assumption: Application initialized and CTI provided the details on speeddial and lines with intercom line on all the devices. Behavior should be same for SCCP and SIP phones.

Application Invoking Speeddial

Action
Events

LineOpen on 5000 & 5001

Initiate InterCom Call on 5000

For 5000

receive LINE_CALLSTATE

cbInst=x0

param1=x03000000

param2=x1, ACTIVE

param3=x0,

Receive StartTransmission event

For 5001

receive LINE_CALLSTATE

cbInst=x0

param1= x03000000

param2=x1, ACTIVE

param3=x0,

Receive StartReception event

Receive zipzip tone with reason as intercom


Agent Invokes Talkback

Action
Events

Continuing from the previous use case, 5001 initiates LineTalkBack from application on the InterCom call

For 5000

receive LINE_CALLSTATE

device=x10218

param1=x100, CONNECTED

param2=x1, ACTIVE

param3=x0,

Receive StartReception event

For 5001

receive LINE_CALLSTATE

device=x101f6

cbInst=x0

param1=x100, CONNECTED

param2=x1, ACTIVE

param3=x0,

Receive StartTransmission event


Change the SpeedDial

Action
Events

Open line 5000

LineChangeSpeeddial request (speeddial to 5003, label = "Assistant_5003")

The new speed dial and label is successfully set for the intercom line

Receive LineSpeeddialChangeEvent from CTI

Send LINE_DEVSPECIFIC indicating that speeddial and label has been changed.

Application issues LIneGetDevCaps to retrieve speeddial/label set on the line

TAPI returns configured speeddial/label configured on the line.


Secure Conferencing Feature Scenarios

Conference with all parties as Secure

Preconditions: The conference bridge has security profile. MOH is not configured. A, B, and C are registered as Encrypted.

Action
CTI Messages
TAPI Messages
TAPI Structures

A calls B. B answers the call.

Party A

 

CallStateChangedEvent, CH=C1, GCH=G1, Calling=A, Called=B, OrigCalled=B, LR=NP, State=Connected, Origin=OutBound, Reason=Direct

SecurityStaus= NotAuthenticated

CtiCallSecurityStatusUpdate

LH = A, CH = C1

SecurityStaus= Encrypted

LINE_CALLDEVSPECIFIC
hDevice=A
dwCallbackInstance=0
dwParam1= SLDSMT_LINECALLINFO_DEVSPECIFICDATA
dwParam2=SLDST_CALL_SECURITY_STATUS
dwParam3=0

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

Devspecific Data :

CallSecurityInfo = Encrypted

 

Party B

 

CallStateChangedEvent, CH=C2, GCH=G1, Calling=A, Called=B, OrigCalled=B, LR=NP, State=Connected, Origin=OutBound, Reason=Direct

SecurityStaus=NotAuthenticated

CtiCallSecurityStatusUpdate

LH = B, CH = C2

SecurityStaus= Encrypted

LINE_CALLDEVSPECIFIC
hDevice=B
dwCallbackInstance=0
dwParam1= SLDSMT_LINECALLINFO_DEVSPECIFICDATA
dwParam2=SLDST_CALL_SECURITY_STATUS
dwParam3=0

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

Devspecific Data :

CallSecurityInfo = Encrypted

B does lineSetUpConference

Party B

 

CtiCallSecurityStatusUpdate

LH = B, CH = C2

SecurityStaus= NotAuthenticated

LINE_CALLDEVSPECIFIC
hDevice=B
dwCallbackInstance=0
dwParam1= SLDSMT_LINECALLINFO_DEVSPECIFICDATA
dwParam2=SLDST_CALL_SECURITY_STATUS
dwParam3=0

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

Devspecific Data :

CallSecurityInfo = NotAuthenticated

B calls C. C answers the call.

Party B

 

CallStateChangedEvent, CH=C3, GCH=G2, Calling=A, Called=B, OrigCalled=B, LR=NP, State=Connected, Origin=OutBound, Reason=Direct

SecurityStaus=NotAuthenticated

CtiCallSecurityStatusUpdate

LH = B, CH = C3

SecurityStaus= Encrypted

LINE_CALLDEVSPECIFIC
hDevice=B
dwCallbackInstance=0
dwParam1= SLDSMT_LINECALLINFO_DEVSPECIFICDATA
dwParam2=SLDST_CALL_SECURITY_STATUS
dwParam3=0

LINECALLINFO (hCall-1)
hLine=B
dwCallID=T2
dwOrigin=OUTBOUND
dwReason=DIRECT
dwCallerID=B
dwCalledID=C
dwConnectedID=C dwRedirectionID=NP
dwRedirectingID=NP

Devspecific Data :

CallSecurityInfo = Encrypted

 

Party C

 

CallStateChangedEvent, CH=C4, GCH=G2, Calling=B, Called=C, OrigCalled=C, LR=NP, State=Connected, Origin=OutBound, Reason=Direct SecurityStaus= NotAuthenticated

CtiCallSecurityStatusUpdate

LH = C, CH = C4

SecurityStaus= Encrypted

LINE_CALLDEVSPECIFIC
hDevice=C
dwCallbackInstance=0
dwParam1= SLDSMT_LINECALLINFO_DEVSPECIFICDATA
dwParam2=SLDST_CALL_SECURITY_STATUS
dwParam3=0

LINECALLINFO (hCall-1)
hLine=C
dwCallID=T2
dwOrigin=INTERNAL
dwReason=DIRECT
dwCallerID=B
dwCalledID=C
dwConnectedID=B dwRedirectionID=NP
dwRedirectingID=NP

Devspecific Data :

CallSecurityInfo = Encrypted

B completes conf.

Party B

 

CtiCallSecurityStatusUpdate

LH = B, CH = C2

SecurityStaus= Encrypted

LINE_CALLDEVSPECIFIC
hDevice=B
dwCallbackInstance=0
dwParam1= SLDSMT_LINECALLINFO_DEVSPECIFICDATA
dwParam2=SLDST_CALL_SECURITY_STATUS
dwParam3=0

LINECALLINFO (hCall-1)
hLine=B
dwCallID=T1
dwOrigin=CONFERENCE
dwReason=UNKNOWN
dwCallerID=NP
dwCalledID=NP
dwConnectedID=NP

dwRedirectionID=NP
dwRedirectingID=NP

Devspecific Data :

CallSecurityInfo = Encrypted


Hold/Resume in Secure Conference

Preconditions: conference bridge has security profile. MOH is configured. A, B, and C are secure phones and are in conference with overall call security status as secure.

Action
CTI Messages
TAPI Messages
TAPI Structures

A does lineHold

Party A

 

CtiCallSecurityStatusUpdate,

LH = A, CH = C1,

SecurityStaus= NotAuthenticated

LINE_CALLDEVSPECIFIC
hDevice=A
dwCallbackInstance=0
dwParam1= SLDSMT_LINECALLINFO_DEVSPECIFICDATA
dwParam2=SLDST_CALL_SECURITY_STATUS
dwParam3=0

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

Devspecific Data : CallSecurityInfo = NotAuthenticated

 

Party B

 

CtiCallSecurityStatusUpdate,

LH = B, CH = C2,

SecurityStaus= NotAuthenticated

LINE_CALLDEVSPECIFIC
hDevice=B
dwCallbackInstance=0
dwParam1= SLDSMT_LINECALLINFO_DEVSPECIFICDATA
dwParam2=SLDST_CALL_SECURITY_STATUS
dwParam3=0

LINECALLINFO (hCall-1)
hLine=B
dwCallID=T1
dwOrigin=CONFERENCE
dwReason=UNKNOWN
dwCallerID=NP
dwCalledID=NP
dwConnectedID=NP dwRedirectionID=NP
dwRedirectionID=NP

Devspecific Data : CallSecurityInfo = CtiCallSecurityStatusUpdate,

LH = A, CH = C1,

SecurityStaus= NotAuthenticated

 

Party C

 

CtiCallSecurityStatusUpdate,

LH = A, CH = C1,

SecurityStaus= NotAuthenticated

LINE_CALLDEVSPECIFIC
hDevice=C
dwCallbackInstance=0
dwParam1= SLDSMT_LINECALLINFO_DEVSPECIFICDATA
dwParam2=SLDST_CALL_SECURITY_STATUS
dwParam3=0

LINECALLINFO (hCall-1)
hLine=
dwCallID=T1
dwOrigin=CONFERENCE
dwReason=UNKNOWN
dwCallerID=NP
dwCalledID=NP
dwConnectedID=NP dwRedirectionID=NP
dwRedirectionID=NP

Devspecific Data : CallSecurityInfo = NotAuthenticated

A does lineResume

Party A

 

CtiCallSecurityStatusUpdate,

LH = A, CH = C1,

SecurityStaus= Encrypted

LINE_CALLDEVSPECIFIC
hDevice=A
dwCallbackInstance=0
dwParam1= SLDSMT_LINECALLINFO_DEVSPECIFICDATA
dwParam2=SLDST_CALL_SECURITY_STATUS
dwParam3=0

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

Devspecific Data : CallSecurityInfo = Encrypted

 

Party B

 

CtiCallSecurityStatusUpdate,

LH = B, CH = C2,

SecurityStaus= Encrypted

LINE_CALLDEVSPECIFIC
hDevice=B
dwCallbackInstance=0
dwParam1= SLDSMT_LINECALLINFO_DEVSPECIFICDATA
dwParam2=SLDST_CALL_SECURITY_STATUS
dwParam3=0

LINECALLINFO (hCall-1)
hLine=B
dwCallID=T1
dwOrigin=CONFERENCE
dwReason=UNKNOWN
dwCallerID=NP
dwCalledID=NP
dwConnectedID=NP dwRedirectionID=NP
dwRedirectionID=NP

Devspecific Data : CallSecurityInfo = Encrypted

 

Party C

 

CtiCallSecurityStatusUpdate,

LH = C, CH = C4,

SecurityStaus= Encrypted

LINE_CALLDEVSPECIFIC
hDevice=C
dwCallbackInstance=0
dwParam1= SLDSMT_LINECALLINFO_DEVSPECIFICDATA
dwParam2=SLDST_CALL_SECURITY_STATUS
dwParam3=0

LINECALLINFO (hCall-1)
hLine=
dwCallID=T1
dwOrigin=CONFERENCE
dwReason=UNKNOWN
dwCallerID=NP
dwCalledID=NP
dwConnectedID=NP dwRedirectionID=NP
dwRedirectionID=NP

Devspecific Data : CallSecurityInfo = Encrypted


Monitoring & Recording Feature Scenarios

Monitoring a Call

Precondition: A(agent) & B(customer) are connected. BIB on A is set to on.

Action
CTI Messages
TAPI Messages
TAPI Structures
 

Party C

C(supervisor) issues start monitoring req with A's permanentLineID as input.

NewCallEvent, CH=C3, GCH=G2, Calling=C, 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=C
dwCallID=T2
dwOrigin=OUTBOUND
dwReason=DIRECT
dwCallerID=C
dwCalledID=NP
dwConnectedID=NP
dwRedirectionID=NP
dwRedirectingID=NP

Call is auomatically answered by A's BIB.

Party C

 

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

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

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

 

Party A

 

MonitoringStartedEvent,

CH = C1

LINE_CALLDEVSPECIFIC

hDevice=hCall-1
dwCallbackInstance=0

dwParam1 = SLDSMT_MONITOR_STARTED

dwParam2=0
dwParam3=0

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

 

Party C

 

LineCallAttributeInfoEvent,

CH=C3, Type = 2 (MonitorCall_Target),

CI = C1,

Address=A's DN, Partition=A's Partition, DeviceName = A's Name

LINE_CALLDEVSPECIFIC

hDevice=hCall-1
dwCallbackInstance=0

dwParam1 = SLDSMT_LINECALLINFO_DEVSPECIFICDATA

dwParam2=SLDST_CALL_ATTRIBUTE_INFO
dwParam3=0

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

DevSpecifc Data:

Type: CallAttribute_SilentMonitorCall_Target,

CI = C1,

DN = A's DN,

Partition = A's Partition,

DeviceName = A's Name

 

Party A

 

LineCallAttributeInfoEvent,

CH=C1, Type = 1 (MonitorCall),

CI = C3

Address=C's DN, Partition=C's Partition, DeviceName = C's Name

LINE_CALLDEVSPECIFIC

hDevice=hCall-1
dwCallbackInstance=0

dwParam1 = SLDSMT_LINECALLINFO_DEVSPECIFICDATA

dwParam2=SLDST_CALL_ATTRIBUTE_INFO
dwParam3=0

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

DevSpecifc Data:

Type:CallAttribute_SilentMonitorCall,

CI = C3

DN = C's DN,

Partition = C's Partition,

DeviceName = C's Name

C drops the call.

Party C

 

CallStateChangedEvent, CH=C3, State=Idle, Cause=CauseNoError, Reason=Direct, Calling=C, Called=A, OrigCalled=A, LR=NP

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

 
 

Party A

 

MonitoringEndedEvent,

CH = C1

LINE_CALLDEVSPECIFIC

hDevice=hCall-1
dwCallbackInstance=0

dwParam1 = SLDSMT_MONITOR_ENDED

dwParam2= DisconnectMode_Normal
dwParam3=0

 
       

Automatic recording

Precondition: recording type on A (agent Phone) is configured as `Automatic'. D is configured as a Recorder Device.

Action
CTI Messages
TAPI Messages
TAPI Structures

A recieves a call from B. A answers the call.

Recording session is established between the agent's phone and the recorder

Party A

 

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

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

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

 

RecordingStartedEvent,

CH = C1

LINE_CALLDEVSPECIFIC

hDevice=hCall-1
dwCallbackInstance=0

dwParam1 = SLDSMT_RECORDING_STARTED

dwParam2=0
dwParam3=0

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

 

LineCallAttributeInfoEvent

CH = C1, Type = 3 (Automatic Recording), Address = D's DN, Partition = D's Partition, DeviceName = D's Name

LINE_CALLDEVSPECIFIC

hDevice=hCall-1
dwCallbackInstance=0

dwParam1 = SLDSMT_LINECALLINFO_DEVSPECIFICDATA

dwParam2=SLDST_CALL_ATTRIBUTE_INFO
dwParam3=0

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

DevSpecifc Data:

Type: App Controlled Recording,

DN = D's DN,

Partition = D's Partition,

DeviceName = D's Name


Application-Controlled Recording

Precondition: A (C1) and B (C2) are connected. Recording Type on A is configured as `Application Based'. D is configured as a Recorder Device.

Action
CTI Messages
TAPI Messages
TAPI Structures

A issues start recording req.

Recording session is established between the agent's phone and the recorder

Party A

 

RecordingStartedEvent,

CH = C1

LINE_CALLDEVSPECIFIC

hDevice=hCall-1
dwCallbackInstance=0

dwParam1 = SLDSMT_RECORDING_STARTED

dwParam2=0
dwParam3=0

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

 

LineCallAttributeInfoEvent

CH = C1, Type = 4 (App Controlled Recording), Address = D's DN, Partition = D's Partition, DeviceName = D's Name

LINE_CALLDEVSPECIFIC

hDevice=hCall-1
dwCallbackInstance=0

dwParam1 = SLDSMT_LINECALLINFO_DEVSPECIFICDATA

dwParam2=SLDST_CALL_ATTRIBUTE_INFO
dwParam3=0

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

DevSpecifc Data:

Type: App Controlled Recording,

DN = D's DN,

Partition = D's Partition,

DeviceName = D's Name

A issues stop monitoring request.

RecordingEndedEvent,

CH = C1

LINE_CALLDEVSPECIFIC

hDevice=hCall-1
dwCallbackInstance=0

dwParam1 = SLDSMT_RECORDING_ENDED

dwParam2= DisconnectMode_Normal
dwParam3=0

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

       

Conference Enhancement Use Cases

Non-Controller adding a party to a conference

Setup: A,B, C in a conference created by A.

Action
Events

A,B,C are in a conference

At A:

Conference - Caller="A", Called="B", Connecgted="B"

Connected

Conference - Caller="A", Called="C", Connecgted="C"

At B:

Conference - Caller="A", Called="B", Connecgted="A"

Connected

Conference - Caller="B", Called="C", Connecgted="C"

At C:

Conference - Caller="B", Called="C", Connecgted="B"

Connected

Conference - Caller="C", Called="A", Connecgted="A"

C issues a linePrepareAddToConference to D

At A:

Conference - Caller="A", Called="B", Connecgted="B"

Connected

Conference - Caller="A", Called="C", Connecgted="C"

At B:

Conference - Caller="A", Called="B", Connecgted="A"

Connected

Conference - Caller="B", Called="C", Connecgted="C"

At C:

Conference - Caller="B", Called="C", Connecgted="B"

OnHoldPendConf

Conference - Caller="C", Called="A", Connecgted="A"

Connected - Caller="C", Called="D", Connecgted="D"

At D:

Connected - Caller="C", Called="D", Connecgted="C"

C issues a lineAddToConference to D

At A:

Conference - Caller="A", Called="B", Connecgted="B"

Connected

Conference - Caller="A", Called="C", Connecgted="C"

Conference - Caller="A", Called="D", Connecgted="D"

At B:

Conference - Caller="A", Called="B", Connecgted="A"

Connected

Conference - Caller="B", Called="C", Connecgted="C"

Conference - Caller="B", Called="D", Connecgted="D"

At C:

Conference - Caller="B", Called="C", Connecgted="B"

Connected

Conference - Caller="C", Called="A", Connecgted="A"

Conference - Caller="C", Called="D", Connecgted="D"

At D:

Conference - Caller="C", Called="D", Connecgted="C"

Connected

Conference - Caller="D", Called="A", Connecgted="A"

Conference - Caller="D", Called="B", Connecgted="B"


Chaining two ad-hoc conferences using Join

Actions
TSP CallInfo

A calls B, B answer, then B inits conference to C, C answer, and B complete the conference

At A :

GCID-1

CONNECTED : Caller = Unknown

Caller = Unknown

CONFERENCED : Caller = A

Called = B

CONFERENCED : Caller = A

Called = C

At B :

GCID-1

CONNECTED : Caller = Unknown

Caller = Unknown

CONFERENCED : Caller = A

Called = B

CONFERENCED : Caller = B

Called = C

At C:

GCID-1

CONNECTED : Caller = Unknown

Caller = Unknown

CONFERENCED : Caller = B

Called = C

CONFERENCED : Caller = C

Called = A

C inits/complete conference to D,E

No Change for A and B

At C :

- First conference

GCID-1

ONHOLD : Caller = Unknown

Caller = Unknown

CONFERENCED : Caller = A

Called = B

CONFERENCED : Caller = A

Called = C

- Second conference

GCID-2

CONNECTED : Caller = Unknown

Caller = Unknown

CONFERENCED : Caller = C

Called = D

CONFERENCED : Caller = C

Called = E

At D :

GCID-2

CONNECTED : Caller = Unknown

Caller = Unknown

CONFERENCED : Caller = C

Called = D

CONFERENCED : Caller = D

Called = E


At E :

GCID-2
CONNECTED : Caller = Unknown

Caller = Unknown

CONFERENCED : Caller = C

Called = E

CONFERENCED : Caller = E

Called = D

C initiates JOIN request to join to conference call together, with GCID is the primary call

At A :

GCID-1
CONNECTED : Caller = Unknown

Caller = Unknown

CONFERENCED : Caller = A

Called = B

CONFERENCED : Caller = A

Called = C

CONFERENCED : Caller = A

Called = Conference-2

At B :

GCID-1

CONNECTED : Caller = Unknown

Caller = Unknown

CONFERENCED : Caller = A

Called = B

CONFERENCED : Caller = B

Called = C

CONFERENCED : Caller = B

Called = Conference-2

At C:

- First conference

GCID-1

CONNECTED : Caller = Unknown

Caller = Unknown

CONFERENCED : Caller = B

Called = C

CONFERENCED : Caller = C

Called = A

CONFERENCED : Caller = C

Called = Conference-2

 

At D:

GCID-2

CONNECTED : Caller = Unknown

Caller = Unknown

CONFERENCED : Caller = D

Called = E

CONFERENCED : Caller = D

Called = Conference-1

At E :

GCID-2

CONNECTED : Caller = Unknown

Caller = Unknown

CONFERENCED : Caller = E

Called = D

CONFERENCED : Caller = E

Called = Conference-1