⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 utcmppmsg.pas

📁 使用delphi编写的cmpp接口程序源代码
💻 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 + -