📄 smaiscmpp.pas
字号:
//文件名称:SmaisCmpp.pas
//文件标识:东软封装后的CMPP
//当前版本:1.0
//作 者:邵青山
//完成日期:2003年6月12日
unit SmaisCmpp;
interface
uses
md5;
const
//东软协议里面的CommandID
CMPPE_NACK_RESP = $80000000; //??????
CMPPE_LOGIN = $1; //请求连接
CMPPE_LOGIN_RESP = $80000001; //请求连接应答
CMPPE_LOGOUT = $2; //终止连接
CMPPE_LOGOUT_RESP = $80000002; //终止连接应答
CMPPE_ROUTE = $3; //好像是路由信息
CMPPE_ROUTE_RESP = $80000003; //好像是路由信息
CMPPE_SUBMIT = $4; //提交短信
CMPPE_SUBMIT_RESP = $80000004; //提交短信应答
CMPPE_DELIVER = $5; //短信下发
CMPPE_DELIVER_RESP = $80000005; //短信下发应答
CMPPE_QUERY = $6; //发送短信状态查询
CMPPE_QUERY_RESP = $80000006; //发送短信状态查询应答
CMPPE_CANCEL = $7; //删除短信
CMPPE_CANCEL_RESP = $80000007; //删除短信应答
CMPPE_ACTIVE = $8; //激活测试
CMPPE_ACTIVE_RESP = $80000008; //激活测试应答
//返回信息错误定义
CMPPE_RSP_SUCCESS = $0; //正确
CMPPE_RSP_OTHER_ERR = $1; //其它错误
CMPPE_RSP_INVAL_MSG_LEN = $2; //*不合法的消息长度*/
CMPPE_RSP_UNKNOWN_CMD = $3; //*不能识别的命令*/
CMPPE_RSP_SYNC_ERR = $4; //*同步错误*/
CMPPE_RSP_INVAL_STRUCT = $5; //*不合法的消息结构*/
CMPPE_RSP_INVAL_ICP = $10; //* 不合法的ICP_ID */
CMPPE_RSP_INVAL_AUTH = $11; //* 不合法的ICP授权 */
CMPPE_RSP_INVAL_BIND_TYPE = $12; //* 不合法的绑定类型 */
CMPPE_RSP_BINDED = $13; //* 已经正确BIND */
CMPPE_RSP_BIND_EXCEED = $14; //* 超过最大允许连接数*/
CMPPE_RSP_NOT_BIND = $15; //* 尚未正确Bind */
CMPPE_RSP_INVAL_VERSION = $16; //* 不正确的版本 */
CMPPE_RSP_INVAL_MSG_MODE = $20; //*不合法的消息模式*/
CMPPE_RSP_INVAL_DATA_CODING = $21; //*不合法的数据编码*/
CMPPE_RSP_INVAL_SVC_TYPE = $22; //*不合法的服务类型*/
CMPPE_RSP_INVAL_FEE_TYPE = $23; //*不合法的计费类型*/
CMPPE_RSP_INVAL_DATETIME = $24; //*不合法的日期格式*/
CMPPE_RSP_DSTS_EXCEED = $25; //*目标地址数量过多*/
CMPPE_RSP_SMLEN_EXCEED = $26; //*短消息过长*/
CMPPE_RSP_INVAL_MSISDN = $27; //*不合法的msisdn*/
CMPPE_RSP_INVAL_PARA = $28; //*不合法的参数*/
CMPPE_RSP_DST_ADDR_UNKNOWN = $29; //*没有目的地址*/
CMPPE_RSP_NO_RIGHT = $2A; //*没有权限*/
CMPPE_RSP_NO_ROUTE = $2B; //*找不到路由*/
CMPPE_RSP_SYS_ERR = $2C; //*系统错误*/
CMPPE_RSP_INFO_FEE_EXCEED = $2D; //*信息费过大*/
CMPPE_RSP_SCHEDULE_EXCEED = $2E; //*定时发送时间太大*/
CMPPE_RSP_MQ_FULL = $2F; //*发送队列满*/
CMPPE_RSP_SRC_ADDR_UNKNOWN = $30; //*不合法的源地址 */
CMPPE_RSP_INVAL_FUTYPE = $31; //*不合法的计费用户类型*/
CMPPE_RSP_INVAL_FEEUSR = $32; //*不合法的计费用户*/
CMPPE_RSP_INVAL_MSGID = $40; //*不合法的消息标识*/
CMPPE_RSP_PK_SEQ_REPEAT = $41; //*包序号重复*/
CMPPE_RSP_PK_SEQ_EXCEED = $42; //*包序号越界*/
CMPPE_RSP_MSG_NOT_FOUND = $43; //*找不到对应msgid的短消息*/
//扩展
CMPPE_RSP_INVAL_ISMG = $50; //*不合法的ISMG标识*/
CMPPE_RSP_INVAL_DEST_GATEWAY = $51; //*不合法的目的网关*/
CMPPE_RSP_INVAL_STATUS_RPT = $52; //*不合法的状态报告*/
CMPPE_RSP_INVAL_SVC_ID = $53; //*不合法的服务ID*/
CMPPE_RSP_SRC_GATEWAY_UNKNOWN = $54; //*不合法的源网关*/
CMPPE_RSP_SMSC_UNKNOWN = $55; //*未知SMSC */
CMPPE_RSP_INVAL_LOCALE = $56; //*未知LOCALE */
CMPPE_RPACKET_ERR = $60; //*收到的消息是错误的消息*/
type
TEMPTY = packed record //空消息体
end;
(**********************************消息头**********************************)
TCMPPHead = packed record
MessageLength: longword; //消息的总长度(字节)
CommandId: longword; //命令ID
CommandStauts: longword; //命令状态,仅在应答请求包里有效
SequenceNumber: longword; //序列号,循环使用,步长为1,范围1-0x7fffffff
end;
(**********************************消息体**********************************)
// 登陆请求 Login
TSpLogin = packed record
SP_ID: array[0..6] of char;
SP_AUTH: array[0..15] of byte; //ICP认证码,
//MD5(Source_Addr+9 字节的0 +shared secret+timestamp)
SP_BindType: byte; //登陆类型,0,发;1,收;2,收发
IF_Ver: byte; //接口版本 0,11,12
TimeStamp: LongWord; //时间戳,mmddhhmmss
end;
// 登陆请求 Login,返回信息
TLogin_Resp = packed record
IF_Ver: byte; //接口版本 0,11,12
Ismg_Auth: array[0..15] of char; //加密方法同CMPP v1.2
end;
// 断开消息体,空
TSpLogOut = TEMPTY;
// 断开返回消息体,空
TLogOut_Resp = TEMPTY;
// 定义群发电话号码格式
TTelCount = packed record //手机号码
TelN: array[0..20] of char;
end;
// Submit提交消息体
TSubmit1 = packed record
SP_ID: array[0..6] of char; //icp标志 Var. Max 7
ServiceType: array[0..10] of char; //服务类型(就是业务代码)Var.Max 11
end;
TSubmit2 = packed record
FeeType: byte; //资费类型
FeeCode: LongWord; //资费代码,单位为分,cmpp2.0里面应该定义为,array[0..5] of char;
ProtocolID: byte; //Protocol ID协议标识
MessageMode: byte; //消息模式
Priority: byte; //优先级别,0--9,默认填0,9最高级别
Vallid_Time: byte; //array[0..16] of char; //信息存活有效期 17 or 1
ScheduleTime: byte; //array[0..16] of char; //消息定时发送时间 17 or 1
FeeUserType: byte; //计费用户类型,
//0,对目的终端计费
//1,对源终端计费
//2,对SP计费
//3,对指定计费用户计费
end;
TSubmit3 = packed record
FeeUser: array[0..20] of char; //计费用户,如果计费类型为3,则本参数必须填写 Var.Max 21
//如果计费用户类型为其它值,则此参数无效
SourceAddress: array[0..20] of char; //源终端号码. Var.Max 21
//如果是A点播给其他用户,则填A,也可以填空
UserCount: byte; //接收用户数量,1-255(Cmpp里面定义小于100)
UserNumber: array[0..20] of char; //:TelCount;接收信息的用户号码; //长度为UserCount
UserNumberQF: array[0..5334] of char; //根据UserCount 来定 Var.Max 21 Var.Max 5334
Data_Msg_Fmt: byte; //数据编码,信息格式
Message_Length: byte; // 短消息内容长度
Msg_Content: array[0..160] of char; //长度为 MessageLength; Var.Max 161
end;
//Submit_resp提交消息体,返回信息
//SMIAS SP接口失败用户列表格式
Cmpp_us_user = packed record
index: byte; //失败用户索引
Status: byte; //失败用户错误状态
end;
//SMIAS SP接口Submit Response消息体格式
TSubmit_Resp = packed record
MessageID: array[0..63] of char; //信息标识码,由网关产生,
F_user_count: byte; // 失败用户数量,
F_user_List: Cmpp_us_user; //失败用户列表,如果F_user_count为0,则此数据不存在
end;
// Deliver消息体
TDeliver = packed record
SourceAddress: array[0..20] of char; //源终端号码,
UserNumber: array[0..20] of char; //接收信息的用户号码; //长度为UserCount
ServiceType: array[0..10] of char; //服务类型(就是业务代码) //内容为,SP特服号+扩展后缀,???
ProtocolID: byte; //TP_pid???Protocol ID协议标识
MessageMode: byte; //消息模式
Priority: byte; //优先级别,0--9,默认填0,9最高级别
Data_Msg_Fmt: byte; //数据编码,信息格式
Message_Length: byte; // 短消息内容长度
Msg_Content: array[0..160] of char; //长度为 MessageLength;
end;
// Deliver_Resp消息体,返回信息 ,空
TDeliver_Resp = TEMPTY;
//
//Cancel的消息体
TCancel = packed record
MessageID: array[0..63] of char; //信息标识码
UserNumber: array[0..20] of char; //:TelCount;准备取消的目接收信息的用户号码;
end;
//Cancel_resp返回信息的消息体
TCancel_Resp = packed record
MessageID: array[0..63] of char; //信息标识码,准备取消的过去,
//MT信息的MessageID
CancelCount: byte; //被成功取消的目的地址数量
UserNumber: array[0..20] of char; //:TelCount;准备取消的目接收信息的用户号码;
end;
// Active消息体 ,空
TSpActive = TEMPTY;
// Active_resp返回消息体,空
TActive_Resp = TEMPTY;
(***************************************************************************
////////////////////////////////////////////////////////////////////////////
***************************************************************************)
implementation
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -