| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345 |
- /*************************************************************************
- 【文件名】 StableCoreInc.h
- 【功能模块和目的】 StableCore系统公共头文件
- 【开发者及日期】 郑石诺 2015/03/18
- 【版本】 V1.0.0
- 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
- 【更改记录】
- *************************************************************************/
- #pragma once
- #include "../Public/GlobalDef/CommonTypeDef.h"
- #include "../Public/GlobalDef/DevInfoInc.h"
- #include "../Public/GlobalDef/DevLinkInc.h"
- #include "Logger.h"
- #include "TtsInterface.h"
- #include "NetCtrlInterface.h"
- #include "NetRepInterface.h"
- #include "PduEntity.h"
- #include "PduDataFormat.h"
- #include "../3rd/ehang/Inc/srllib.h"
- #include "../3rd/ehang/Inc/gclib.h"
- #include "../3rd/ehang/Inc/dtilib.h"
- #include "../3rd/ehang/Inc/ipmlib.h"
- #include "../3rd/ehang/Inc/faxlib.h"
- #ifndef LOGGER
- #define LOGGER ILogger::getInstance().log
- #endif
- #define STR_ERR_CORE_INIT_CFG_LOAD _T("{Core}: 加载配置信息失败")
- #define STR_ERR_CORE_INIT_MC_OPEN _T("{Core}: MC打开失败")
- #define STR_ERR_CORE_INIT_NET_SETUP _T("{Core}: 创建网络服务器端失败")
- #define NET_MAX_CLIENT 4
- #define SIP_URI_LEN 128
- #define IP_PORT_LEN 32
- #define DEVICE_BUF_MIN_SIZE 32
- #define DEVICE_BUF_MAX_SIZE 1024
- #define DEVICE_ALARM_THRESHOLD 2
- #define DEVICE_MC_NO -1
- #define DEVICE_NODE_NO_ANY -1
- #define DEVICE_BRD_NO_ANY -1
- #define DEVICE_RES_NO_ANY -1
- #define DEVICE_SPAN_CAPACITY 30
- #define DEVICE_LOG_PATH _T("./log_dev/")
- #define DEVICE_KEEP_ALIVE 2
- #define DEVICE_WAIT_TIME 2000
- #define DEVICE_SIP_RETRY_INTERVAL 10
- #define DEV_HANDLE_INVALID NULL
- #define DEV_RES_NO_TYPE CHAR
- #define DEV_RES_CH_TYPE SHORT
- #define DEV_RES_HANDLE LINEDEV
- #define DEV_RES_CALL_ID CRN
- #define DEV_MEDIA_PORT_BEGIN 10000 //起始端口号
- #define DEV_PER_CH_PORT_NUM 4 //每个通道占用端口数
- #define DEV_RES_ID_NODE_SEED 1000000
- #define DEV_RES_ID_BOARD_SEED 100000
- #define DEV_RES_ID_SPAN_SEED 30
- #define DEV_RES_ID_TYPE_SEED 10
- #define MEETING_ID_INVALID -9999
- #define MEETING_RESULT_SUCCESS (LPCTSTR)NULL + 1
- #define MEETING_RESULT_FAILED NULL
- #define CHANNEL_TONE_DIAL 0
- #define CHANNEL_TONE_RINGBACK 1
- #define CHANNEL_TONE_BUSY 2
- #define CHANNEL_TONE_HOLD 3
- #define CHANNEL_TONE_NULL -1
- #define TONE_NAME_DIAL _T("Tone/dialtone.pcm")
- #define TONE_NAME_RINGBACK _T("Tone/ringtone.pcm")
- #define TONE_NAME_BUSY _T("Tone/busytone.pcm")
- #define TONE_NAME_HOLD _T("Prompt/song.pcm")
- #define RECORD_MODE_NORMAL 1
- #define RECORD_MODE_MEETING 2
- #define RECORD_MODE_LEAVEWORD 3
- #define RECORD_TASK_ID_LEAVEWORD 0
- #define RECORD_TASK_ID_NORMAL 100
- #define CLIENT_REQ_FAX_SEND 0
- #define CLIENT_REQ_FAX_RECV 1
- #define CLIENT_REQ_MUTE_ON 0
- #define CLIENT_REQ_MUTE_OFF 1
- #define SESSION_INVALID_CALL 0
- #define SESSION_INVALID_SUB_CALL 0
- #define CONST_ERR_PLAY_AUDIO ((LPCTSTR)-1)
- // 设备资源ID描述
- typedef struct tagDEV_RES_ID
- {
- public:
- tagDEV_RES_ID(void) : ResType(DEV_RES_TYPE_UNKNOWN), NodeNo(DEVICE_RES_NO_ANY), BoardNo(DEVICE_RES_NO_ANY), SpanNo(DEVICE_RES_NO_ANY), ChanNo(DEVICE_RES_NO_ANY)
- {
- }
- tagDEV_RES_ID(DEV_RES_NO_TYPE Type, DEV_RES_NO_TYPE Node, DEV_RES_NO_TYPE Board, DEV_RES_NO_TYPE Span, DEV_RES_CH_TYPE Channel)
- : ResType(Type), NodeNo(Node), BoardNo(Board), SpanNo(Span), ChanNo(Channel)
- {
- }
- tagDEV_RES_ID(const tagDEV_RES_ID& Another)
- {
- ResType = Another.ResType;
- NodeNo = Another.NodeNo;
- BoardNo = Another.BoardNo;
- SpanNo = Another.SpanNo;
- ChanNo = Another.ChanNo;
- }
- tagDEV_RES_ID& operator=(const tagDEV_RES_ID& Another)
- {
- ResType = Another.ResType;
- NodeNo = Another.NodeNo;
- BoardNo = Another.BoardNo;
- SpanNo = Another.SpanNo;
- ChanNo = Another.ChanNo;
- return *this;
- }
- bool operator==(const tagDEV_RES_ID& Another)
- {
- return (ResType == Another.ResType && NodeNo == Another.NodeNo && BoardNo == Another.BoardNo && SpanNo == Another.SpanNo && ChanNo == Another.ChanNo);
- }
- operator long(void) const
- {
- if(SpanNo > 0)
- return DEV_RES_ID_NODE_SEED * (NodeNo + 1) + DEV_RES_ID_BOARD_SEED * BoardNo + (DEV_RES_ID_SPAN_SEED * SpanNo + ChanNo) * DEV_RES_ID_TYPE_SEED + ResType;
- else
- return DEV_RES_ID_NODE_SEED * (NodeNo + 1) + DEV_RES_ID_BOARD_SEED * BoardNo + ChanNo * DEV_RES_ID_TYPE_SEED + ResType;
- }
- int toIntId(void) const
- {
- if(SpanNo > 0)
- return DEV_RES_ID_NODE_SEED * (NodeNo + 1) + DEV_RES_ID_BOARD_SEED * BoardNo + (DEV_RES_ID_SPAN_SEED * SpanNo + ChanNo) * DEV_RES_ID_TYPE_SEED + ResType;
- else
- return DEV_RES_ID_NODE_SEED * (NodeNo + 1) + DEV_RES_ID_BOARD_SEED * BoardNo + ChanNo * DEV_RES_ID_TYPE_SEED + ResType;
- }
- void reset(void)
- {
- ResType = DEV_RES_TYPE_UNKNOWN;
- NodeNo = DEVICE_RES_NO_ANY;
- BoardNo = DEVICE_RES_NO_ANY;
- SpanNo = DEVICE_RES_NO_ANY;
- ChanNo = DEVICE_RES_NO_ANY;
- }
- bool isEmpty(void) const
- {
- return (ResType == DEV_RES_TYPE_UNKNOWN && NodeNo == DEVICE_RES_NO_ANY && BoardNo == DEVICE_RES_NO_ANY && SpanNo == DEVICE_RES_NO_ANY && ChanNo == DEVICE_RES_NO_ANY);
- }
- DEV_RES_NO_TYPE ResType;
- DEV_RES_NO_TYPE NodeNo;
- DEV_RES_NO_TYPE BoardNo;
- DEV_RES_NO_TYPE SpanNo;
- DEV_RES_CH_TYPE ChanNo;
- } DEV_RES_ID;
- #define CRDRID const DEV_RES_ID&
- static bool operator==(CRDRID OneId, CRDRID OtherId);
- bool operator==(CRDRID OneId, CRDRID OtherId)
- {
- return (OneId.ResType == OtherId.ResType && OneId.NodeNo == OtherId.NodeNo && OneId.BoardNo == OtherId.BoardNo
- && OneId.SpanNo == OtherId.SpanNo && OneId.ChanNo == OtherId.ChanNo);
- }
- typedef enum tagSC_SYS_MSG
- {
- SYS_MSG_RES_NEW = 3, // 资源新建
- SYS_MSG_RES_DEL = 4, // 资源移除
- SYS_MSG_RES_STATE = 5 // 资源状态更新
- } SC_SYS_MSG;
- // 设备资源状态
- typedef enum tagVIRTUAL_LINE_STATE
- {
- VIRTUAL_LINE_STATE_DISABLED = 0x00, // 不可用
- VIRTUAL_LINE_STATE_FREE = 0x01, // 空闲
- VIRTUAL_LINE_STATE_INIT = 0x02, // 摘机等待拨号
- VIRTUAL_LINE_STATE_DIALING = 0x03, // 拨号
- VIRTUAL_LINE_STATE_RING_BACK = 0x04, // 呼出振铃
- VIRTUAL_LINE_STATE_ALERTING = 0x05, // 来电振铃
- VIRTUAL_LINE_STATE_PROGRESSING = 0x06, // 通话进展
- VIRTUAL_LINE_STATE_TALKING = 0x07, // 通话中
- VIRTUAL_LINE_STATE_REMOVE = 0x08 // 注销分机 用于IP话机注销
- } VIRTUAL_LINE_STATE;
- // 线路在会话中的职责类别
- typedef enum tagCALL_PARTY_TYPE
- {
- CALL_PARTY_UNKNOWN = 0xFF, // 未知职责
- CALL_PARTY_HOST = 0, // 主控线路
- CALL_PARTY_PEER = 1, // 通话对端线路
- CALL_PARTY_LISTEN = 2, // 通话的监听线路
- CALL_PARTY_PENDING = 3, // 操作待处理线路
- CALL_PARTY_MEETING = 4, // 会议中的线路
- } CALL_PARTY_TYPE;
- // 动态呼叫的类型
- typedef enum tagPENDING_CALL_TYPE
- {
- PENDING_CALL_DIRECT = 0, // 直接呼叫
- PENDING_CALL_TRANSFER = 1, // 转移呼叫
- PENDING_CALL_MEETING = 2, // 会议呼叫
- PENDING_CALL_TRUNK = 3, // 直接呼叫外线
- PENDING_CALL_CONSULT = 4 // 协商呼叫
- } PENDING_CALL_TYPE;
- // 待处理会话的内容
- typedef struct tagPendingCallInfo
- {
- UINT nCallType; // 呼叫类型
- long nCall; // 会话ID
- UINT nHostLineStatus; // 主控线路初始状态
- int nSipAccountId; // SIP账户ID
- DEV_RES_ID nHostLine; // 主控线路
- DEV_RES_ID nAssoLine; // 对端线路
- CHAR szCallerNum[PHONE_NUM_LEN]; // 主叫号码
- CHAR szCalleeNum[PHONE_NUM_LEN]; // 被叫号码
- CHAR szPreCallerNum[PHONE_NUM_LEN]; // 主控线路原主叫号码
- CHAR szPreCalleeNum[PHONE_NUM_LEN]; // 主控线路原被叫号码
- } PendingCallInfo;
- // 语音资源任务类型
- typedef enum tagDEV_VOICE_JOB_TYPE
- {
- DEV_VOC_JOB_NONE = 0x00, // 无任务
- DEV_VOC_JOB_PLAY_TONE, // Tone音播放
- DEV_VOC_JOB_PLAY_FILE, // 语音文件播放
- DEV_VOC_JOB_PLAY_DTMF, // 放音收号
- DEV_VOC_JOB_GET_DTMF, // 收取DTMF
- DEV_VOC_JOB_GET_FUN_CODE, // 获取功能按键(内线分机专用)
- DEV_VOC_JOB_MEETING // 会议接入
- } DEV_VOICE_JOB_TYPE;
- // 模拟内线资源任务类型
- typedef enum tagDEV_LINE_CH_JOB_TYPE
- {
- DEV_LINE_CH_JOB_NONE = 0x00, // 无任务
- DEV_LINE_CH_JOB_PRE_DIAL, // 预拨号
- DEV_LINE_CH_JOB_OFF_HOOK, // 摘机
- } DEV_LINE_CH_JOB_TYPE;
- // 设备向上层发送的设备主动事件类型
- typedef enum tagDEV_CH_EVT_TYPE
- {
- DEV_CH_EVT_UNKONWN = 0x00, // 未知事件
- DEV_CH_EVT_FUN_CODE, // 收取功能键
- DEV_CH_EVT_PLAY_END, // 放音结束
- DEV_CH_EVT_OFF_HOOK, // 内线摘机
- DEV_CH_EVT_FAX_OK, // 传真成功
- DEV_CH_EVT_FAX_FAILED, // 传真失败
- DEV_CH_EVT_REC_END, // 录音完成
- DEV_CH_EVT_HOLD_ON, // 保持
- DEV_CH_EVT_TAKE_BACK, // 接回
- DEV_CH_EVT_MEETING_RESULT, // 会议结果
- DEV_CH_EVT_CALL_FAILD_CAUSE // 呼叫失败原因
- } DEV_CH_EVT_TYPE;
- // reinvite目的
- typedef enum tagReinvitePurpose
- {
- REINVITE_FOR_NULL = 0, // reinvite为未知目的
- REINVITE_FOR_HOLD = 1, // reinvite为保持
- REINVITE_FOR_TAKEBACK = 2, // reinvite为接回
- REINVITE_FOR_FAX = 3 // reinvite为传真
- } ReinvitePurpose;
- // 放音收号内容
- typedef struct tagPlayVoiceContent
- {
- PlayVoiceMode nModel; // 放音模式(1:放音收号,2:只放音,3:只收号,4:停止放音)
- CHAR szFileName[MAX_PATH]; // 放音文件名/信号音类型
- UINT nDtmfCount; // 收号位数
- UINT nDtmfPeriod; // DTMF收号间隔
- CHAR cDtmfEnd; // DTMF结束按键
- UINT nTts; // TTS类型
- int nTtsDigitMode; // TTS数字播报模式
- int nTtsSpeed; // TTS语速
- int nTtsVolume; // TTS音量
- } PlayVoiceContent;
- // 线路录音内容
- typedef struct tagRecordContent
- {
- UINT nModel; // 录音模式(1:均衡录音,2:会议录音,3:单通道录音,4:留言录音)
- DEV_RES_ID nPeerLine; // 均衡录音时对端的线路ID
- CHAR szFileName[MAX_PATH]; // 录音文件名
- UINT nPeriod; // 录音时长(0 - 不限制时长)
- CHAR cEnd; // 录音结束按键值(0 - 不接受按键停止)
- UINT nTaskId; // 任务ID
- } RecordContent;
- // 从呼叫控制类发送的线路状态事件
- typedef struct tagLineState
- {
- DEV_RES_ID nLineDevId; // 触发事件的线路ID
- long nSession; // 线路所属的主会话
- VIRTUAL_LINE_STATE nState; // 线路当前状态
- CHAR szCallerNum[PHONE_NUM_LEN]; // 主叫号码
- CHAR szCalleeNum[PHONE_NUM_LEN]; // 被叫号码
- } LineState;
- // 会议ID信息相关
- typedef struct tagMeetingInfo
- {
- int NodeNo;
- int BoardNo;
- int MeetingId;
- } MeetingInfo;
- #define WM_CORE_EVENT (WM_USER + 100)
- // Core事件类型
- typedef enum tagCORE_EVENT_TYPE
- {
- CORE_EVENT_DEV_CLOSE = 1, // 设备关闭
- CORE_EVENT_DEV_RES_NEW = 2, // 设备资源创建
- CORE_EVENT_DEV_RES_DEL = 3, // 设备资源销毁
- CORE_EVENT_DEV_RES_STATE = 4 // 设备资源状态更新
- } CORE_EVENT_TYPE;
- #define UI_ITEM_NAME_DEV _T("Dev")
- #define UI_ITEM_NAME_BOARD _T("Board")
- #define UI_ITEM_NAME_SPAN _T("Span")
- #define UI_ITEM_NAME_STATE _T("State")
- #define UI_ITEM_NAME_CALLER _T("Caller")
- #define UI_ITEM_NAME_CALLEE _T("Callee")
|