123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- #ifndef CHAN_PROTOCOL_H
- #define CHAN_PROTOCOL_H
- #pragma once
- #define ACM_SUGGEST_MAX_PKT_SIZE (10<<20)
- #define ACM_PROTOCOL_VERSION 2
- #define ACM_TYPE_PING 0x0000 //ping only, keep connection alive
- #define ACM_TYPE_SYNC 0x0001 //窗体同步
- #define ACM_TYPE_CMD 0x0002 //操作命令
- #define ACM_TYPE_PHT 0x0003 //拍照
- #define ACM_TYPE_SRN 0x0004 //抓屏
- #define ACM_TYPE_CTX 0x0005 //上下文
- #define ACM_TYPE_FLW 0x0006 //流程控制
- #define ACM_TYPE_INFO 0x0007 //坐席端基本信息
- #define ACM_TYPE_IM 0x0008 //交互框架控制
- #define ACM_TYPE_AGENTCTX 0x0009 //柜员上下文
- #define ACM_TYPE_MODE 0x000a //允许控制
- #define ACM_TYPE_CAMSWITCH 0x000b //摄像头切换
- #define ACM_TYPE_DEVICE 0x000c //设备管理
- #define ACM_TYPE_CALLTRANS 0x000d //呼叫转移
- #define ACM_TYPE_VIDEOFREQ 0x000e //视频帧频
- #define ACM_TYPE_AGENTVIDEOTYPE 0x000f //坐席视频类型,单/双向
- #define ACM_TYPE_H5_SYNC 0x0010 //H5窗体同步
- #define ACM_ERROR_NONE 0x01
- #define ACM_ERROR_CORRUPT 0x02
- #define ACM_ERROR_UNKNOWN 0x7f
- #define ACM_VIDEO_MODE_SQUARE 0 // 320x320
- #define ACM_VIDEO_MODE_QVGA 1 // 320x240
- #define ACM_VIDEO_MODE_VGA 2 // 640x480
- #define ACM_VIDEO_ENCODE_H264 0 // x264
- #define ACM_VIDEO_ENCODE_VP8 1 // google vp8
- #define ACM_VIDEO_FPS_BASELINE 0 // 8fps
- #define ACM_VIDEO_FPS_MAIN 1 // 16fps
- #define ACM_VIDEO_FPS_HIGH 2 // 24fps
- #define ACM_VIDEO_FPS_MOBILE 3 // 5fps
- #define ACM_VIDEO_FPS_MOBILEAGENT 4 // 2fps
- #pragma pack(push, 1)
- #pragma warning(disable: 4200)
- typedef struct acm_hdr {
- unsigned char compress : 1; // 压缩标志
- unsigned char type : 7;
- unsigned char encrypt : 1;
- unsigned char error : 7;
- unsigned short sub_type;
- unsigned int length; // 需要注意的是长度最大为2^16-1,65535
- unsigned int id; // 包id
- unsigned int hash;
- unsigned char data[0]; // 长度由length决定
- }acm_hdr;
- typedef struct proxy_hdr {
- char tag[3]; // 必须为’ACM’
- char version; // 版本号,目前为1
- char caller_id[20]; // 主叫ID,为ACM终端号,不足后面补空格
- char callee_id[20]; // 被叫ID,即业务代码,用作路由分析
- unsigned int rtp_port; // 视频rtp端口
- int media_desc; // 媒体描述
- char client_id[20]; // 用户身份证号码,用与视频面签
- unsigned int encrypt_keyhash; // 加密key hash code
- char encrypt_key[16]; // encodestring(密钥),传送过去之后利用decodestring解密
- }proxy_hdr;
- typedef struct proxy_ack_hdr {
- char tag[3]; // 必须为’ACM’
- char version; // 版本号,目前为1
- unsigned int rtp_port; // 视频rtp端口
- int media_desc; // 媒体描述
- char client_id[20]; // peer request client_id
- unsigned int encrypt_keyhash; // 加密key hash code
- char encrypt_key[16]; // encodestring(密钥),传送过去之后利用decodestring解密
- }proxy_ack_hdr;
- #pragma pack(pop, 1)
- //
- // photo capture
- //
- /* how to communicate
- ACM AGENT
- REQ
- <---------------
- SUB
- --------------->
- ACK
- <---------------
- SUB
- --------------->
- <---------------
- ...
- ANS
- --------------->
- */
- #define ACM_PHT_CAT(x) ((x) & 0xF0)
- #define ACM_PHT_ID(x) ((x) & 0x0F)
- #define ACM_PHT_REQ 0x10 //最高位0表示请求
- #define ACM_PHT_ANS 0x20 // 最高位1表示返回
- #define ACM_PHT_SNAPSHOT 0x01 // 拍照
- //
- // screen capture
- //
- #define ACM_SRN_CAT(x) ((x) & 0xF0)
- #define ACM_SRN_ID(x) ((x) & 0x0F)
- #define ACM_SRN_REQ 0x10 //最高位0表示请求
- #define ACM_SRN_ANS 0x20 // 最高位1表示返回
- #define ACM_SRN_SNAPSHOT 0x01 // 拍照
- //
- // CMD
- //
- #define ACM_CMD_REQ 0x00 //最高位0表示请求
- #define ACM_CMD_ANS 0x80 // 最高位1表示返回
- #define ACM_CMD_SUB 0x00 // 多包返回
- #define ACM_CMD_ACK 0x80 // 多包返回确认
- #define ACM_CMD_GETVOLUME 0x04 // 获取音量大小(0-100)
- #define ACM_CMD_SETVOLUME 0x08 // 设置音量大小(0-100)
- //
- // IM 交互框架控制协议
- //
- #define ACM_IM_REQ 0x00
- #define ACM_IM_ANS 0x80
- #define ACM_IM_EXITFLOW 0x01 // 业务流程退出
- #define ACM_IM_ENTERFLOW 0x02 // 业务流程进入
- #define ACM_IM_GOHOME 0x03 // 进入主页
- #define ACM_IM_SHOWTEXT 0x04 // 推送文本
- #define ACM_IM_AGENTSTATE 0x05 // 坐席端状态
- #define ACM_IM_FORWARD 0x06 // 前进
- #define ACM_IM_BACK 0x07 // 后退
- #define ACM_IM_MENUTREE 0x08 // 设置菜单树
- #define ACM_IM_MENUPATH 0x09 // 设置当前菜单路径
- #define ACM_IM_MENUGOPARENT 0x0A // 菜单,上一层
- #define ACM_IM_MENUGOCHILD 0x0B // 菜单,下一层
- #define ACM_IM_FRONTSYNC 0x0C // 前端->后端 ,同步
- #define ACM_IM_BACKSYNC 0x0D // 后端->前端,同步
- //
- // Sync 由大师定义
- //
- //
- // FLW 流程交互
- //
- #define ACM_SUBTYPE_REQ_FLOW 0x01 // 后端对前端的流程请求,以及前端对后端的请求
- #define ACM_SUBTYPE_ANS_FLOW 0x02 // 流程调用的返回
- #define ACM_SUBTYPE_NTF_ENTFLOW 0x03 // 通知进入流程
- #define ACM_SUBTYPE_DIS_CONTROL 0x04 // 拒绝控制
- //
- // INFO 通道之间的协议
- //
- #define ACM_INFO_TRANSFER 0x01 // 呼叫转移
- //
- // CTX 交互上下文 杨诗友定义
- //
- #define ACM_CTX_MACHINE 0x01 // 全局
- #define ACM_CTX_SESSION 0x02 // 会话
- //
- // AGENTCTX 柜员上下文
- //
- #define ACM_AGENTCTX_INFO 0x01 // 柜员基本信息
- //
- // CAMSWITCH 摄像头切换
- //
- #define ACM_CAMSWITCH_ENV 0x01 // 环境摄像头(上横)
- #define ACM_CAMSWITCH_OPT 0x02 // 操作摄像头(下竖)
- #define ACM_CAMSWITCH_AUTO 0x03 // 自动模式,让前端决定
- //
- // 设备管理
- //
- #define ACM_SET_HANDFREE_OUTVOLUMN 0x01 // 设置免提放音音量
- #define ACM_SET_PICKUP_OUTVOLUMN 0x02 // 设置话筒放音音量
- #define ACM_SET_CAMERABRIGHT 0x03 // 设置摄像头亮度
- #define ACM_CHANGE_HANDFREE 0x04 // 切换免提放音
- #define ACM_CHANGE_PICKUP 0x05 // 切换话筒放音
- //前端传给agent
- #define ACM_HANDFREE_OUTVOLUMN 0x06 // 免提当前放音音量,前端-->后端
- #define ACM_PICKUP_OUTVOLUMN 0x07 // 话筒当前放音音量,前端-->后端
- #define ACM_AUDIO_DEVICE 0x08 // 当前声音设备,前端-->后端
- #define ACM_CAMERA_BRIGHT 0x09 // 当前相机亮度,前端-->后端
- #define ACM_DEVICE_ERROR 0x0A // 前端设备故障告警推送
- #define ACM_ENTITY_STATE_REQ 0x0B // 坐席请求查询实体状态
- #define ACM_ENTITY_STATE_ANS 0x0C // 前端推送实体状态
- #define ACM_SET_HANDFREE_INVOLUMN 0x0D // 设置免提收音音量
- #define ACM_SET_PICKUP_INVOLUMN 0x0E // 设置话筒收音音量
- #define ACM_HANDFREE_INVOLUMN 0x0F // 免提当前收音音量,前端-->后端
- #define ACM_PICKUP_INVOLUMN 0x10 // 话筒当前收音音量,前端-->后端
- //呼叫转移
- #define ACM_CALLTRANS_NUM 0x01 // 呼叫转移号码
- #define ACM_VIDEOFREQ_UP 0x01 //视频上行帧频
- #define ACM_VIDEOFREQ_DOWN 0x02 //视频下行帧频
- //坐席视频类型,
- #define ACM_AGENTVIDEOTYPE_ONEWAY 0x01 //单向视频
- #define ACM_AGENTVIDEOTYPE_TWOWAY 0x02 //双向视频
- //////////////////////////////////////////////////////////////////////////
- /// some media desc functions
- //////////////////////////////////////////////////////////////////////////
- static int media_desc_encode(int local_mode, int local_encode, int local_fps, int remote_mode, int remote_encode, int remote_fps)
- {
- int local_desc = local_mode | (local_encode << 5) | (local_fps << 10);
- int remote_desc = remote_mode | (remote_encode << 5) | (remote_fps << 10);
- return local_desc | (remote_desc << 16);
- }
- static void __media_desc_decode(int part_desc, int *mode, int *encode, int *fps)
- {
- if (mode)
- *mode = part_desc & 0x1f;
- if (encode)
- *encode = (part_desc & 0x3e0) >> 5;
- if (fps)
- *fps = (part_desc & 0x7C00) >> 10;
- }
- static void media_desc_decode(int desc, int *local_mode, int *local_encode, int *local_fps, int *remote_mode, int *remote_encode, int *remote_fps)
- {
- int local_desc = desc & 0xffff;
- int remote_desc = (desc & 0xffff0000) >> 16;
- __media_desc_decode(local_desc, local_mode, local_encode, local_fps);
- __media_desc_decode(remote_desc, remote_mode, remote_encode, remote_fps);
- }
- #endif // CHAN_PROTOCOL_H
|