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

📄 cmpp_protocol.~pas

📁 cmpp协议的delphi解析cmpp协议的点歌系统
💻 ~PAS
字号:
unit CMPP_Protocol;

interface
uses
Variants,SysUtils,Windows;

const
    //test_flag
    CMPP_BROCKEN: LongWord = $12345678;

    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包

    MSG_LENGTH = 140; //短信内容长度
    //Queue_Max_Length = 1000; //队列的最大长度
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; //成功
    MAXCON=15; //客户端最大连接数

type

    TEmpty = record //空纪录
    end;

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

    ////////////////////////////////////////////////////////////////////////////
    // SP 请求连接到 ISMG
    PCMPP_CONNECT_tag = ^TCMPP_CONNECT_tag;
    TCMPP_CONNECT_tag = packed record
        Source_Addr: array[0..5] of Char; //源地址,此处为SP_Id,即SP的企业代码。
        Password: array[0..5] of Char; //源地址,此处为SP_Id,即SP的企业代码。
    end;

    PCMPP_CONNECT_RESP_tag = ^TCMPP_CONNECT_RESP_tag;
    TCMPP_CONNECT_RESP_tag = packed record
        Status: Byte; //状态 0:正确,1:消息结构错, 2:非法源地址, 3:认证错,4:版本太高,5~ :其他错误
    end;

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

    ////////////////////////////////////////////////////////////////////////////
    // SP 向 ISMG 提交短信
    PCMPP_SUBMIT_tag = ^TCMPP_SUBMIT_tag;
    TCMPP_SUBMIT_tag = packed record
        Msg_Id: Tulargeinteger; //信息标识,由SP侧短信网关本身产生,本处填空。
        Registered_Delivery: Byte; //是否要求返回状态确认报告:0:不需要1:需要2:产生SMC话单 (该类型短信仅供网关计费使用,不发送给目的终端)
        At_Flag: Byte; // 是否要求定时发送:0:不需要,1:需要
        At_Time: array[0..18] of Char; //定时发送时间,格式遵循SMPP3.3协议
        Src_Id: array[0..20] of Char; //源号码SP的服务代码或前缀为服务代码的长号码, 网关将该号码完整的填到SMPP协议Submit_SM消息相应的source_addr字段,该号码最终在用户手机上显示为短消息的主叫号码
        Dest_terminal_Id: array[0..20] of Char; //接收短信的MSISDN号码
        Song_Name: array[0..59] of Char;  //点歌内容
        Reserve: array[0..7] of Char; //保留
    end;

    pCMPP_SUBMIT_RESP_tag = ^tCMPP_SUBMIT_RESP_tag;
    tCMPP_SUBMIT_RESP_tag = packed record
        Msg_Id: Tulargeinteger; //信息标识
        Result: Byte; //结果
        Song_Name: array[0..59] of Char;//选中的歌曲
    end;

    ////////////////////////////////////////////////////////////////////////////
    // ISMG 向 SP 送交短信
    // 由于在CMPP中,DELIVER和REPORT同一个命令号,所以读包体中也分两步,即先读前
    // 部份,再从Msg_Length和Registered_Delivery中判断剩余长度和内容
    PCMPP_DELIVER_tag = ^TCMPP_DELIVER_tag;
    TCMPP_DELIVER_tag = packed record
        Msg_Id: tulargeinteger; //信息标识
        Src_terminal_Id: array[0..20] of Char; //源终端MSISDN号码
        Dest_terminal_Id: array[0..20] of Char; //目的号码
        Stat: array[0..6] of Char; //目的号码
        Submit_time: array[0..9] of Char; //目的号码
        Play_Count: LongWord;
    end;

    PCMPP_DELIVER_RESP_tag = ^TCMPP_DELIVER_RESP_tag;
    TCMPP_DELIVER_RESP_tag = packed record
        Msg_Id: Tulargeinteger; //信息标识
        Result: Byte; //结果
    end;

    ////////////////////////////////////////////////////////////////////////////
    //链路检测操作
    PCMPP_ACTIVE_TEST_tag = ^TCMPP_ACTIVE_TEST_tag;
    TCMPP_ACTIVE_TEST_tag = TEmpty;

    PCMPP_ACTIVE_TEST_RESP_tag = ^TCMPP_ACTIVE_TEST_RESP_tag;
    TCMPP_ACTIVE_TEST_RESP_tag = TEmpty;

    //test_flag
    PCMPP_BROCKEN_tag = ^TCMPP_BROCKEN_tag;
    TCMPP_BROCKEN_tag = TEmpty;

implementation

end.

⌨️ 快捷键说明

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