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

📄 smgp13.pas

📁 操作数据库的例子
💻 PAS
字号:
unit SMGP13;

interface
const
  SMGP13_VERSION = $13;
  SMGP13_LOGIN = $00000001; //  CP 或SMGW 登录请求
  SMGP13_LOGIN_RESP = $80000001; //  CP 或SMGW 登录回应
  SMGP13_SUBMIT = $00000002; //  CP 发送短消息请求
  SMGP13_SUBMIT_RESP = $80000002; //  CP 发送短消息回应
  SMGP13_DELIVER = $00000003; //  SMGW 向CP 发送短消息请求
  SMGP13_DELIVER_RESP = $80000003; //  SMGW 向CP 发送短消息回应
  SMGP13_ACTIVE_TEST = $00000004; //  测试通信链路是否正常请求(由客户端发起,CP 和SMGW可以通过定时发送此请求来维持连接)
  SMGP13_ACTIVE_TEST_RESP = $80000004; //  测试通信链路是否正常回应

type
  TSMGP13PhoneNum = array[0..20] of char;

  //数据包包头定义
  TSMGP13_HEAD = packed record
    PacketLength: Cardinal;
    RequestID: Cardinal;
    SequenceID: Cardinal;
  end;

  //登录包包体定义
  TSMGP13_LOGIN = packed record
    ClientID: array[0..7] of char;
    AuthenticatorClient: array[0..15] of char;
    LoginMode: byte;
    TimeStamp: Cardinal;
    Version: byte;
  end;

  //登录应答包包体定义
  TSMGP13_LOGIN_RESP = packed record
    Status: Cardinal;
    AuthenticatorServer: array[0..15] of char;
    Version: byte;
  end;

  //下行消息包包体定义
  TSMGP13_SUBMIT = packed record
    MsgType: byte;
    NeedReport: byte;
    Priority: byte;
    ServiceID: array[0..9] of char;
    FeeType: array[0..1] of char;
    FeeCode: array[0..5] of char;
    FixedFee: array[0..5] of char;
    MsgFormat: byte;
    ValidTime: array[0..16] of char;
    AtTime: array[0..16] of char;
    SrcTermID: TSMGP13PhoneNum;
    ChargeTermID: TSMGP13PhoneNum;
    DestTermIDCount: byte;
    DestTermID: TSMGP13PhoneNum;
    MsgLength: byte;
    MsgContent: array[0..252] of char;
    Reserve: array[0..7] of char;
  end;

  //下行消息应答包包体定义
  TSMGP13_SUBMIT_RESP = packed record
    MsgID: array[0..9] of char;
    Status: Cardinal;
  end;

  //上行消息包包体定义
  TSMGP13_DELIVER = packed record
    MsgID: array[0..9] of char;
    IsReport: byte;
    MsgFormat: byte;
    RecvTime: array[0..13] of char;
    SrcTermID: TSMGP13PhoneNum;
    DestTermID: TSMGP13PhoneNum;
    MsgLength: byte;
    MsgContent: array[0..251] of char;
    Reserve: array[0..7] of char;
  end;

  //上行消包应答包包体定义
  TSMGP13_DELIVER_RESP = packed record
    MsgID: array[0..9] of char;
    Status: Cardinal;
  end;

  //包体
  TSMGP13_BODY = packed record
    case integer of
      1: (LOGIN: TSMGP13_LOGIN);
      2: (LOGIN_RESP: TSMGP13_LOGIN_RESP);
      3: (SUBMIT: TSMGP13_SUBMIT);
      4: (SUBMIT_RESP: TSMGP13_SUBMIT_RESP);
      5: (DELIVER: TSMGP13_DELIVER);
      6: (DELIVER_RESP: TSMGP13_DELIVER_RESP);
  end;

  //包
  TSMGP13_PACKET = packed record
    MsgHead: TSMGP13_HEAD;
    MsgBody: TSMGP13_BODY;
  end;

  //状态报告
  TSMGP13RPT = packed record
    TID: array[0..2] of char; //字符'id:' 3字节
    ID: array[0..9] of char; //消息id 10字节
    SP1: char; //空格 1字节
    TSUB: array[0..3] of char; //sub: 4字节
    SUB: array[0..2] of char; //001 3字节
    SP2: char; //空格 1字字
    TDLVRD: array[0..5] of char; //dlvrd: 6字节
    DLVRD: array[0..2] of char; //001 3字节
    SP3: char; //空格 1字节
    TSUBMITDATE: array[0..11] of char; //submit date: 12字节
    SUBMITDATE: array[0..9] of char; //YYMMDDHHMI   10字节
    SP4: char; //空格 1
    TDONEDATE: array[0..9] of char; //TODO date: 10
    DONEDATE: array[0..9] of char; //10
    sp5: char; //空格 1字节
    tSTAT: array[0..4] of char; //5
    stat: array[0..6] of char; //7
    sp6: char; //
    tERR: array[0..3] of char; //
    Err: array[0..2] of char; //
    sp7: char; //
    tTXT: array[0..3] of char; //
    sp8: char;
    txt: array[0..2] of char; //
    msgcon: array[0..16] of char; //
    sp9: char; //  #0
  end;

function SMGP13_StatusToDesc(Status: Cardinal): string;
function SMGP13_StatusToStr(Status: Cardinal): string;

implementation

uses
  SysUtils;

function SMGP13_StatusToStr(Status: Cardinal): string;
begin
  result := inttostr(Status);
  if length(result) = 1 then result := '00' + result;
  if length(result) = 2 then result := '0' + result;
end;

function SMGP13_StatusToDesc(Status: Cardinal): string;
begin
  case Status of
    0: result := '成功';
    1: result := '系统忙';
    2: result := '超过最大连接数';
    3..9: result := '保留';
    10: result := '消息结构错';
    11: result := '命令字错';
    12: result := '序列号重复';
    13..19: result := '保留';
    20: result := 'IP 地址错';
    21: result := '认证错';
    22: result := '版本太高';
    23..29: result := '保留';
    30: result := '非法消息类型(SMType)';
    31: result := '非法优先级(Priority)';
    32: result := '非法资费类型(FeeType)';
    33: result := '非法资费代码(FeeCode)';
    34: result := '非法短消息格式(MsgFormat)';
    35: result := '非法时间格式';
    36: result := '非法短消息长度(MsgLength)';
    37: result := '有效期已过';
    38: result := '非法查询类别(QueryType)';
    39: result := '路由错误';
    40: result := '非法包月/封顶费(FIXEDFEE)';
    41: result := '非法更新类型(UPDATETYPE)';
    42: result := '非法路由编号(ROUTERID)';
    43: result := '非法服务代码(SERVICEID)';
    44: result := '非法有效期(VALIDTIME)';
    45: result := '非法定时发送时间(ATTIME)';
    46: result := '非法发送用户号码(SRCTERMID)';
    47: result := '非法接收用户号码(DESTTERMID)';
    48: result := '非法计费用户号码(CHARGETERMID)';
    49: result := '非法SP代码';
    50..127: result := '保留';
    128..255: result := '厂家自定义';
  end;
end;

end.

⌨️ 快捷键说明

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