freeswitch/libs/sipcc/core/includes/ccapi.h

1579 lines
47 KiB
C
Executable File

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef _CCAPI_H_
#define _CCAPI_H_
//#include "prtypes.h"
#include "cpr_types.h"
#include "cpr_memory.h"
#include "phone_types.h"
#include "string_lib.h"
#include "vcm.h"
#include "sdp.h"
#include "cc_constants.h"
typedef unsigned int cc_security_e;
typedef unsigned int cc_select_state_e;
typedef unsigned int cc_call_type_e;
typedef unsigned int cc_policy_e;
typedef int cc_causes_t;
#define CC_CALL_OUTGOMING CC_CALL_TYPE_OUTGOING
#define CC_CALL_FORWARDED CC_CALL_TYPE_FORWARDED
#define CC_CALL_NONE CC_CALL_TYPE_NONE
#define CC_CALL_INCOMING CC_CALL_TYPE_INCOMING
#define SDP_SIZE 4096 /* must increase this */
#define CANDIDATE_SIZE 150
#define MID_SIZE 150
#include "sessionConstants.h"
typedef int cc_features_t;
typedef unsigned int softkey_events;
typedef unsigned int cc_call_priority_e;
extern cc_reg_state_t ccapp_get_state();
/* Session FEATURES */
/* please update cc_feature_names whenever this enum list is changed */
typedef enum {
CC_FEATURE_MIN = -1L,
CC_FEATURE_NONE,
CC_FEATURE_HOLD = 1L,
CC_FEATURE_RESUME,
CC_FEATURE_OFFHOOK,
CC_FEATURE_NEW_CALL,
CC_FEATURE_REDIAL,
CC_FEATURE_ONHOOK,
CC_FEATURE_KEYPRESS,
CC_FEATURE_DIAL,
CC_FEATURE_XFER,
CC_FEATURE_CFWD_ALL,
CC_FEATURE_END_CALL,
CC_FEATURE_ANSWER,
CC_FEATURE_INFO,
CC_FEATURE_CONF,
CC_FEATURE_JOIN,
CC_FEATURE_DIRTRXFR,
CC_FEATURE_SELECT,
CC_FEATURE_SPEEDDIAL,
CC_FEATURE_SWAP,
CC_FEATURE_SPEEDDIAL_BLF,
CC_FEATURE_BLIND_XFER_WITH_DIALSTRING,
CC_FEATURE_BKSPACE,
CC_FEATURE_CANCEL,
CC_FEATURE_DIALSTR,
CC_FEATURE_UPD_SESSION_MEDIA_CAP,
/* Not used in the session API */
CC_FEATURE_MEDIA,
CC_FEATURE_UPDATE,
CC_FEATURE_CALLINFO,
CC_FEATURE_BLIND_XFER,
CC_FEATURE_NOTIFY,
CC_FEATURE_SUBSCRIBE,
CC_FEATURE_B2BCONF,
CC_FEATURE_B2B_JOIN,
CC_FEATURE_HOLD_REVERSION,
CC_FEATURE_BLF_ALERT_TONE,
CC_FEATURE_REQ_PEND_TIMER_EXP,
CC_FEATURE_NUMBER,
CC_FEATURE_URL,
CC_FEATURE_REDIRECT,
CC_FEATURE_RINGBACK_DELAY_TIMER_EXP,
CC_FEATURE_CALL_PRESERVATION,
CC_FEATURE_UPD_MEDIA_CAP,
CC_FEATURE_CAC_RESP_PASS,
CC_FEATURE_CAC_RESP_FAIL,
CC_FEATURE_FAST_PIC_UPD,
CC_FEATURE_UNDEFINED,
CC_FEATURE_CREATEOFFER,
CC_FEATURE_CREATEANSWER,
CC_FEATURE_SETLOCALDESC,
CC_FEATURE_SETREMOTEDESC,
CC_FEATURE_LOCALDESC,
CC_FEATURE_REMOTEDESC,
CC_FEATURE_SETPEERCONNECTION,
CC_FEATURE_ADDSTREAM,
CC_FEATURE_REMOVESTREAM,
CC_FEATURE_ADDICECANDIDATE,
CC_FEATURE_MAX
} group_cc_feature_t;
#define skNewCall CC_FEATURE_NEW_CALL
#define skConfrn CC_FEATURE_CONF
/* please update the following cc_feature_names whenever this feature list is changed */
#ifdef __CC_FEATURE_STRINGS__
static const char *cc_feature_names[] = {
"NONE",
"HOLD",
"RESUME",
"OFFHOOK",
"NEW_CALL",
"REDIAL",
"ONHOOK",
"KEYPRESS",
"DIAL",
"XFER",
"CFWD_ALL", //10
"END_CALL",
"ANSWER",
"INFO",
"CONF",
"JOIN",
"DIR_XFER",
"SELECT",
"SPEEDDIAL",
"SWAP",
"SDBLF", //45
"BLIND_XFER_WITH_DIALSTRING",
"BSPACE",
"CANCEL",
"DIALSTR",
"UPD_SESSION_MEDIA_CAP",
"NEW_MEDIA",
"UPDATE",
"CALLINFO",
"BLIND_XFER",
"NOTIFY",
"SUBSCRIBE",
"B2BCONF",
"B2BJOIN",
"HOLD_REVERSION", //jni_max + 10
"BLF_ALERT_TONE",
"REQPENDTMREXP",
"NUMBER",
"URL",
"REDIRECT", //jni_max + 20
"RINGBACKDELAYTMREXP",
"CALL_PRESERVATION",
"UPD_MEDIA_CAP",
"CAC PASSED",
"CAC FAILED",
"FAST_PIC_UPD",
"UNDEFINED",
"CREATEOFFER",
"CREATEANSWER",
"SETLOCALDESC",
"SETREMOTEDESC",
"LOCALDESC",
"REMOTEDESC",
"SETPEERCONNECTION",
"ADDSTREAM",
"REMOVESTREAM",
"ADDICECANDIDATE",
"MAX"
};
/* This checks at compile-time that the cc_feature_names list
* is the same size as the cc_group_feature_t enum
*/
//PR_STATIC_ASSERT(PR_ARRAY_SIZE(cc_feature_names) == CC_FEATURE_MAX + 1);
#endif
/*
* Constants
*/
#define CC_MAX_DIALSTRING_LEN (512)
#define CC_MAX_MEDIA_TYPES (15)
#define CC_MAX_MEDIA_CAP (4)
#define CC_NO_CALL_ID (0)
#define CC_NO_LINE (0)
#define CC_NO_DATA (NULL)
#define CC_NO_MEDIA_REF_ID (0)
#define CC_MAX_REDIRECTS (1)
#define CC_MAX_BODY_PARTS 3
#define CC_NO_GROUP_ID (0)
#define CC_NO_CALL_INST_ID (0)
#define CC_SHORT_DIALSTRING_LEN (64)
#define CC_CISCO_PLAR_STRING "x-cisco-serviceuri-offhook"
#define CISCO_BLFPICKUP_STRING "x-cisco-serviceuri-blfpickup"
#define JOIN_ACROSS_LINES_DISABLED 0
#define CC_MAX_TRACKS 8 // <EM> query this figure
#define CC_MAX_STREAMS 2 // TODO: expand signaling to handle more than one of each a/v.
/*
*
* Support type definintions
*
*/
typedef enum cc_rcs_t_ {
CC_RC_MIN = -1,
CC_RC_SUCCESS,
CC_RC_ERROR,
CC_RC_MAX
} cc_rcs_t;
typedef enum cc_msgs_t_ {
CC_MSG_MIN = -1,
CC_MSG_SETUP,
CC_MSG_SETUP_ACK,
CC_MSG_PROCEEDING,
CC_MSG_ALERTING,
CC_MSG_CONNECTED,
CC_MSG_CONNECTED_ACK,
CC_MSG_RELEASE,
CC_MSG_RELEASE_COMPLETE,
CC_MSG_FEATURE,
CC_MSG_FEATURE_ACK,
CC_MSG_OFFHOOK,
CC_MSG_ONHOOK,
CC_MSG_LINE,
CC_MSG_DIGIT_BEGIN,
CC_MSG_DIGIT_END,
CC_MSG_DIALSTRING,
CC_MSG_MWI,
CC_MSG_AUDIT,
CC_MSG_CREATEOFFER,
CC_MSG_CREATEANSWER,
CC_MSG_SETLOCALDESC,
CC_MSG_SETREMOTEDESC,
CC_MSG_REMOTEDESC,
CC_MSG_LOCALDESC,
CC_MSG_SETPEERCONNECTION,
CC_MSG_ADDSTREAM,
CC_MSG_REMOVESTREAM,
CC_MSG_ADDCANDIDATE,
CC_MSG_AUDIT_ACK,
CC_MSG_OPTIONS,
CC_MSG_OPTIONS_ACK,
CC_MSG_SUBSCRIBE,
CC_MSG_NOTIFY,
CC_MSG_FAILOVER_FALLBACK,
CC_MSG_INFO,
/* update the following strings table if this is changed */
CC_MSG_MAX
} cc_msgs_t;
#ifdef __CC_MESSAGES_STRINGS__
static const char *cc_msg_names[] = {
"SETUP",
"SETUP_ACK",
"PROCEEDING",
"ALERTING",
"CONNECTED",
"CONNECTED_ACK",
"RELEASE",
"RELEASE_COMPLETE",
"FEAT:",
"FEATURE_ACK",
"OFFHOOK",
"ONHOOK",
"LINE",
"DIGIT_BEGIN",
"DIGIT_END",
"DIALSTRING",
"MWI",
"AUDIT",
"CREATEOFFER",
"CREATEANSWER",
"SETLOCALDESC",
"SETREMOTEDESC",
"REMOTEDESC",
"LOCALDESC",
"SETPEERCONNECTION",
"ADDSTREAM",
"REMOVESTREAM",
"ADDCANDIDATE",
"AUDIT_ACK",
"OPTIONS",
"OPTIONS_ACK",
"SUBSCRIBE",
"NOTIFY",
"FAILOVER_FALLBACK",
"INFO",
"INVALID",
};
/* This checks at compile-time that the cc_msg_names list
* is the same size as the cc_msgs_t enum
*/
//PR_STATIC_ASSERT(PR_ARRAY_SIZE(cc_msg_names) == CC_MSG_MAX + 1);
#endif //__CC_MESSAGES_STRINGS__
typedef enum cc_srcs_t_ {
CC_SRC_MIN = -1,
CC_SRC_GSM,
CC_SRC_UI,
CC_SRC_SIP,
CC_SRC_MISC_APP,
CC_SRC_RCC,
CC_SRC_CCAPP,
CC_SRC_MAX
} cc_srcs_t;
typedef enum cc_transfer_mode_e_ {
CC_XFR_MODE_MIN = -1,
CC_XFR_MODE_NONE,
CC_XFR_MODE_TRANSFEROR,
CC_XFR_MODE_TRANSFEREE,
CC_XFR_MODE_TARGET,
CC_XFR_MODE_MAX
} cc_transfer_mode_e;
typedef enum cc_regmgr_rsp_type_e_ {
CC_FAILOVER_RSP=0,
CC_RSP_START =1,
CC_RSP_COMPLETE=2
} cc_regmgr_rsp_type_e;
typedef enum cc_regmgr_rsp_e_ {
CC_REG_FAILOVER_RSP,
CC_REG_FALLBACK_RSP
} cc_regmgr_rsp_e;
/*
* Identifies what was in the Alert-Info header
*/
typedef enum {
ALERTING_NONE, /* No alert-info header present */
ALERTING_OLD, /* Unrecognized pattern or an error, mimic old behavior */
ALERTING_TONE, /* Play tone */
ALERTING_RING /* Play ringing pattern */
} cc_alerting_type;
typedef enum {
CC_MONITOR_NONE = 0,
CC_MONITOR_SILENT = 1,
CC_MONITOR_COACHING = 2
} monitor_mode_t;
typedef enum {
CFWDALL_NONE = -1,
CFWDALL_CLEAR,
CFWDALL_SET
} cfwdall_mode_t;
/* Do not change enum values unless remote-cc xml has been changed */
typedef enum {
CC_RING_DEFAULT = 0,
CC_RING_ENABLE = 1,
CC_RING_DISABLE = 2
} cc_rcc_ring_mode_e;
/* Do not change enum values unless remote-cc xml has been changed */
typedef enum {
CC_SK_EVT_TYPE_DEF = 0,
CC_SK_EVT_TYPE_EXPLI = CC_SK_EVT_TYPE_DEF,
CC_SK_EVT_TYPE_IMPLI = 1
} cc_rcc_skey_evt_type_e;
/* media name with media capability table */
typedef enum {
CC_AUDIO_1,
CC_VIDEO_1,
CC_DATACHANNEL_1,
} cc_media_cap_name;
typedef struct cc_sdp_addr_t_ {
cpr_ip_addr_t addr;
unsigned int port;
} cc_sdp_addr_t;
typedef struct cc_sdp_data_t_ {
cc_sdp_addr_t addr;
int media_types[CC_MAX_MEDIA_TYPES];
int32_t avt_payload_type;
} cc_sdp_data_t;
typedef struct cc_sdp_t_ {
sdp_t *src_sdp; /* pointer to source SDP */
sdp_t *dest_sdp; /* pointer to received SDP */
} cc_sdp_t;
typedef enum
{
cc_disposition_unknown = 0,
cc_disposition_render,
cc_disposition_session,
cc_dispostion_icon,
cc_disposition_alert,
cc_disposition_precondition
} cc_disposition_type_t;
typedef struct
{
cc_disposition_type_t disposition;
boolean required_handling;
} cc_content_disposition_t;
typedef enum
{
cc_content_type_unknown = 0,
cc_content_type_SDP,
cc_content_type_sipfrag,
cc_content_type_CMXML
} cc_content_type_t;
typedef struct cc_msgbody_t_ {
cc_content_type_t content_type;
cc_content_disposition_t content_disposition;
uint32_t body_length;
char *body;
char *content_id;
} cc_msgbody_t;
typedef struct cc_msgbody_info_t_ {
uint32_t num_parts; /* number of body parts */
cc_content_type_t content_type; /* top level content type */
cc_msgbody_t parts[CC_MAX_BODY_PARTS]; /* parts */
} cc_msgbody_info_t;
/*
* Message definitions
*/
typedef enum cc_redirect_reasons_t {
CC_REDIRECT_REASON_MIN = -1,
CC_REDIRECT_REASON_NONE,
CC_REDIRECT_REASON_BUSY,
CC_REDIRECT_REASON_NOANSWER,
CC_REDIRECT_REASON_UNCONDITIONAL,
CC_REDIRECT_REASON_DEFLECTION,
CC_REDIRECT_REASON_UNAVAILABLE
} cc_redirect_reasons_t;
typedef struct cc_redirect_t_ {
int count;
struct {
char number[CC_MAX_DIALSTRING_LEN];
cc_redirect_reasons_t redirect_reason;
} redirects[CC_MAX_REDIRECTS];
} cc_redirect_t;
typedef enum {
CC_FEAT_NONE,
CC_FEAT_HOLD,
CC_FEAT_RESUME,
CC_FEAT_BARGE,
CC_FEAT_CBARGE,
CC_FEAT_REPLACE,
CC_FEAT_CALLINFO,
CC_FEAT_INIT_CALL,
CC_FEAT_MONITOR,
CC_FEAT_TOGGLE_TO_SILENT_MONITORING,
CC_FEAT_TOGGLE_TO_WHISPER_COACHING
} cc_call_info_e;
typedef enum {
CC_REASON_NONE,
CC_REASON_XFER,
CC_REASON_CONF,
CC_REASON_SWAP,
CC_REASON_RCC,
CC_REASON_INTERNAL,
CC_REASON_MONITOR_UPDATE
} cc_hold_resume_reason_e;
typedef enum {
CC_PURPOSE_NONE,
CC_PURPOSE_INFO,
CC_PURPOSE_ICON,
CC_PURPOSE_CARD
} cc_purpose_e;
typedef enum {
CC_ORIENTATION_NONE = CC_CALL_TYPE_NONE,
CC_ORIENTATION_FROM = CC_CALL_TYPE_INCOMING,
CC_ORIENTATION_TO = CC_CALL_TYPE_OUTGOING
} cc_orientation_e;
typedef enum {
CC_UI_STATE_NONE,
CC_UI_STATE_RINGOUT,
CC_UI_STATE_CONNECTED,
CC_UI_STATE_BUSY
} cc_ui_state_e;
typedef enum {
CC_REASON_NULL,
CC_REASON_ACTIVECALL_LIST
} cc_onhook_reason_e;
typedef enum {
CC_CALL_LOG_DISP_MISSED,
CC_CALL_LOG_DISP_RCVD,
CC_CALL_LOG_DISP_PLACED,
CC_CALL_LOG_DISP_UNKNWN,
CC_CALL_LOG_DISP_IGNORE
} cc_call_logdisp_e;
/*
* The cc_caller_id_t structure contains caller IDs fields.
* Sending these fields accross components needs special care.
* There are CCAPI API that provide access or transport these fields
* by the source or by the destination. Any new caller IDs added,
* please update the APIs in ccapi.c to support the new fields.
* See cc_cp_caller(), cc_mv_caller_id() and cc_free_caller_id() functions.
*/
// mostly overlap with sessionTypes.h:cc_callinfo_t
typedef struct cc_caller_id_t_ {
string_t calling_name;
string_t calling_number;
string_t alt_calling_number;
boolean display_calling_number;
string_t called_name;
string_t called_number;
boolean display_called_number;
string_t orig_called_name;
string_t orig_called_number;
string_t last_redirect_name;
string_t last_redirect_number;
string_t orig_rpid_number;
cc_call_type_e call_type;
uint16_t call_instance_id;
} cc_caller_id_t;
/*
* The followings are definitions of bits in the feature_flag of the
* cc_feature_data_call_info_t strucure.
*
* The CC_DELAY_UI_UPDATE flag is not related to call information but
* it indicates that the call info event signaled by SIP stack
* to GSM that UI update can be delayed due to media manipulation
* event will follow. This allows GSM to defer UI update to after the
* media manipulation event.
*/
#define CC_SECURITY 1
#define CC_ORIENTATION (1<<1)
#define CC_UI_STATE (1<<2)
#define CC_CALLER_ID (1<<3)
#define CC_CALL_INSTANCE (1<<4)
#define CC_DELAY_UI_UPDATE (1<<5)
#define CC_POLICY (1<<6)
typedef struct cc_feature_data_call_info_t_{
uint16_t feature_flag;
cc_security_e security;
cc_policy_e policy;
cc_orientation_e orientation;
cc_ui_state_e ui_state;
cc_caller_id_t caller_id;
cc_call_priority_e priority;
boolean swap; //Indicate if hold/resume is because of swap
boolean protect; //indicate if the call has to be protected
boolean dusting; //indicate if it is a dusting call
uint32_t callref;
char global_call_id[CC_GCID_LEN];
} cc_feature_data_call_info_t;
typedef struct cc_replace_info_t_ {
callid_t remote_call_id; /* remote call ID to replace */
} cc_replace_info_t;
typedef struct cc_join_info_t_ {
callid_t join_call_id;
} cc_join_info_t;
typedef struct cc_initcall_t {
char gcid[CC_GCID_LEN]; // Global call id used for CTI
monitor_mode_t monitor_mode;
} cc_initcall_t;
typedef union {
cc_initcall_t initcall;
cc_hold_resume_reason_e hold_resume_reason;
cc_feature_data_call_info_t call_info_feat_data;
cc_purpose_e purpose; // Used for Barge, CBARGE
cc_replace_info_t replace;
cc_join_info_t join;
} cc_call_info_data_t;
typedef struct {
cc_call_info_data_t data;
cc_call_info_e type;
} cc_call_info_t;
typedef enum cc_xfer_methods_t_ {
CC_XFER_METHOD_MIN = -1,
CC_XFER_METHOD_NONE,
CC_XFER_METHOD_BYE,
CC_XFER_METHOD_REFER,
CC_XFER_METHOD_DIRXFR,
CC_RCC_METHOD_REFER,
CC_XFER_METHOD_MAX
} cc_xfer_methods_t;
typedef enum cc_subscriptions_t_ {
CC_SUBSCRIPTIONS_MIN = -1,
CC_SUBSCRIPTIONS_NONE,
CC_SUBSCRIPTIONS_XFER,
CC_SUBSCRIPTIONS_DIALOG = CC_SUBSCRIPTIONS_DIALOG_EXT,
CC_SUBSCRIPTIONS_CONFIG,
CC_SUBSCRIPTIONS_KPML = CC_SUBSCRIPTIONS_KPML_EXT,
CC_SUBSCRIPTIONS_PRESENCE = CC_SUBSCRIPTIONS_PRESENCE_EXT,
CC_SUBSCRIPTIONS_REMOTECC = CC_SUBSCRIPTIONS_REMOTECC_EXT,
CC_SUBSCRIPTIONS_REMOTECC_OPTIONSIND = CC_SUBSCRIPTIONS_REMOTECC_OPTIONSIND_EXT,
CC_SUBSCRIPTIONS_CONFIGAPP = CC_SUBSCRIPTIONS_CONFIGAPP_EXT,
CC_SUBSCRIPTIONS_MEDIA_INFO = CC_SUBSCRIPTIONS_MEDIA_INFO_EXT,
CC_SUBSCRIPTIONS_MAX
} cc_subscriptions_t;
typedef struct cc_feature_data_newcall_t_ {
char dialstring[CC_MAX_DIALSTRING_LEN];
cc_causes_t cause;
cc_redirect_t redirect;
cc_replace_info_t replace;
cc_join_info_t join;
char global_call_id[CC_GCID_LEN];
callid_t prim_call_id; /* For internal new call event
* refer primary call's call_id
*/
cc_hold_resume_reason_e hold_resume_reason; /* Reason for new consult call */
} cc_feature_data_newcall_t;
typedef struct cc_feature_data_xfer_t_ {
cc_causes_t cause;
char dialstring[CC_MAX_DIALSTRING_LEN];
char referred_by[CC_MAX_DIALSTRING_LEN];
cc_xfer_methods_t method;
callid_t target_call_id;
char global_call_id[CC_GCID_LEN];
} cc_feature_data_xfer_t;
typedef enum cc_app_type_t_ {
CC_APP_MIN = -1,
CC_APP_NONE,
CC_APP_CMXML,
CC_APP_REMOTECC,
CC_APP_MAX
} cc_app_type_t;
typedef struct cc_refer_body_t_ {
struct cc_refer_body_t_ *next;
char refer_body[200];
int refer_body_len;
cc_app_type_t app_type;
} cc_refer_body_t;
typedef struct cc_feature_data_ind_t__ {
cc_causes_t cause;
char to[CC_MAX_DIALSTRING_LEN];
char referred_by[CC_MAX_DIALSTRING_LEN];
char referred_to[CC_MAX_DIALSTRING_LEN];
cc_refer_body_t refer_body;
} cc_feature_data_ind_t;
typedef struct cc_feature_data_endcall_t_ {
cc_causes_t cause;
char dialstring[CC_MAX_DIALSTRING_LEN];
} cc_feature_data_endcall_t;
typedef struct cc_kfact_t {
char rxstats[CC_KFACTOR_STAT_LEN];
char txstats[CC_KFACTOR_STAT_LEN];
} cc_kfact_t;
typedef struct cc_feature_data_hold_t_ {
cc_msgbody_info_t msg_body;
cc_call_info_t call_info;
cc_kfact_t kfactor;
} cc_feature_data_hold_t;
typedef struct cc_feature_data_hold_reversion_t_ {
int alertInterval;
} cc_feature_data_hold_reversion_t;
typedef struct cc_feature_data_resume_t_ {
cc_causes_t cause;
cc_msgbody_info_t msg_body;
cc_call_info_t call_info;
cc_kfact_t kfactor;
} cc_feature_data_resume_t;
typedef struct cc_feature_data_redirect_t_ {
char redirect_number[CC_MAX_DIALSTRING_LEN];
cc_redirect_t redirect;
} cc_feature_data_redirect_t;
typedef struct cc_feature_data_subscribe_t_ {
cc_subscriptions_t event_package;
boolean subscribe;
char subscribe_uri[CC_MAX_DIALSTRING_LEN];
cc_srcs_t component;
int component_id;
int *callBack;
} cc_feature_data_subscribe_t;
typedef enum cc_dialog_lock_e_ {
CC_DIALOG_UNLOCKED, /* unlocked */
CC_DIALOG_LOCKED /* local selected or locked */
} cc_dialog_lock_e;
typedef struct cc_notify_data_config_t {
boolean config_state;
} cc_notify_data_config_t;
typedef struct cc_notify_data_kpml_t {
boolean kpml_state;
} cc_notify_data_kpml_t;
typedef struct cc_notify_data_rcc_t {
cc_features_t feature;
cc_select_state_e select;
} cc_notify_data_rcc_t;
typedef union cc_notify_data_t {
cc_notify_data_config_t config;
cc_notify_data_kpml_t kpml;
cc_notify_data_rcc_t rcc;
} cc_notify_data_t;
typedef struct cc_feature_data_notify_t_ {
cc_subscriptions_t subscription;
cc_xfer_methods_t method;
cc_causes_t cause;
// The refer data above should have been in a cc_notify_data_refer_t
int cause_code;
callid_t blind_xferror_gsm_id;
boolean final;
cc_notify_data_t data;
} cc_feature_data_notify_t;
typedef struct cc_feature_data_update_t_ {
cc_msgbody_info_t msg_body;
} cc_feature_data_update_t;
typedef struct cc_feature_data_b2bcnf_t_ {
cc_causes_t cause;
callid_t call_id;
callid_t target_call_id;
char global_call_id[CC_GCID_LEN];
} cc_feature_data_b2bcnf_t;
typedef struct cc_feature_data_record_t_ {
boolean subref_flag;
} cc_feature_data_record_t;
typedef struct cc_feature_data_select_t_ {
boolean select; /* TRUE when select, FALSE when unselect */
} cc_feature_data_select_t;
typedef struct cc_feature_data_b2b_join_t_ {
callid_t b2bjoin_callid;
callid_t b2bjoin_joincallid;
} cc_feature_data_b2b_join_t;
typedef struct cc_media_cap_t_ {
cc_media_cap_name name; /* media channel name designator */
sdp_media_e type; /* media type: audio, video etc */
boolean enabled; /* this media is enabled or disabled */
boolean support_security; /* security is supported */
sdp_direction_e support_direction;/* supported direction */
cc_media_stream_id_t pc_stream; /* The media stream in the PC */
cc_media_track_id_t pc_track; /* The track ID in the media stream */
} cc_media_cap_t;
typedef struct cc_media_cap_table_t_ {
uint32_t id;
cc_media_cap_t cap[CC_MAX_MEDIA_CAP];/* capability table. */
} cc_media_cap_table_t;
typedef struct cc_media_track_t_ {
unsigned int media_stream_track_id;
boolean video;
} cc_media_track_t;
typedef struct cc_media_remote_track_table_t_ {
uint32_t num_tracks;
uint32_t media_stream_id;
cc_media_track_t track[CC_MAX_TRACKS];
} cc_media_remote_track_table_t;
typedef struct cc_media_remote_stream_table_t_ {
cc_media_remote_track_table_t streams[CC_MAX_STREAMS];
} cc_media_remote_stream_table_t;
typedef struct cc_media_local_track_table_t_ {
uint32_t media_stream_id;
cc_media_track_t track[CC_MAX_TRACKS];
} cc_media_local_track_table_t;
typedef struct cc_feature_data_generic_t {
boolean subref_flag;
uint32_t eventid;
} cc_feature_data_generic_t;
typedef struct cc_feature_data_cnf_t_ {
cc_causes_t cause;
callid_t call_id;
callid_t target_call_id;
} cc_feature_data_cnf_t;
typedef struct cc_feature_data_cancel_t_ {
cc_rcc_skey_evt_type_e cause;
callid_t call_id;
callid_t target_call_id;
} cc_feature_data_cancel_t;
typedef struct cc_feature_data_pc_t_ {
char pc_handle[PC_HANDLE_SIZE];
} cc_feature_data_pc_t;
typedef struct cc_feature_data_track_t_ {
cc_media_stream_id_t stream_id;
cc_media_track_id_t track_id;
cc_media_type_t media_type;
} cc_feature_data_track_t;
typedef struct cc_feature_candidate_t_ {
uint16_t level;
char candidate[CANDIDATE_SIZE];
char mid[MID_SIZE];
} cc_feature_candidate_t;
typedef struct cc_feature_session_t_ {
unsigned int sessionid;
cc_boolean has_constraints;
} cc_feature_session_t;
typedef union cc_feature_data_t {
cc_feature_data_newcall_t newcall;
cc_feature_data_xfer_t xfer;
cc_feature_data_ind_t indication;
cc_feature_data_endcall_t endcall;
cc_feature_data_hold_t hold;
cc_feature_data_hold_reversion_t hold_reversion;
cc_feature_data_resume_t resume;
cc_feature_data_redirect_t redirect;
cc_feature_data_subscribe_t subscribe;
cc_feature_data_notify_t notify;
cc_feature_data_update_t update;
cc_feature_data_b2bcnf_t b2bconf;
cc_feature_data_call_info_t call_info;
cc_feature_data_record_t record;
cc_feature_data_select_t select;
cc_feature_data_b2b_join_t b2bjoin;
cc_feature_data_generic_t generic;
cc_feature_data_cnf_t cnf;
cc_feature_data_b2bcnf_t cancel;
cc_media_cap_t caps;
cc_feature_data_pc_t pc;
cc_feature_data_track_t track;
cc_feature_candidate_t candidate;
cc_feature_session_t session;
} cc_feature_data_t;
typedef struct cc_setup_t_ {
cc_msgs_t msg_id;
cc_srcs_t src_id;
callid_t call_id;
line_t line;
cc_alerting_type alert_info;
vcm_ring_mode_t alerting_ring;
vcm_tones_t alerting_tone;
cc_caller_id_t caller_id;
cc_redirect_t redirect;
cc_call_info_t call_info;
boolean replaces;
string_t recv_info_list;
cc_msgbody_info_t msg_body;
} cc_setup_t;
typedef struct cc_setup_ack_t_ {
cc_msgs_t msg_id;
cc_srcs_t src_id;
callid_t call_id;
line_t line;
cc_caller_id_t caller_id;
cc_msgbody_info_t msg_body;
} cc_setup_ack_t;
typedef struct cc_proceeding_t_ {
cc_msgs_t msg_id;
cc_srcs_t src_id;
callid_t call_id;
line_t line;
cc_caller_id_t caller_id;
} cc_proceeding_t;
typedef struct cc_alerting_t_ {
cc_msgs_t msg_id;
cc_srcs_t src_id;
callid_t call_id;
line_t line;
cc_caller_id_t caller_id;
cc_msgbody_info_t msg_body;
boolean inband;
} cc_alerting_t;
typedef struct cc_connected_t_ {
cc_msgs_t msg_id;
cc_srcs_t src_id;
callid_t call_id;
line_t line;
cc_caller_id_t caller_id;
string_t recv_info_list;
cc_msgbody_info_t msg_body;
} cc_connected_t;
typedef struct cc_connected_ack_t_ {
cc_msgs_t msg_id;
cc_srcs_t src_id;
callid_t call_id;
line_t line;
cc_caller_id_t caller_id;
cc_msgbody_info_t msg_body;
} cc_connected_ack_t;
typedef struct cc_release_t_ {
cc_msgs_t msg_id;
cc_srcs_t src_id;
callid_t call_id;
line_t line;
cc_causes_t cause;
char dialstring[CC_MAX_DIALSTRING_LEN];
cc_kfact_t kfactor;
} cc_release_t;
typedef struct cc_release_complete_t_ {
cc_msgs_t msg_id;
cc_srcs_t src_id;
callid_t call_id;
line_t line;
cc_causes_t cause;
cc_kfact_t kfactor;
} cc_release_complete_t;
typedef struct cc_feature_t_ {
cc_msgs_t msg_id;
cc_srcs_t src_id;
callid_t call_id;
line_t line;
cc_features_t feature_id;
cc_feature_data_t data;
boolean data_valid;
cc_jsep_action_t action;
char sdp[SDP_SIZE];
} cc_feature_t;
typedef struct cc_feature_ack_t_ {
cc_msgs_t msg_id;
cc_srcs_t src_id;
callid_t call_id;
line_t line;
cc_features_t feature_id;
cc_feature_data_t data;
boolean data_valid;
cc_causes_t cause;
} cc_feature_ack_t;
typedef struct cc_offhook_t_ {
cc_msgs_t msg_id;
cc_srcs_t src_id;
callid_t call_id;
line_t line;
char global_call_id[CC_GCID_LEN];
callid_t prim_call_id; /* For internal new call event
* refer primary call's call_id
*/
cc_hold_resume_reason_e hold_resume_reason; /* Reason for new consult call */
monitor_mode_t monitor_mode;
cfwdall_mode_t cfwdall_mode;
} cc_offhook_t;
typedef struct cc_onhook_t_ {
cc_msgs_t msg_id;
cc_srcs_t src_id;
callid_t call_id;
line_t line;
boolean softkey;
callid_t prim_call_id; /* For internal new call event
* refer primary call's call_id
*/
cc_hold_resume_reason_e hold_resume_reason; /* Reason for new consult call */
cc_onhook_reason_e active_list; /* onhook is because of active call
* press
*/
} cc_onhook_t;
typedef struct cc_line_t_ {
cc_msgs_t msg_id;
cc_srcs_t src_id;
callid_t call_id;
line_t line;
} cc_line_t;
typedef struct cc_digit_begin_t_ {
cc_msgs_t msg_id;
cc_srcs_t src_id;
callid_t call_id;
line_t line;
int digit;
} cc_digit_begin_t;
typedef struct cc_digit_end_t_ {
cc_msgs_t msg_id;
cc_srcs_t src_id;
callid_t call_id;
line_t line;
int digit;
} cc_digit_end_t;
typedef struct cc_dialstring_t_ {
cc_msgs_t msg_id;
cc_srcs_t src_id;
callid_t call_id;
line_t line;
char dialstring[CC_MAX_DIALSTRING_LEN];
char g_call_id[CC_GCID_LEN];
monitor_mode_t monitor_mode;
} cc_dialstring_t;
// mostly overlap with sessionTypes.h:cc_mwi_status_t
typedef struct cc_action_data_mwi_ {
boolean on;
int type;
int newCount;
int oldCount;
int hpNewCount;
int hpOldCount;
} cc_action_data_mwi_t;
typedef struct cc_mwi_t_ {
cc_msgs_t msg_id;
cc_srcs_t src_id;
callid_t call_id;
line_t line;
cc_action_data_mwi_t msgSummary;
} cc_mwi_t;
typedef struct cc_options_sdp_req_t_ {
cc_msgs_t msg_id;
cc_srcs_t src_id;
callid_t call_id;
line_t line;
void * pMessage;
} cc_options_sdp_req_t;
typedef struct cc_options_sdp_ack_t_ {
cc_msgs_t msg_id;
cc_srcs_t src_id;
callid_t call_id;
line_t line;
void * pMessage;
cc_msgbody_info_t msg_body;
} cc_options_sdp_ack_t;
typedef struct cc_audit_sdp_req_t_ {
cc_msgs_t msg_id;
cc_srcs_t src_id;
callid_t call_id;
line_t line;
boolean apply_ringout;
} cc_audit_sdp_req_t;
typedef struct cc_audit_sdp_ack_t_ {
cc_msgs_t msg_id;
cc_srcs_t src_id;
callid_t call_id;
line_t line;
cc_msgbody_info_t msg_body;
} cc_audit_sdp_ack_t;
typedef struct cc_feature_tmr_t_ {
callid_t call_id;
line_t line;
cc_features_t feature_id;
} cc_feature_tmr_t;
typedef struct cc_regmgr_t_ {
cc_msgs_t msg_id;
cc_srcs_t src_id;
int rsp_type;
cc_regmgr_rsp_e rsp_id;
boolean wait_flag;
} cc_regmgr_t;
// mostly overlap with sessionTypes.h:session_send_info_t
typedef struct cc_info_t {
cc_msgs_t msg_id;
cc_srcs_t not_used; // why not share a common struct?? why cast everything to cc_setup_t??
callid_t call_id;
line_t line;
string_t info_package;
string_t content_type;
string_t message_body;
} cc_info_t;
typedef struct cc_msg_t_ {
union {
cc_setup_t setup;
cc_setup_ack_t setup_ack;
cc_proceeding_t proceeding;
cc_alerting_t alerting;
cc_connected_t connected;
cc_connected_ack_t connected_ack;
cc_release_t release;
cc_release_complete_t release_complete;
cc_feature_t feature;
cc_feature_ack_t feature_ack;
cc_offhook_t offhook;
cc_onhook_t onhook;
cc_line_t line;
cc_digit_begin_t digit_begin;
cc_digit_end_t digit_end;
cc_dialstring_t dialstring;
cc_mwi_t mwi;
cc_options_sdp_ack_t options_ack;
cc_audit_sdp_ack_t audit_ack;
cc_info_t info;
} msg;
} cc_msg_t;
callid_t cc_get_new_call_id(void);
const char *cc_msg_name(cc_msgs_t id);
const char *cc_src_name(cc_srcs_t id);
const char *cc_cause_name(cc_causes_t id);
const char *cc_feature_name(cc_features_t id);
void cc_int_setup(cc_srcs_t src_id, cc_srcs_t dst_id, callid_t call_id,
line_t line, cc_caller_id_t *caller_id,
cc_alerting_type alert_info, vcm_ring_mode_t alerting_ring,
vcm_tones_t alerting_tone, cc_redirect_t *redirect,
cc_call_info_t *call_info_p, boolean replaces,
string_t recv_info_list, cc_msgbody_info_t *msg_body);
void cc_int_setup_ack(cc_srcs_t src_id, cc_srcs_t dst_id, callid_t call_id,
line_t line, cc_caller_id_t *caller_id,
cc_msgbody_info_t *msg_body);
void cc_int_proceeding(cc_srcs_t src_id, cc_srcs_t dst_id, callid_t call_id,
line_t line, cc_caller_id_t *caller_id);
void cc_int_alerting(cc_srcs_t src_id, cc_srcs_t dst_id, callid_t call_id,
line_t line, cc_caller_id_t *caller_id,
cc_msgbody_info_t *msg_body, boolean inband);
void cc_int_connected(cc_srcs_t src_id, cc_srcs_t dst_id, callid_t call_id,
line_t line, cc_caller_id_t *caller_id,
string_t recv_info_list, cc_msgbody_info_t *msg_body);
void cc_int_connected_ack(cc_srcs_t src_id, cc_srcs_t dst_id, callid_t call_id,
line_t line, cc_caller_id_t *caller_id,
cc_msgbody_info_t *msg_body);
void cc_int_release(cc_srcs_t src_id, cc_srcs_t dst_id, callid_t call_id,
line_t line, cc_causes_t cause, const char *dialstring,
cc_kfact_t *kfactor);
void cc_int_release_complete(cc_srcs_t src_id, cc_srcs_t dst_id,
callid_t call_id, line_t line, cc_causes_t cause,
cc_kfact_t *kfactor);
void cc_int_feature2(cc_msgs_t msg_id, cc_srcs_t src_id, cc_srcs_t dst_id,
callid_t call_id, line_t line, cc_features_t feature_id,
cc_feature_data_t *data);
void cc_createoffer(cc_srcs_t src_id, cc_srcs_t dst_id, callid_t call_id,
line_t line, cc_features_t feature_id, cc_feature_data_t *data);
void cc_createanswer (cc_srcs_t src_id, cc_srcs_t dst_id, callid_t call_id,
line_t line, cc_features_t feature_id, string_t sdp, cc_feature_data_t *data);
void cc_setlocaldesc (cc_srcs_t src_id, cc_srcs_t dst_id, callid_t call_id, line_t line,
cc_features_t feature_id, cc_jsep_action_t action, string_t sdp, cc_feature_data_t *data);
void cc_setremotedesc (cc_srcs_t src_id, cc_srcs_t dst_id, callid_t call_id, line_t line,
cc_features_t feature_id, cc_jsep_action_t action, string_t sdp, cc_feature_data_t *data);
void cc_localdesc (cc_srcs_t src_id, cc_srcs_t dst_id, callid_t call_id, line_t line,
cc_features_t feature_id, cc_feature_data_t *data);
void cc_remotedesc (cc_srcs_t src_id, cc_srcs_t dst_id, callid_t call_id, line_t line,
cc_features_t feature_id, cc_feature_data_t *data);
void cc_int_feature_ack(cc_srcs_t src_id, cc_srcs_t dst_id, callid_t call_id,
line_t line, cc_features_t feature_id,
cc_feature_data_t *data, cc_causes_t cause);
void cc_int_offhook(cc_srcs_t src_id, cc_srcs_t dst_id, callid_t prim_call_id,
cc_hold_resume_reason_e consult_reason, callid_t call_id,
line_t line, char *global_call_id,
monitor_mode_t monitor_mode,
cfwdall_mode_t cfwdall_mode);
void cc_int_onhook(cc_srcs_t src_id, cc_srcs_t dst_id, callid_t prim_call_id,
cc_hold_resume_reason_e consult_reason, callid_t call_id,
line_t line, boolean softkey, cc_onhook_reason_e active_list);
void cc_int_line(cc_srcs_t src_id, cc_srcs_t dst_id, callid_t call_id,
line_t line);
void cc_int_digit_begin(cc_srcs_t src_id, cc_srcs_t dst_id, callid_t call_id,
line_t line, int digit);
void cc_int_digit_end(cc_srcs_t src_id, cc_srcs_t dst_id, callid_t call_id,
line_t line, int digit);
void cc_int_dialstring(cc_srcs_t src_id, cc_srcs_t dst_id, callid_t call_id,
line_t line, const char *dialstring,
const char *g_call_id, monitor_mode_t monitor_mode);
void cc_int_mwi(cc_srcs_t src_id, cc_srcs_t dst_id, callid_t call_id,
line_t line, boolean on, int type, int newCount,
int oldCount, int hpNewCount, int hpOldCount);
void cc_int_options_sdp_req(cc_srcs_t src_id, cc_srcs_t dst_id,
callid_t call_id, line_t line, void *pMessage);
void cc_int_options_sdp_ack(cc_srcs_t src_id, cc_srcs_t dst_id,
callid_t call_id, line_t line, void *pMessage,
cc_msgbody_info_t *msg_body);
void cc_int_audit_sdp_req(cc_srcs_t src_id, cc_srcs_t dst_id, callid_t call_id,
line_t line, boolean apply_ringout);
void cc_int_audit_sdp_ack(cc_srcs_t src_id, cc_srcs_t dst_id, callid_t call_id,
line_t line, cc_msgbody_info_t *msg_body);
void cc_int_info(cc_srcs_t src_id, cc_srcs_t dst_id, callid_t call_id,
line_t line, string_t info_package, string_t content_type,
string_t message_body);
void cc_int_fail_fallback(cc_srcs_t src_id, cc_srcs_t dst_id, int rsp_type,
cc_regmgr_rsp_e rsp_id, boolean waited);
#define cc_fail_fallback_sip(a, b, c, d) cc_int_fail_fallback(a, CC_SRC_SIP, b, c, d)
#define cc_fail_fallback_gsm(a, b, c) cc_int_fail_fallback(a, CC_SRC_GSM, b, c, FALSE)
#define cc_setup(a, b, c, d, e, f, g, h, i, j, k, l) cc_int_setup(a, CC_SRC_GSM, b, c, d, e, f, g, h, i, j, k, l)
#define cc_setup_ack(a, b, c, d, e) \
cc_int_setup_ack(a, CC_SRC_GSM, b, c, d, e)
#define cc_proceeding(a, b, c, d) cc_int_proceeding(a, CC_SRC_GSM, b, c, d)
#define cc_alerting(a, b, c, d, e, f) \
cc_int_alerting(a, CC_SRC_GSM, b, c, d, e, f)
#define cc_connected(a, b, c, d, e, f) \
cc_int_connected(a, CC_SRC_GSM, b, c, d, e, f)
#define cc_connected_ack(a, b, c, d, e) \
cc_int_connected_ack(a, CC_SRC_GSM, b, c, d, e)
#define cc_release(a, b, c, d, e, f) cc_int_release(a, CC_SRC_GSM, b, c, d, e, f)
#define cc_release_complete(a, b, c, d, e) \
cc_int_release_complete(a, CC_SRC_GSM, b, c, d, e)
#define cc_feature(a, b, c, d, e) cc_int_feature2(CC_MSG_FEATURE, a, CC_SRC_GSM, b, c, d, e)
#define cc_int_feature(a, b, c, d, e, f) cc_int_feature2(CC_MSG_FEATURE, a, b, c, d, e, f)
#define cc_feature_ack(a, b, c, d, e, f) \
cc_int_feature_ack(a, CC_SRC_GSM, b, c, d, e, f)
#define cc_offhook(a, b, c) cc_int_offhook(a, CC_SRC_GSM, CC_NO_CALL_ID, CC_REASON_NONE, b, c, NULL, CC_MONITOR_NONE,CFWDALL_NONE)
#define cc_offhook_ext(a, b, c, d, e) cc_int_offhook(a, CC_SRC_GSM, CC_NO_CALL_ID, CC_REASON_NONE, b, c, d, e,CFWDALL_NONE)
#define cc_onhook(a, b, c, d) cc_int_onhook(a, CC_SRC_GSM, CC_NO_CALL_ID, CC_REASON_NONE, b, c, d, CC_REASON_NULL)
#define cc_onhook_ext(a, b, c, d, e) cc_int_onhook(a, CC_SRC_GSM, CC_NO_CALL_ID, CC_REASON_NONE, b, c, d, e)
#define cc_line(a, b, c) cc_int_line(a, CC_SRC_GSM, b, c)
#define cc_digit_begin(a, b, c, d) cc_int_digit_begin(a, CC_SRC_GSM, b, c, d)
#define cc_dialstring(a, b, c, d) cc_int_dialstring(a, CC_SRC_GSM, b, c, d, NULL, CC_MONITOR_NONE)
#define cc_dialstring_ext(a, b, c, d, e, f) cc_int_dialstring(a, CC_SRC_GSM, b, c, d, e, f)
#define cc_mwi(a, b, c, d, e, f, g, h, i) cc_int_mwi(a, CC_SRC_GSM, b, c, d, e, f, g, h, i )
#define cc_options_sdp_req(a, b, c, d) cc_int_options_sdp_req(a, CC_SRC_GSM, b, c, d)
#define cc_audit_sdp_req(a, b, c, d) cc_int_audit_sdp_req(a, CC_SRC_GSM, b, c, d)
typedef enum cc_types_t_ {
CC_TYPE_INVALID,
CC_TYPE_CCM,
CC_TYPE_OTHER
} cc_types_t;
typedef enum cc_states_t_ {
CC_STATE_MIN = -1,
CC_STATE_OFFHOOK,
CC_STATE_DIALING,
CC_STATE_DIALING_COMPLETED,
CC_STATE_CALL_SENT,
CC_STATE_FAR_END_PROCEEDING,
CC_STATE_FAR_END_ALERTING,
CC_STATE_CALL_RECEIVED,
CC_STATE_ALERTING,
CC_STATE_ANSWERED,
CC_STATE_CONNECTED,
CC_STATE_HOLD,
CC_STATE_RESUME,
CC_STATE_ONHOOK,
CC_STATE_CALL_FAILED,
CC_STATE_HOLD_REVERT,
CC_STATE_UNKNOWN,
CC_STATE_MAX
} cc_states_t;
/* Update cc_action_names structure in lsm.c with the
* corresponding change for the following structure.
*/
typedef enum cc_actions_t_ {
CC_ACTION_MIN = -1,
CC_ACTION_SPEAKER,
CC_ACTION_DIAL_MODE,
CC_ACTION_MWI,
CC_ACTION_MWI_LAMP_ONLY,
CC_ACTION_OPEN_RCV,
CC_ACTION_UPDATE_UI,
CC_ACTION_MEDIA,
CC_ACTION_RINGER,
CC_ACTION_SET_LINE_RINGER,
CC_ACTION_PLAY_TONE,
CC_ACTION_STOP_TONE,
CC_ACTION_STOP_MEDIA,
CC_ACTION_START_RCV,
CC_ACTION_ANSWER_PENDING,
CC_ACTION_PLAY_BLF_ALERTING_TONE,
CC_ACTION_MAX
} cc_actions_t;
typedef enum cc_services_t_ {
CC_SERVICE_MIN = -1,
CC_SERVICE_MAX
} cc_services_t;
typedef enum cc_update_ui_actions_t_ {
CC_UPDATE_MIN = -1,
CC_UPDATE_CONF_ACTIVE,
CC_UPDATE_CONF_RELEASE,
CC_UPDATE_XFER_PRIMARY,
CC_UPDATE_CALLER_INFO,
CC_UPDATE_SECURITY_STATUS,
CC_UPDATE_SET_CALL_STATUS,
CC_UPDATE_CLEAR_CALL_STATUS,
CC_UPDATE_SET_NOTIFICATION,
CC_UPDATE_CLEAR_NOTIFICATION,
CC_UPDATE_CALL_PRESERVATION,
CC_UPDATE_CALL_CONNECTED,
CC_UPDATE_MAX
} cc_update_ui_actions_t;
typedef struct cc_state_data_offhook_t_ {
cc_caller_id_t caller_id;
int dial_mode;
} cc_state_data_offhook_t;
/*
* This structure is passed in CC_STATE_DIALING to lsm to indicate
* wether a dialtone needs to be played or not
* should the stutter dial tone be suppressed or not
*/
typedef struct cc_state_data_dialing_t_ {
boolean play_dt;
boolean suppress_stutter;
} cc_state_data_dialing_t;
typedef struct cc_state_data_dialing_completedt_ {
cc_caller_id_t caller_id;
} cc_state_data_dialing_completed_t;
typedef struct cc_state_data_call_sent_t_ {
cc_caller_id_t caller_id;
} cc_state_data_call_sent_t;
typedef struct cc_state_data_far_end_proceeding_t_ {
cc_caller_id_t caller_id;
} cc_state_data_far_end_proceeding_t;
typedef struct cc_state_data_far_end_alerting_t_ {
cc_caller_id_t caller_id;
} cc_state_data_far_end_alerting_t;
typedef struct cc_state_data_call_received_t_ {
cc_caller_id_t caller_id;
} cc_state_data_call_received_t;
typedef struct cc_state_data_alerting_t_ {
cc_caller_id_t caller_id;
} cc_state_data_alerting_t;
typedef struct cc_state_data_answered_t_ {
cc_caller_id_t caller_id;
} cc_state_data_answered_t;
typedef struct cc_state_data_connected_t_ {
cc_caller_id_t caller_id;
} cc_state_data_connected_t;
typedef struct cc_state_data_hold_t_ {
cc_caller_id_t caller_id;
boolean local;
cc_hold_resume_reason_e reason;
} cc_state_data_hold_t;
typedef struct cc_state_data_resume_t_ {
cc_caller_id_t caller_id;
boolean local;
} cc_state_data_resume_t;
typedef struct cc_state_data_onhook_t_ {
cc_caller_id_t caller_id;
boolean local;
cc_causes_t cause;
} cc_state_data_onhook_t;
typedef struct cc_state_data_call_failed_t_ {
cc_caller_id_t caller_id;
cc_causes_t cause;
} cc_state_data_call_failed_t;
typedef union cc_state_data_t_ {
cc_state_data_offhook_t offhook;
cc_state_data_dialing_t dialing;
cc_state_data_dialing_completed_t dialing_completed;
cc_state_data_call_sent_t call_sent;
cc_state_data_far_end_proceeding_t far_end_proceeding;
cc_state_data_far_end_alerting_t far_end_alerting;
cc_state_data_call_received_t call_received;
cc_state_data_alerting_t alerting;
cc_state_data_answered_t answered;
cc_state_data_connected_t connected;
cc_state_data_hold_t hold;
cc_state_data_resume_t resume;
cc_state_data_onhook_t onhook;
cc_state_data_call_failed_t call_failed;
} cc_state_data_t;
typedef struct cc_action_data_digit_begin_ {
int tone;
} cc_action_data_digit_begin_t;
typedef struct cc_action_data_tone_ {
vcm_tones_t tone;
} cc_action_data_tone_t;
typedef struct cc_action_data_speaker_ {
boolean on;
} cc_action_data_speaker_t;
typedef struct cc_action_data_dial_mode_ {
int mode;
int digit_cnt;
} cc_action_data_dial_mode_t;
/*
typedef struct cc_action_data_mwi_ {
boolean on;
int32_t type;
int32_t newCount;
int32_t oldCount;
int32_t hpNewCount;
int32_t hpOldCount;
} cc_action_data_mwi_t;
*/
typedef struct cc_action_data_open_rcv_ {
boolean is_multicast;
cpr_ip_addr_t listen_ip;
uint16_t port;
boolean rcv_chan;
boolean keep;
media_refid_t media_refid; /* the ID of the media to reference to */
sdp_media_e media_type;
} cc_action_data_open_rcv_t;
typedef struct cc_set_call_status_data_ {
char *phrase_str_p;
int timeout;
callid_t call_id;
line_t line;
} cc_set_call_status_data_t;
typedef struct cc_clear_call_status_data_ {
callid_t call_id;
line_t line;
} cc_clear_call_status_data_t;
// mostly overlap with sessionTypes.h:cc_notification_data_t
typedef struct cc_set_notification_data_ {
char *phrase_str_p;
unsigned long timeout;
unsigned long priority;
} cc_set_notification_data_t;
typedef union cc_update_ui_data_ {
cc_feature_data_call_info_t caller_info;
cc_set_call_status_data_t set_call_status_parms;
cc_clear_call_status_data_t clear_call_status_parms;
cc_set_notification_data_t set_notification_parms;
string_t security_status;
} cc_update_ui_data_t;
typedef struct cc_action_data_update_ui_ {
cc_update_ui_actions_t action;
cc_update_ui_data_t data;
} cc_action_data_update_ui_t;
typedef struct cc_action_data_ringer_ {
boolean on;
} cc_action_data_ringer_t;
typedef struct cc_action_data_stop_media_ {
media_refid_t media_refid; /* the ID of the media to reference to */
} cc_action_data_stop_media_t;
typedef union cc_action_data_t_ {
cc_action_data_digit_begin_t digit_begin;
cc_action_data_tone_t tone;
cc_action_data_speaker_t speaker;
cc_action_data_dial_mode_t dial_mode;
cc_action_data_mwi_t mwi;
cc_action_data_open_rcv_t open_rcv;
cc_action_data_update_ui_t update_ui;
cc_action_data_ringer_t ringer;
cc_action_data_stop_media_t stop_media;
} cc_action_data_t;
typedef struct cc_service_data_get_facility_by_line_ {
line_t line;
} cc_service_data_get_facility_by_line_t;
typedef union cc_service_data_t_ {
cc_service_data_get_facility_by_line_t get_facility_by_line;
} cc_service_data_t;
typedef enum {
MEDIA_INTERFACE_UPDATE_NOT_REQUIRED,
MEDIA_INTERFACE_UPDATE_STARTED,
MEDIA_INTERFACE_UPDATE_IN_PROCESS
} dock_undock_event_t;
extern dock_undock_event_t g_dock_undock_event;
void cc_call_state(callid_t call_id, line_t line, cc_states_t state,
cc_state_data_t *data);
cc_rcs_t cc_call_action(callid_t call_id, line_t line, cc_actions_t action,
cc_action_data_t *data);
cc_rcs_t cc_call_service(callid_t call_id, line_t line, cc_services_t service,
cc_service_data_t *data);
void cc_call_attribute(callid_t call_id, line_t line, call_attr_t attr);
void cc_init(void);
void cc_free_msg_body_parts(cc_msgbody_info_t *msg_body);
void cc_free_msg_data(cc_msg_t *msg);
void cc_initialize_msg_body_parts_info(cc_msgbody_info_t *msg_body);
void cc_mv_msg_body_parts(cc_msgbody_info_t *dst_msg,
cc_msgbody_info_t *src_msg);
cc_rcs_t cc_cp_msg_body_parts(cc_msgbody_info_t *dst_msg,
cc_msgbody_info_t *src_msg);
void cc_mv_caller_id(cc_caller_id_t *dst_caller, cc_caller_id_t *src_caller);
//function that will be invoked by modules external to gsm:
int cc_is_cnf_call(callid_t call_id);
cc_transfer_mode_e cc_is_xfr_call(callid_t call_id);
extern cprBuffer_t cc_get_msg_buf(int min_size);
extern const char *cc_feature_name(cc_features_t id);
extern const char *cc_msg_name(cc_msgs_t id);
extern const char *cc_cause_name(cc_causes_t id);
extern void cc_media_update_native_video_support(boolean val);
extern void cc_media_update_video_cap(boolean val);
extern void cc_media_update_native_video_txcap(boolean val);
extern cc_boolean cc_media_isTxCapEnabled();
extern cc_boolean cc_media_isVideoCapEnabled();
extern void cc_media_setVideoAutoTxPref(cc_boolean txPref);
extern cc_boolean cc_media_getVideoAutoTxPref();
#endif