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

📄 u_msginfo.pas

📁 电信短信网关平台+v3, dephi写的短信收发程序(包括PDU编解码),对于进行短信收发程序开发人员很有用!
💻 PAS
字号:
{------------------------}
{                  发送包定义                    }
{                        LUOXX                   }
{                             2004/3/11          }
{------------------------}

unit U_MsgInfo;

interface
uses Smgp13_XML, sysutils;

const
  MAX_DATA_LEN = 1024 * 3; //XML最大长度
  MAx_UserNumber = 100;//下行最大电话号码数

type
  TSMGPHead = packed record
    PacketLength: Longword; //包长度 = 包头+包体
    RequestID: Longword; //命令字
    SequenceID: Longword; //消息序号
  end;

  TSMGPLogin = packed record
    clientID: array[0..7] of char; //用户名
    AuthenticatorClient: array[0..15] of char; //认证
    LoginMode: byte; //登陆模式
    TimeStamp: Longword; //时间
    Version: byte; //系统版本号
  end;
  TLogin = packed record
    Head: TSMGPHead;
    body: TSMGPLogin;
  end;
  {上行包}
  PDeliver = ^TCTDeliver;
  TCTDeliver = packed record
    MsgID: array[0..9] of char; //网关产生的短消息流水号
    IsReport: byte; //是否状态报告(0=不是,1=是)
    MsgFormat: byte; //短消息格式
    RecvTime: array[0..13] of char; //短消息接收时间
    SrcTermID: array[0..20] of char; //短消息发送号码
    DestTermID: array[0..20] of char; //短消息接收号码
    MsgLength: byte; //短消息长度
    MsgContent: array[0..251] of char; //短信息内容
    Reserve: array[0..7] of char; //保留
  end;

  TSMGPLogin_resp = packed record
    Status: Longword;
    AuthenticatorServer: array[0..15] of char;
    Version: byte;
  end;

  TLogin_resp = packed record
    Head: TSMGPHead;
    body: TSMGPLogin_resp;
  end;
  {下行包1.3协议} //Endo Cancel
  {pSMGPSubmit = ^TSMGPSubmit;
  TSMGPSubmit = 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: array[0..20] of char;
    ChargeTermID: array[0..20] of char;
    DestTermIDCount: byte;
    DestTermID: array[0..21 * MAx_UserNumber - 1] of char;
    MsgLength: byte;
    MsgContent: array[0..251] of char; //string;
    Reserve: array[0..7] of char;
  end;}
  {-------------------------------------------------------------------------}

  
  {-------------------------------------------------------------------------}
  //按2.0协议修改下行包体结构
  TSMGPSubmit201 = packed record //包体1
    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; //2.0 与1.3协议区别在  FixedFee 字段与  FeeCode对换
    MsgFormat: byte;
    ValidTime: array[0..16] of char; //2.0协议不同于1.3协议就在于这2个字段值 非空是占17位
    AtTime: array[0..16] of char; //
  end;

  TSMGPSubmit2011 = packed record //包头+包体1
    Head: TSMGPHead;
    body: TSMGPSubmit201;
  end;
  //------------------------------------------------------------------  

  {TSMGPSubmit2021 = packed record //包体2
    ValidTime: array[0..16] of char; //2.0协议不同于1.3协议就在于这2个字段值 非空是占17位
    AtTime: array[0..16] of char; //
  end; }

 // TSMGPSubmit2022 = packed record //包体2
 //   ValidTime: char; //2.0协议不同于1.3协议就在于这2个字段值 为空是占1位
 //   AtTime: char; //
 // end;
  //------------------------------------------------------------------
  TSMGPSubmit203 = packed record //包体3
    SrcTermID: array[0..20] of char;
    ChargeTermID: array[0..20] of char;
    DestTermIDCount: byte;
    DestTermID: array[0..21 * MAX_UserNumber - 1] of char;
    MsgLength: byte;
    MsgContent: array[0..251] of char; //string;
    Reserve: array[0..7] of char;
  end;
  {-------------------------------------------------------------------------}
  {-------------------------------------------------------------------------}

  {TSubmit = packed record  //Endo Cancel
    Head: TSMGPHead;
    body: TSMGPSubmit;
  end;}
  //内部包结构定义
  PxSubmit = ^xSubmit; {//}
  xSubmit = packed record
    Resend: byte; //下发次数
    SequenceID: Longword; //包头序列号
    Then_DateTime: TDateTime;
    sSubmit: TTCSubmit;
  end;

  TDeliver = packed record
    Head: TSMGPHead;
    body: TTCDeliver;
  end;

  TSMGPDeliver_Resp = packed record {与回馈包体结构相同Submit_resp }
    MsgID: array[0..9] of char;
    Status: Longword;
  end;
  TSMGPSubmit_Resp = packed record {与回馈包体结构相同Submit_resp }
    MsgID: array[0..19] of char; //BCD10位解成20位
    Status: Longword;
  end;
  TDeliver_Resp = packed record
    Head: TSMGPHead;
    body: TSMGPDeliver_Resp;
  end;

  TSubmit_resp = packed record
    Head: TSMGPHead;
    body: TSMGPDeliver_Resp;
  end;

  pSubmitMid = ^TSubmitMid;
  TSubmitMid = packed record
    Mid: string;
    sequence: Longword;
  end;

  {下行回馈到中间服务器}
  PResponse = ^TSPResponse;
  TSPResponse = packed record
    Mid: string;
    Submit_resp: TSMGPSubmit_Resp;
  end;

  {拆机/停机}
  pCT_Free_Stop = ^TCT_Free_Stop;
  TCT_Free_Stop = packed record
    MsgID: string;
    SrcTermID: string;
    DestTermID: string;
    Free_Stop_time: string;
    Status: char;
  end;

  {内部协议}

  CTSMSHeader = packed record
    Total_Length: Longword;
    Command_ID: Word;
    Status_ID: Word;
    Sequence_ID: Word;
    Version: Word;
  end;

  TSPPack = packed record
    Header: CTSMSHeader;
    body: array[0..MAX_DATA_LEN - 1] of char;
  end;



  {function}
function writeXmlResponse(xSPResponse: TSPResponse): string;
function writeXmluserFeeSop(xCT_Free_Stop: TCT_Free_Stop): string;
implementation

function writeXmlResponse(xSPResponse: TSPResponse): string;
begin
  Result := '';
  Result := '<?xml version="1.0" encoding="UTF-8"?>';
  Result := Result + '<SubmitResp>';
  Result := Result + '<Mid>' + xSPResponse.Mid + '</Mid>';
  Result := Result + '<MsgID>' + xSPResponse.Submit_resp.MsgID + '</MsgID>';
  Result := Result + '<Status>' + inttostr(xSPResponse.Submit_resp.Status) + '</Status>';
  Result := Result + '</SubmitResp>';
end;
function writeXmluserFeeSop(xCT_Free_Stop: TCT_Free_Stop): string;
begin
  Result := '';
  Result := '<?xml version="1.0" encoding="UTF-8"?>';
  Result := Result + '<UserFreeStop>';
  Result := Result + '<MsgID>' + xCT_Free_Stop.MsgID + '</MsgID>';
  Result := Result + '<SrcTermID>' + xCT_Free_Stop.SrcTermID + '</SrcTermID>';
  Result := Result + '<DestTermID>' + xCT_Free_Stop.DestTermID + '</DestTermID>';
  Result := Result + '<Free_Stop_time>' + xCT_Free_Stop.Free_Stop_time + '</Free_Stop_time>';
  Result := Result + '<Status>' + xCT_Free_Stop.Status + '</Status>';
  Result := Result + '</UserFreeStop>';
end;

end.

⌨️ 快捷键说明

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