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

📄 cmppsocket.pas

📁 纯Delphi写的CMPP短信协议控件纯Delphi写的CMPP短信协议控件
💻 PAS
📖 第 1 页 / 共 3 页
字号:
    Stream.WriteBuffer(Msg.Version,1);
    Msg.TimeStamp:=intswap(Msg.TimeStamp);
    Stream.WriteBuffer(Msg.TimeStamp,4);
end;

procedure Write_Connect_Rep(Stream:TMemoryStream;Msg: TCMPP_Connect_REP);
begin
    Stream.WriteBuffer(Msg.Status,1);
    Stream.WriteBuffer(Msg.AuthenticatorISMG,16);
    Stream.WriteBuffer(Msg.Version,1);
end;

procedure Write_Deliver(Stream:TMemoryStream;Msg: TCMPP_Deliver);
begin
    Msg.Msg_Id:=int64swap(Msg.Msg_Id);
    Stream.WriteBuffer(Msg.Msg_Id,8);
    Stream.WriteBuffer(Msg.Destnation_id[1],21);
    Stream.WriteBuffer(Msg.Service_id[1],10);
    Stream.WriteBuffer(Msg.TP_pid,1);
    Stream.WriteBuffer(Msg.TP_udhi,1);
    Stream.WriteBuffer(Msg.Msg_Fmt,1);
    Stream.WriteBuffer(Msg.Src_terminal_id[1],21);
    Stream.WriteBuffer(Msg.Registered_Deliver,1);
    Stream.WriteBuffer(Msg.Msg_Length,1);
    if Msg.Registered_Deliver=0 then
        Stream.WriteBuffer(Msg.Msg_Content,Msg.Msg_Length)
    else begin
        Msg.Msg_Report.Msg_id:=int64swap(Msg.Msg_Report.Msg_id);
        Stream.WriteBuffer(Msg.Msg_Report.Msg_id,8);
        Stream.WriteBuffer(Msg.Msg_Report.Stat[1],7);
        Stream.WriteBuffer(Msg.Msg_Report.Submit_Time[1],10);
        Stream.WriteBuffer(Msg.Msg_Report.Done_Time[1],10);
        Stream.WriteBuffer(Msg.Msg_Report.Dest_terminal_id[1],21);
        Msg.Msg_Report.SMSC_Sequence:=intswap(Msg.Msg_Report.SMSC_Sequence);
        Stream.WriteBuffer(Msg.Msg_Report.SMSC_Sequence,4);
    end;
    Stream.WriteBuffer(#0#0#0#0#0#0#0#0,8);
end;

procedure Write_Deliver_REP(Stream:TMemoryStream;Msg: TCMPP_Deliver_Rep);
begin
    Msg.Msg_id:=int64swap(Msg.Msg_id);
    Stream.WriteBuffer(Msg.Msg_id,8);
    Stream.WriteBuffer(Msg.Result,1);
end;

procedure Write_Query(Stream:TMemoryStream;Msg: TCMPP_Query);
begin
    Stream.WriteBuffer(Msg.Time[1],8);
    Stream.WriteBuffer(Msg.Query_Type,1);
    Stream.WriteBuffer(Msg.Query_Code[1],10);
    Stream.WriteBuffer(#0#0#0#0#0#0#0#0,8);
end;

procedure Write_Query_Rep(Stream:TMemoryStream;Msg: TCMPP_QUERY_REP);
begin
    Stream.WriteBuffer(Msg.Time[1],8);
    Stream.WriteBuffer(Msg.Query_Type,1);
    Stream.WriteBuffer(Msg.Query_Code[1],10);
    Msg.MT_TLMsg:=intswap(Msg.MT_TLMsg);
    Msg.MT_Tlusr:=intswap(Msg.MT_Tlusr);
    Msg.MT_Scs:=intswap(Msg.MT_Scs);
    Msg.MT_WT:=intswap(Msg.MT_WT);
    Msg.MT_FL:=intswap(Msg.MT_FL);
    Msg.MO_Scs:=intswap(Msg.MO_Scs);
    Msg.MO_WT:=intswap(Msg.MO_WT);
    Msg.MO_FL:=intswap(Msg.MO_FL);
    Stream.WriteBuffer(Msg.MT_TLMsg,4);
    Stream.WriteBuffer(Msg.MT_Tlusr,4);
    Stream.WriteBuffer(Msg.MT_Scs,4);
    Stream.WriteBuffer(msg.MT_WT,4);
    Stream.WriteBuffer(Msg.MT_FL,4);
    Stream.WriteBuffer(Msg.MO_Scs,4);
    Stream.WriteBuffer(Msg.MO_WT,4);
    Stream.WriteBuffer(Msg.MO_FL,4);
end;

procedure Write_Submit(Stream:TMemoryStream;Msg: TCMPP_submit);
var
    tmp:Tstrings;
    b:String[21];
    i:Byte;
begin
    Msg.Msg_Id:=int64swap(Msg.Msg_Id);
    Stream.WriteBuffer(Msg.Msg_Id,8);
    Stream.WriteBuffer(Msg.Pk_total,1);
    Stream.WriteBuffer(Msg.Pk_number,1);
    Stream.WriteBuffer(Msg.Registered_Deliver,1);
    Stream.WriteBuffer(Msg.Msg_level,1);
    Stream.WriteBuffer(Msg.Fee_UserType,1);
    Stream.WriteBuffer(Msg.Service_id[1],10);
    Stream.WriteBuffer(Msg.Fee_terminal_id[1],21);
    Stream.WriteBuffer(Msg.TP_pid,1);
    Stream.WriteBuffer(Msg.TP_udhi,1);
    Stream.WriteBuffer(Msg.Msg_Fmt,1);
    Stream.WriteBuffer(Msg.Msg_src[1],6);
    Stream.WriteBuffer(Msg.FeeType[1],2);
    Stream.WriteBuffer(Msg.FeeCode[1],6);
    Stream.WriteBuffer(Msg.Valid_Time[1],17);
    Stream.WriteBuffer(Msg.At_Time[1],17);
    Stream.WriteBuffer(Msg.Src_terminal_id[1],21);
    Stream.WriteBuffer(Msg.DestUsr_tl,1);
    tmp:=TStringList.Create;
    tmp.Text:=Msg.Dest_terminal_id;
    for i:=0 to Msg.DestUsr_tl-1 do
    begin
        b:=#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0;
        b:=tmp.Strings[i];
        Stream.WriteBuffer(b[1],21);
    end;
    tmp.Free;
    Stream.WriteBuffer(Msg.Msg_Length,1);
    if Msg.Msg_Fmt in [0,15] then
        Stream.WriteBuffer(Msg.Msg_Content_Str[1],Msg.Msg_Length)
    else
        Stream.WriteBuffer(Msg.Msg_Content_array,Msg.Msg_Length);
    Stream.WriteBuffer(#0#0#0#0#0#0#0#0,8);
end;

procedure Write_Submit_Rep(Stream:TMemoryStream;Msg: TCMPP_sUBMIT_REP);
begin
    Msg.Msg_Id:=int64swap(Msg.Msg_Id);
    Stream.WriteBuffer(Msg.Msg_Id,8);
    Stream.WriteBuffer(Msg.Result,1);
end;

procedure WriteMsgHeader(Stream:TMemoryStream;Header: TCMPPMsgHeader);
begin
    Header.Total_Length:=intswap(Header.Total_Length);
    Header.Command_ID:=intswap(Header.Command_ID);
    Header.Sequence_ID:=intswap(Header.Sequence_ID);
    Stream.WriteBuffer(Header.Total_Length,4);
    Stream.WriteBuffer(Header.Command_ID,4);
    Stream.WriteBuffer(Header.Sequence_ID,4);
end;

procedure TCMPPSocket.CMPP_Terminate;
var
    Header:TCMPPMsgHeader;
    Stream:TMemoryStream;
begin
    Header.Total_Length:=12;
    Header.Command_ID:=CMP_Terminate;
    Header.Sequence_ID:=GetSeqId;
    Stream:=TMemoryStream.Create;
    WriteMsgHeader(Stream,Header);
    Send(Stream.Memory,12);
    Stream.Free;
end;

procedure TCMPPSocket.CMPP_Terminate_REP;
var
    Header:TCMPPMsgHeader;
    Stream:TMemoryStream;
begin
    Header.Total_Length:=12;
    Header.Command_ID:=CMP_Terminate_Rep;
    Header.Sequence_ID:=GetSeqId;
    Stream:=TMemoryStream.Create;
    WriteMsgHeader(Stream,Header);
    Send(Stream.Memory,12);
    Stream.Free;
end;



procedure TCMPPSocket.CMPP_Connect(SPID, Passwd: String; Version: Byte);
var
    md5:TIdHashMessageDigest5;
    Header:TCMPPMsgHeader;
    Msg:TCMPP_Connect;
    input:String;
    aTime:String;
    i:integer;
    Stream:TMemoryStream;
begin
    Header.Total_Length:=39;
    Header.Command_ID:=1;
    Header.Sequence_ID:=GetSeqid;
    setlength(input,25+length(Passwd));
    move(spid[1],input[1],6);
    for i:=length(spid)+1 to 15 do input[i]:=#0;
    move(passwd[1],input[15],length(passwd));
    aTime:=FormatDateTime('mmddhhnnss',now);
    for i:=1 to 10 do input[i+15+length(passwd)]:=aTime[i];
    md5:=TIdHashMessageDigest5.Create;
    Msg.AuthenticatorSP:=md5.HashValue(input);
    Msg.Source_Addr:=#0#0#0#0#0#0;
    Msg.Source_Addr:=SPID;
    Msg.Version:=Version;
    Msg.TimeStamp:=Strtoint(aTime);
    md5.Free;
    Stream:=TMemoryStream.Create;
    Stream.SetSize(Header.Total_Length);
    WriteMsgHeader(Stream,Header);
    Write_Connect(Stream,Msg);
    Send(Stream.Memory,Header.Total_Length);
    Stream.SaveToFile('c:\bin.txt');
    Stream.Free
end;

procedure TCMPPSocket.CMPP_Connect_Rep(Status: Byte;
  AuthenticatorSP: T4x4LongWordRecord;Passwd:String; Version: Byte);
var
    md5:TIdHashMessageDigest5;
    Header:TCMPPMsgHeader;
    Msg:TCMPP_Connect_Rep;
    input:String;
    i:integer;
    Stream:TMemoryStream;
begin
    Header.Total_Length:=30;
    Header.Command_ID:=CMP_Connect_REP;
    Header.Sequence_ID:=GetSeqID;
    Msg.Status:=Status;
    setLength(input,17+length(Passwd));
    Move(Status,input[1],1);
    Move(AuthenticatorSP,input[2],16);
    Move(passwd,input[17],length(passwd));
    md5:=TIdHashMessageDigest5.Create;
    Msg.AuthenticatorISMG:=md5.HashValue(input);
    md5.Free;
    msg.Version:=Version;
    Stream:=TMemoryStream.Create;
    WriteMsgHeader(Stream,Header);
    Write_Connect_Rep(Stream,Msg);;
    Send(Stream.Memory,Header.Total_Length);
    Stream.Free;
end;

procedure TCMPPSocket.CMPP_Deliver(Destnation_id, Service_id: String;
  Msg_Fmt: Byte; Src_terminal_id: String; isRD, Msg_Length: Byte;
  Msg_Content: TCharArray; var RMsg_id: int64; var Stat, Submit_Time,
  Done_Time, Dest_Terminal_id: String; var SMSC_sequence: longword);
var
    Msg:TCMPP_Deliver;
    Header:TCMPPMsgHeader;
    Stream:TMemoryStream;
begin
    Msg.Msg_Id:=GetCMPP_MSG_id('0');
    Msg.Destnation_id:=#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0;
    Msg.Destnation_id:=Destnation_id;
    Service_id:=#0#0#0#0#0#0#0#0#0#0;
    Service_id:=Service_id;
    Msg.TP_pid:=0;
    Msg.TP_udhi:=0;
    Msg.Msg_Fmt:=Msg_Fmt;
    Msg.Src_terminal_id:=#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0;
    Msg.Src_terminal_id:=Src_terminal_id;

    if Msg_Length>0  then
    begin
        Msg.Msg_Length:=Msg_Length;
        Msg.Msg_Content:=Msg_Content;
    end else
    begin
        Msg.Msg_Length:=60;
        Msg.Msg_Report.Msg_id:=RMsg_id;
        Msg.Msg_Report.Stat:=#0#0#0#0#0#0#0;
        Msg.Msg_Report.Stat:=Stat;
        Msg.Msg_Report.Submit_Time:=#0#0#0#0#0#0#0#0#0#0;
        Msg.Msg_Report.Submit_Time:=Submit_Time;
        Msg.Msg_Report.Done_Time:=#0#0#0#0#0#0#0#0#0#0;
        Msg.Msg_Report.Done_Time:=Done_Time;
        Msg.Msg_Report.Dest_terminal_id:=#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0;
        Msg.Msg_Report.Dest_terminal_id:=Dest_Terminal_id;
        Msg.Msg_Report.SMSC_Sequence:=SMSC_sequence;
    end;
    Header.Total_Length:=12+8+21+10+1+1+1+21+1+1+Msg.Msg_Length+8;
    Header.Command_ID:=CMP_Deliver;
    Header.Sequence_ID:=GetSeqId;
    Stream:=TMemoryStream.Create;
    WriteMsgHeader(Stream,Header);
    Write_Deliver(Stream,Msg);
    Send(Stream.Memory,Header.Total_Length);
    Stream.Free;
end;

procedure TCMPPSocket.CMPP_Deliver_REP(Msg_id: int64; Error: Byte);
var
    Header:TCMPPMsgHeader;
    Msg:TCMPP_Deliver_Rep;
    Stream:TMemoryStream;
begin
    Header.Total_Length:=21;
    Header.Command_ID:=CMP_Deliver_REP;
    Header.Sequence_ID:=GetSeqId;
    Msg.Msg_id:=Msg_id;
    Msg.Result:=Error;
    Stream:=TMemoryStream.Create;
    WriteMsgHeader(Stream,Header);
    Write_Deliver_REP(Stream,Msg);
    Send(Stream.Memory,Header.Total_Length);
    Stream.Free;
end;

procedure TCMPPSocket.CMPP_Submit(RD, Msg_Level: Byte; Service_id: String;
  Fee_UserType: byte; Fee_Terminal_id: String; Msg_Fmt: Byte; Msg_src,
  FeeType, FeeCode, Valid_Time, At_Time, Src_Terminal_id: String;
  Dest_terminal_id: TStrings; Msg_length: Byte; Msg_Content_Str: String;
  Msg_Content_Array: TcharArray);
var
    Header:TCMPPMsgHeader;
    Msg:TCMPP_Submit;
    i:integer;
    desTmp:String[21];
    Stream:TMemoryStream;
begin
    Msg.Msg_id:=GetCmpp_msg_id(FSmcid);
    Msg.Pk_total:=1;
    Msg.Pk_number:=1;
    Msg.Registered_Deliver:=RD;
    Msg.Msg_level:=Msg_Level;
    Msg.Fee_UserType:=Fee_UserType;
    Msg.Fee_terminal_id:=#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0;
    Msg.Fee_terminal_id:=Fee_terminal_id;
    Msg.TP_pid:=0;
    Msg.TP_udhi:=0;
    Msg.Msg_Fmt:=0;
    Msg.Msg_src:=#0#0#0#0#0#0;
    Msg.Msg_src:=Msg_src;
    Msg.FeeType:=#0#0;
    Msg.FeeType:=FeeType;
    Msg.FeeCode:=#0#0#0#0#0#0;
    Msg.FeeCode:=FeeCode;
    Msg.Valid_Time:=#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0;
    Msg.Valid_Time:=Valid_time;
    Msg.At_Time:=#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0;
    Msg.At_Time:=At_time;
    Msg.Src_terminal_id:=Src_terminal_id;
    Msg.DestUsr_tl:=Dest_Terminal_id.Count;
    setlength(Msg.Dest_terminal_id,Dest_terminal_id.Count*21);
    for i:=0 to Dest_Terminal_id.Count-1 do
    begin
        desTmp:=#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0;
        DesTmp:=Dest_Terminal_id.Strings[i];
        Move(DesTmp[1],Msg.Dest_Terminal_id[i*21+1],21);
    end;
    Msg.Msg_Length:=Msg_Length;
    if Msg.Msg_Fmt in [0,15] then
        Msg.Msg_Content_Str:=Msg_Content_Str
    else
        Move(Msg_Content_array[0],Msg.Msg_Content_array[0],Msg.Msg_Length);
    Header.Total_Length:=12+8+1+1+1+1+10+1+21+1+1+1+6+2+6+17+17+21+1
                         +(21*Msg.DestUsr_tl)+1+Msg.Msg_Length+8;
    Header.Command_ID:=CMP_Submit;
    Header.Sequence_ID:=GetSeqid;
    Stream:=TMemoryStream.Create;
    WriteMsgHeader(Stream,Header);
    Write_Submit(Stream,Msg);
    Send(Stream.Memory,Header.Total_Length);
    Stream.Free;
end;

procedure TCMPPSocket.CMPP_Submit_Rep(Msg_id: int64; Error: byte);
var
    Header:TCMPPMsgHeader;
    Msg:TCMPP_Submit_Rep;
    Stream:TMemoryStream;
begin
    Msg.Msg_Id:=Msg_id;
    Msg.Result:=Error;
    Header.Total_Length:=21;
    Header.Command_ID:=CMP_Submit_REP;
    Header.Sequence_ID:=GetSeqID;
    Stream:=TMemoryStream.Create;
    WriteMsgHeader(Stream,Header);
    Write_Submit_Rep(Stream,Msg);
    Send(Stream.Memory,Header.Total_Length);
    Stream.Free;
end;

procedure TCMPPSocket.CMPP_Query(aTime: String; Query_Type: Byte;
  var Query_Code: String);
var
    Header:TCMPPMsgHeader;
    Msg:TCMPP_Query;
    Stream:TMemoryStream;
begin
    Msg.Time:=#0#0#0#0#0#0#0#0;
    Msg.Time:=aTime;
    Msg.Query_Type:=Query_Type;
    Msg.Query_Code:=#0#0#0#0#0#0#0#0#0#0;
    if Query_Type<>0 then Msg.Query_Code:=Query_Code;
    Stream:=TMemoryStream.Create;
    Write_Query(Stream,Msg);
    self.Send(Stream.Memory,Header.Total_Length);
    Stream.Free;
end;

procedure TCMPPSocket.CMPP_Query_Rep(aTime: String; Query_Type: Byte;
  Query_Code: String; MT_TLMsg, MT_Tlusr, MT_Scs, MT_WT, MT_FL, MO_Scs,
  MO_WT, MO_FL: Longword);
begin

end;

function TCMPPSocket.GetMessage(var Msg_Header: TCMPPMsgHeader;
  var Msg_Body: Pointer): Byte;
var
    stream:TmemoryStream;
    aConnect:PCMPP_Connect;
    aConnect_Rep:PCMPP_Connect_Rep;
    aDeliver:PCMPP_Deliver;
    aDeliver_Rep:PCMPP_Deliver_Rep;
    aQuery:PCMPP_Query;
    aQuery_Rep:PCMPP_Query_Rep;
    aSubmit:PCMPP_Submit;
    aSubmit_Rep:PCMPP_Submit_Rep;
begin
    Result:=0;
    if Self.RcvdCount<12 then
    begin
        Msg_Body:=nil;
        Result:=255;
        exit;
    end;
    Stream:=TMemoryStream.Create;
    Stream.SetSize(self.RcvdCount);
    self.Receive(Stream.Memory,self.RcvdCount);
    Msg_Header:=ReadMsgHeader(Stream);
    try
        if Msg_Header.Total_Length>Stream.Size then
        begin
            Msg_Body:=nil ;
            Result:=1;
            exit;
        end;
        if Msg_Header.Command_ID = CMP_Connect then
        begin
            new(aConnect);
            aConnect^:=Read_Connect(Stream);
            Msg_Body:=aConnect;
            exit;
        end;
        if Msg_Header.Command_ID = CMP_Connect_Rep then
        begin
            new(aConnect_Rep);
            aConnect_Rep^:=Read_Connect_Rep(Stream);
            Msg_Body:=aConnect_Rep;
            exit;
        end;
        if Msg_Header.Command_ID = CMP_Terminate then
        begin
            Msg_body:=nil;
            exit;
        end;
        if Msg_Header.Command_ID = CMP_Terminate_REP then

⌨️ 快捷键说明

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