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

📄 cmpp_protocol2.pas

📁 CMPP2版短信平台行业版,运营商支持下400条/S
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit CMPP_Protocol2;

interface

const
    CMPP_CONNECT                    : LongWord = $00000001;
    CMPP_CONNECT_RESP               : LongWord = $80000001;
    CMPP_TERMINATE                  : LongWord = $00000002;
    CMPP_TERMINATE_RESP             : LongWord = $80000002;
    CMPP_SUBMIT                     : LongWord = $00000004;
    CMPP_SUBMIT_RESP                : LongWord = $80000004;
    CMPP_DELIVER                    : LongWord = $00000005;
    CMPP_DELIVER_RESP               : LongWord = $80000005;
    CMPP_QUERY                      : LongWord = $00000006;
    CMPP_QUERY_RESP                 : LongWord = $80000006;
    CMPP_CANCEL                     : LongWord = $00000007;
    CMPP_CANCEL_RESP                : LongWord = $80000007;
    CMPP_ACTIVE_TEST                : LongWord = $00000008;
    CMPP_ACTIVE_TEST_RESP           : LongWord = $80000008;
    CMPP_FWD                        : LongWord = $00000009;
    CMPP_FWD_RESP                   : LongWord = $80000009;
    CMPP_MT_ROUTE                   : LongWord = $00000010;
    CMPP_MT_ROUTE_RESP              : LongWord = $80000010;
    CMPP_MO_ROUTE                   : LongWord = $00000011;
    CMPP_MO_ROUTE_RESP              : LongWord = $80000011;
    CMPP_GET_ROUTE                  : LongWord = $00000012;
    CMPP_GET_ROUTE_RESP             : LongWord = $80000012;
    CMPP_MT_ROUTE_UPDATE            : LongWord = $00000013;
    CMPP_MT_ROUTE_UPDATE_RESP       : LongWord = $80000013;
    CMPP_MO_ROUTE_UPDATE            : LongWord = $00000014;
    CMPP_MO_ROUTE_UPDATE_RESP       : LongWord = $80000014;
    CMPP_PUSH_MT_ROUTE_UPDATE       : LongWord = $00000015;
    CMPP_PUSH_MT_ROUTE_UPDATE_RESP  : LongWord = $80000015;
    CMPP_PUSH_MO_ROUTE_UPDATE       : LongWord = $00000016;
    CMPP_PUSH_MO_ROUTE_UPDATE_RESP  : LongWord = $80000016;

    CMPP_REPORT                     : LongWord = $00000050; //CMPP协议中没有此信息,为了区分CMPP_DELIVER包
    CMPP_Version = $20;
    MSG_LENGTH = 140; //短信内容长度
const
    //Connect 返回值
    ERR_CONNECT_SUCCESS = $00; //连接正确
    ERR_CONNECT_BODY = $01; //结构体错误
    ERR_CONNECT_INVALID_SP_ID = $02; //非法SP ID
    ERR_CONNECT_SP_AUTHENTICATION = $03; //SP认证错
    ERR_CONNECT_VERSION = $04; //版本太高

    //Submit 返回值
    ERR_SUBMIT_SUCCESS = $00; //成功
    ERR_SUBMIT_BODY = $01; //结构体错
    ERR_SUBMIT_COMMAND = $02; //命令错
    ERR_SUBMIT_MSG_ID = $03; //流水号重复
    ERR_SUBMIT_MSG_LENGTH = $04; //消息长度错
    ERR_SUBMIT_FEE_CODE = $05; //资费代码错
    ERR_SUBMIT_TO_LONG = $06; //信息太长
    ERR_SUBMIT_SERVICE_ID = $07; //业务代码错
    ERR_SUBMIT_FLOW_CONTROL = $08; //流量控制错

    //Deliver 返回值
    ERR_DELIVER_SUCCESS = $00; //成功
    ERR_DELIVER_BODY = $01; //结构体错
    ERR_DELIVER_COMMAND = $02; //命令错
    ERR_DELIVER_MSG_ID = $03; //流水号重复
    ERR_DELIVER_MSG_LENGTH = $04; //消息长度错
    ERR_DELIVER_FEE_CODE = $05; //资费代码错
    ERR_DELIVER_TO_LONG = $06; //信息太长
    ERR_DELIVER_SERVICE_ID = $07; //业务代码错
    ERR_DELIVER_FLOW_CONTROL = $08; //流量控制错

    //Cancel 返回值
    ERR_CANCEL_SUCCESS = $00; //成功
    ERR_CANCEL_FAULT = $01; //失败

    //Active 返回值
    ERR_ACTIVE_SUCCESS = $00; //成功


type
    TReceiveShortMessage = record
      Msg_Id: Int64;
      Dest_Id: String;
      Service_Id: String;
      TP_pid: Byte;
      TP_udhi: Byte;
      Msg_Fmt: Byte;
      Src_terminal_Id: String;
      Src_terminal_type : Byte;
      Registered_Delivery: Byte;
      Msg_Length: Byte;
      Msg_Content: WideString;
    end;
    TReceiveReport = record
        Msg_Id: Int64;
        Dest_Id: String;
        Service_Id: String;
        TP_pid: Byte;
        TP_udhi: Byte;
        Msg_Fmt: Byte;
        Src_terminal_Id: String;
        Registered_Delivery: Byte;
        Msg_Length: Byte;

        MT_Msg_ID: Int64;
        Stat: String;
        Submit_time: String;
        Done_time: String;
        Dest_Terminal_Id: String;
        SMSC_sequence: LongWord;
    end;

    TEmpty = record //空纪录
    end;

    //消息头
    TCMPP_HEAD = packed record
        Total_Length: LongWord; //消息总长度(含消息头及消息体)
        Command_ID: LongWord; //命令或响应类型
        Sequence_ID: LongWord; //消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同)
    end;

    ////////////////////////////////////////////////////////////////////////////
    // SP 请求连接到 ISMG
    PCMPP_CONNECT = ^TCMPP_CONNECT;
    TCMPP_CONNECT = packed record
        Source_Addr: array[0..5] of Char; //源地址,此处为SP_Id,即SP的企业代码。
        AuthenticatorSource: array[0..15] of Char; //用于鉴别源地址。其值通过单向MD5 hash计算得出,表示如下:AuthenticatorSource =MD5(Source_Addr+9 字节的0 +shared secret+timestamp)Shared secret 由中国移动与源地址实体事先商定,timestamp格式为:MMDDHHMMSS,即月日时分秒,10位。
        Version: Byte; //双方协商的版本号(高位4bit表示主版本号,低位4bit表示次版本号)
        Timestamp: LongWord; //时间戳的明文,由客户端产生,格式为MMDDHHMMSS,即月日时分秒,10位数字的整型,右对齐 。
    end;

    PCMPP_CONNECT_RESP = ^TCMPP_CONNECT_RESP;
    TCMPP_CONNECT_RESP = packed record
        Status: Byte; //状态0:正确1:消息结构错 2:非法源地址 3:认证错 4:版本太高  5~ :其他错误
        AuthenticatorISMG: array[0..15] of Char; //ISMG认证码,用于鉴别ISMG。其值通过单向MD5 hash计算得出,表示如下:AuthenticatorISMG =MD5(Status+AuthenticatorSource+shared secret),Shared secret 由中国移动与源地址实体事先商定,AuthenticatorSource为源地址实体发送给ISMG的对应消息CMPP_Connect中的值。 认证出错时,此项为空
        Version: Byte; //服务器支持的最高版本号
    end;

    ////////////////////////////////////////////////////////////////////////////
    // SP 或 ISMG 请求拆除连接
    TCMPP_TERMINATE = TEmpty;

    TCMPP_TERMINATE_RESP = TEmpty;

    ////////////////////////////////////////////////////////////////////////////
    // SP 向 ISMG 提交短信
    PCMPP_SUBMIT = ^TCMPP_SUBMIT;
    TCMPP_SUBMIT = packed record
        Msg_Id: Int64; //信息标识,由SP侧短信网关本身产生,本处填空。
        Pk_total: Byte; //相同Msg_Id的信息总条数,从1开始
        Pk_number: Byte; //相同Msg_Id的信息序号,从1开始
        Registered_Delivery: Byte; //是否要求返回状态确认报告:0:不需要1:需要2:产生SMC话单 (该类型短信仅供网关计费使用,不发送给目的终端)
        Msg_level: Byte; //信息级别
        Service_Id: array[0..9] of Char; //业务类型,是数字、字母和符号的组合。
        Fee_UserType: Byte; //计费用户类型字段0:对目的终端MSISDN计费;1:对源终端MSISDN计费;2:对SP计费;3:表示本字段无效,对谁计费参见Fee_terminal_Id字段。
        Fee_terminal_Id: array[0..20] of Char; //被计费用户的号码(如本字节填空,则表示本字段无效,对谁计费参见Fee_Userstruct字段,本字段与Fee_Userstruct字段互斥)
        TP_pId: Byte; //GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.9
        TP_udhi: Byte; //GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐
        Msg_Fmt: Byte; //信息格式  0:ASCII串  3:短信写卡操作  4:二进制信息  8:UCS2编码15:含GB汉字
        Msg_src: array[0..5] of Char; //信息内容来源(SP_Id)
        FeeType: array[0..1] of Char; //资费类别01:对"计费用户号码"免费
        FeeCode: array[0..5] of Char; //资费代码(以分为单位)
        ValId_Time: array[0..16] of Char; //存活有效期,格式遵循SMPP3.3协议
        At_Time: array[0..16] of Char; //定时发送时间,格式遵循SMPP3.3协议
        Src_Id: array[0..20] of Char; //源号码SP的服务代码或前缀为服务代码的长号码, 网关将该号码完整的填到SMPP协议Submit_SM消息相应的source_addr字段,该号码最终在用户手机上显示为短消息的主叫号码
        DestUsr_tl: Byte; //接收信息的用户数量(小于100个用户)
        Dest_terminal_Id: array[0..20] of Char; //接收短信的MSISDN号码
        Msg_Length: Byte; //信息长度(Msg_Fmt值为0时:<160个字节;其它<=140个字节)
        Msg_Content: array[0..MSG_LENGTH - 1] of Char; //信息内容
        Reserve: array[0..7] of Char; //保留
    end;

    //短信群发 注:在群发中,由于 手机号是可变长的,所以在程序中定义,长度为21*手机个数
    PCMPP_SUBMIT_QF1 = ^TCMPP_SUBMIT_QF1;
    TCMPP_SUBMIT_QF1 = packed record
        Msg_Id: Int64; //信息标识,由SP侧短信网关本身产生,本处填空。
        Pk_total: Byte; //相同Msg_Id的信息总条数,从1开始
        Pk_number: Byte; //相同Msg_Id的信息序号,从1开始
        Registered_Delivery: Byte; //是否要求返回状态确认报告:0:不需要1:需要2:产生SMC话单 (该类型短信仅供网关计费使用,不发送给目的终端)
        Msg_level: Byte; //信息级别
        Service_Id: array[0..9] of Char; //业务类型,是数字、字母和符号的组合。
        Fee_UserType: Byte; //计费用户类型字段0:对目的终端MSISDN计费;1:对源终端MSISDN计费;2:对SP计费;3:表示本字段无效,对谁计费参见Fee_terminal_Id字段。
        Fee_terminal_Id: array[0..20] of Char; //被计费用户的号码(如本字节填空,则表示本字段无效,对谁计费参见Fee_Userstruct字段,本字段与Fee_Userstruct字段互斥)
        TP_pId: Byte; //GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.9
        TP_udhi: Byte; //GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐
        Msg_Fmt: Byte; //信息格式  0:ASCII串  3:短信写卡操作  4:二进制信息  8:UCS2编码15:含GB汉字
        Msg_src: array[0..5] of Char; //信息内容来源(SP_Id)
        FeeType: array[0..1] of Char; //资费类别01:对"计费用户号码"免费
        FeeCode: array[0..5] of Char; //资费代码(以分为单位)
        ValId_Time: array[0..16] of Char; //存活有效期,格式遵循SMPP3.3协议
        At_Time: array[0..16] of Char; //定时发送时间,格式遵循SMPP3.3协议

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -