📄 utcmppmsg.pas
字号:
unit UtCMPPMsg;
interface
const
// 连接
CMD_CONNECT = $00000001; //请求连接
CMD_CONNECT_RESP = $80000001; //请求连接应答
//退出
CMD_TERMINATE = $00000002; //终止连接
CMD_TERMINATE_RESP = $80000002; //终止连接应答
//提交
CMD_SUBMIT = $00000004; //提交短信
CMD_SUBMIT_RESP = $80000004; //提交短信应答
//接受
CMD_DELIVER = $00000005; //短信下发
CMD_DELIVER_RESP = $80000005; //下发短信应答
//心跳
CMD_ACTIVE = $00000008; //激活测试
CMD_ACTIVE_RESP = $80000008; //激活测试应答
//返回错误
ICP_ERR_SUC = 0; // 正常
ICP_ERR_LOGINFAIL = $8001; // 登陆失败
ICP_ERR_NOLOGIN = $8002; // 未登陆
ICP_ERR_HADLOGIN = $8003; //已经处理登陆请求
ICP_ERR_CONERR = $8004; //连接网关出错
ICP_ERR_CONTIMEOUT = $8005; //连接网关超时
ICP_ERR_CONTRETRY = $8006; // 网关重新连接
ICP_ERR_DISCONERR = $8010;
ICP_ERR_DISCONSENDERR = $8011;
ICP_ERR_DISCONTIMEOUT = $8012;
ICP_ERR_DELIVERTIMEOUT = $8020; //获取Deliver超时
ICP_ERR_SUBMITTIMEOUT = $8030;
ICP_ERR_SUBMITOUTOFWINDOW = $8031; //超过滑动窗口
ICP_ERR_SUBMITERR = $8039;
ICP_ERR_OTHER = $80FF; //其它错误
type
//包头
PCMPPMsgHead = ^TCMPPMsgHead;
TCMPPMsgHead = packed record
PacketLength: Integer;
Command_Id: Integer;
SwquenceID: Integer;
end;
//*****************************包体***********************************//
//登陆
TCMPPMsgBody_Login = packed record
Source_Addr: array[1..6] of char;
AuthenticatorSource: array[1..16] of char;
Version: Byte;
TimeStamp: Integer;
end;
PCMPPMsg_Login = ^TCMPPMsg_Login;
TCMPPMsg_Login = packed record
Head: TCMPPMsgHead;
Body: TCMPPMsgBody_Login;
end;
PCMPPMsgBody_Login_Resp = ^TCMPPMsgBody_Login_Resp;
TCMPPMsgBody_Login_Resp = packed record
Status: Integer;
AuthenticatorServer: array[1..16] of char;
Version: Byte;
end;
PCMPPMsg_Login_Resp = ^TCMPPMsg_Login_Resp;
TCMPPMsg_Login_Resp = packed record
Head: TCMPPMsgHead;
Body: TCMPPMsgBody_Login_Resp;
end;
// 提交
TCMPPMsgBody_Submit = packed record
Msg_Id: Int64; // 信息标识。
Pk_total: byte; // 相同Msg_Id的信息总条数,从1开始。
Pk_number: byte; // 相同Msg_Id的信息序号,从1开始。
Registered_Delivery: byte; // 是否要求返回状态确认报告:
Msg_level: byte; // 信息级别。
Service_Id: array[1..10] of char; // 业务标识,是数字、字母和符号的组合。
Fee_UserType: byte; // 计费用户类型字段:
Fee_terminal_Id: array[1..32] of char; // 被计费用户的号码,当Fee_UserType为3时该值有效,当Fee_UserType为0、1、2时该值无意义。
Fee_terminal_type: byte; // 被计费用户的号码类型,0:真实号码;1:伪码。
TP_pId: byte; // GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.9。
TP_udhi: byte; // GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐。
Msg_Fmt: byte; // 信息格式:
Msg_src: array[1..6] of char; // 信息内容来源(SP_Id)。
FeeType: array[1..2] of char; // 资费类别:
FeeCode: array[1..6] of char; // 资费代码(以分为单位)。
ValId_Time: array[1..17] of char; // 存活有效期,格式遵循SMPP3.3协议。
At_Time: array[1..17] of char; // 定时发送时间,格式遵循SMPP3.3协议。
Src_Id: array[1..21] of char; // 源号码。SP的服务代码或前缀为服务代码的长号码, 网关将该号码完整的填到SMPP协议Submit_SM消息相应的source_addr字段,该号码最终在用户手机上显示为短消息的主叫号码。
DestUsr_tl: byte; // 接收信息的用户数量(小于100个用户)。
Dest_terminal_Id: array[1..32 * 100] of char; // 接收短信的MSISDN号码。
Dest_terminal_type: byte; // 接收短信的用户的号码类型,0:真实号码;1:伪码。
Msg_Length: byte; // 信息长度(Msg_Fmt值为0时:<160个字节;其它<=140个字节),取值大于或等于0。
Msg_Content: array[1..160] of char; // 信息内容。
LinkID: array[1..20] of char; // 点播业务使用的LinkID,非点播类业务的MT流程不使用该字段。
end;
TCMPPMsgBody_SubmitHead = packed record
Msg_Id: Int64; // 信息标识。
Pk_total: byte; // 相同Msg_Id的信息总条数,从1开始。
Pk_number: byte; // 相同Msg_Id的信息序号,从1开始。
Registered_Delivery: byte; // 是否要求返回状态确认报告:
Msg_level: byte; // 信息级别。
Service_Id: array[1..10] of char; // 业务标识,是数字、字母和符号的组合。
Fee_UserType: byte; // 计费用户类型字段:
Fee_terminal_Id: array[1..32] of char; // 被计费用户的号码,当Fee_UserType为3时该值有效,当Fee_UserType为0、1、2时该值无意义。
Fee_terminal_type: byte; // 被计费用户的号码类型,0:真实号码;1:伪码。
TP_pId: byte; // GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.9。
TP_udhi: byte; // GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐。
Msg_Fmt: byte; // 信息格式:
Msg_src: array[1..6] of char; // 信息内容来源(SP_Id)。
FeeType: array[1..2] of char; // 资费类别:
FeeCode: array[1..6] of char; // 资费代码(以分为单位)。
ValId_Time: array[1..17] of char; // 存活有效期,格式遵循SMPP3.3协议。
At_Time: array[1..17] of char; // 定时发送时间,格式遵循SMPP3.3协议。
Src_Id: array[1..21] of char; // 源号码。SP的服务代码或前缀为服务代码的长号码, 网关将该号码完整的填到SMPP协议Submit_SM消息相应的source_addr字段,该号码最终在用户手机上显示为短消息的主叫号码。
DestUsr_tl: byte; // 接收信息的用户数量(小于100个用户)。
end;
PCMPPMsgBody_Submit_Sub = ^TCMPPMsgBody_Submit_Sub;
TCMPPMsgBody_Submit_Sub = packed record
Dest_terminal_type: byte; // 接收短信的用户的号码类型,0:真实号码;1:伪码。
Msg_Length: byte; // 信息长度(Msg_Fmt值为0时:<160个字节;其它<=140个字节),取值大于或等于0。
Msg_Content: array[1..160] of char; // 信息内容。
LinkID: array[1..20] of char; // 点播业务使用的LinkID,非点播类业务的MT流程不使用该字段。
end;
PCMPPMsg_Submit = ^TCMPPMsg_Submit;
TCMPPMsg_Submit = packed record
Head: TCMPPMsgHead;
Body: TCMPPMsgBody_Submit;
end;
PCMPPMsgBody_Submit_Resp = ^TCMPPMsgBody_Submit_Resp;
TCMPPMsgBody_Submit_Resp = packed record
MsgID: Int64;
Status: Integer;
end;
PCMPPMsg_Submit_Resp = ^TCMPPMsg_Submit_Resp;
TCMPPMsg_Submit_Resp = packed record
Head: TCMPPMsgHead;
Body: TCMPPMsgBody_Submit_Resp;
end;
//接受
PCMPPMsgBody_Deliver = ^TCMPPMsgBody_Deliver;
TCMPPMsgBody_Deliver = packed record
Msg_Id: Int64; // 信息标识。
Dest_Id: array[1..21] of char; // 目的号码。
Service_Id: array[1..10] of char; // 业务标识,是数字、字母和符号的组合。
TP_pid: byte; //GSM协议类型。详细解释请参考GSM03.40 中的9.2.3.9 。
TP_udhi: byte; // GSM协议类型。详细解释请参考GSM03.40 中的9.2.3.23 ,仅使用1位,右对齐。
Msg_Fmt: byte; // 信息格式:
Src_terminal_Id: array[1..32] of char; // 源终端MSISDN号码(状态报告时填为CMPP_SUBMIT消息的目的终端号码)。
Src_terminal_type: byte; // 源终端号码类型,0:真实号码;1:伪码。
Registered_Delivery: byte; // 是否为状态报告:
Msg_Length: byte; // 消息长度,取值大于或等于0。
Msg_Content: array[1..160] of char; // 消息内容。
LinkID: array[1..20] of char; // 点播业务使用的LinkID,非点播类业务的MT流程不使用该字段。
end;
PCMPPMsg_Deliver = ^TCMPPMsg_Deliver;
TCMPPMsg_Deliver = packed record
Head: TCMPPMsgHead;
Body: TCMPPMsgBody_Deliver;
end;
TCMPPMsgBody_Deliver_Resp = packed record
MsgID: Int64;
Status: Integer;
end;
PCMPPMsg_Deliver_Resp = ^TCMPPMsg_Deliver_Resp;
TCMPPMsg_Deliver_Resp = packed record
Head: TCMPPMsgHead;
Body: TCMPPMsgBody_Deliver_Resp;
end;
///****************************上层传递结构*********************************
PCMPPDeliverResp = ^TCMPPDeliverResp;
TCMPPDeliverResp = record
rMsg_Id: Int64; //返回:短讯ID
rDestAddr: array[1..22] of char; //返回:目标地址
rbySrcTerminalType: Byte;
rOrgAddr: array[1..33] of char; //返回:源地址
rService_Id: array[1..10] of char;
rUDHI: Byte;
rPID: Byte;
//返回:协议类型
rMsg_Fmt: Byte; //返回:编码方案
rTimeStamp: array[1..20] of char; //返回:下发时间
rUDLen: Int64;
rUserData: array[1..256] of char; //返回:用户数据
rsLinkID: array[1..21] of char;
rStatusReport: Byte;
rsReportMsgID: array[1..22] of char; //Report MSGID
rsSubmitdate: array[1..11] of char;
rsDonedate: array[1..11] of char;
rsStatus: array[1..8] of char;
end;
PCMPPSubmit = ^TCMPPSubmit;
TCMPPSubmit = record
byPKTotal: Byte;
byPKNumber: Byte;
byneedReport: byte; { 是否返回状态报告 0=不要求,1=要求}
byMsglevel: Byte;
sServiceID: array[1..11] of char;
byFeeUserType: Byte;
sFeeAddr: array[1..21] of char;
bychargTermidType: Byte;
byUDHI: Byte;
byPID: Byte;
byMsg_Fmt: Byte;
sSPID: array[1..7] of char;
sFeeType: array[1..3] of char;
sFeeCode: array[1..7] of char;
sSchedule: array[1..18] of char;
sExpire: array[1..18] of char;
sOrgAddr: array[1..21] of char;
byUserNum: Byte;
sDestAddrs: array[1..32 * 100] of char;
byDestTerminalType: Byte;
byUDLen: Byte;
sUserData: array[1..161] of char;
sLinkID: array[1..21] of char;
sMsgID: array[1..22] of char
end;
implementation
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -