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

📄 smaiscmpp.pas

📁 东软CMPP Delphi版简单实现 很简单的一个程序 测试成功
💻 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 + -