📄 cmppsocket.pas
字号:
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 + -