📄 cmppsocket.pas
字号:
begin
Msg_body:=nil;
exit;
end;
if Msg_Header.Command_ID = CMP_Submit then
begin
new(aSubmit);
aSubmit^:=Read_Submit(Stream);
Msg_Body:=aSubmit;
exit;
end;
if Msg_Header.Command_ID = CMP_Submit_REP then
begin
new(aSubmit_Rep);
aSubmit_Rep^:=Read_Submit_Rep(Stream);
Msg_Body:=aSubmit_Rep;
exit;
end;
if Msg_Header.Command_ID = CMP_Deliver then
begin
new(aDeliver);
aDeliver^:=Read_Deliver(Stream);
Msg_Body:=aDeliver;
exit
end;
if Msg_Header.Command_ID = CMP_Deliver_REP then
begin
new(aDeliver_Rep);
aDeliver_Rep^:=Read_Deliver_Rep(Stream);
Msg_Body:=aDeliver_Rep;
exit
end;
if Msg_Header.Command_ID = CMP_Query then
begin
new(aQuery);
aQuery^:=Read_Query(Stream);
Msg_Body:=aQuery;
exit;
end;
if Msg_Header.Command_ID = CMP_Query_REP then
begin
new(aQuery_Rep);
aQuery_Rep^:=Read_Query_Rep(Stream);
Msg_Body:=aQuery_Rep;
exit;
end;
{if Msg_Header.Command_ID = CMP_Cancel then
begin
new(aCancel);
aQuery^:=Read_Query(Stream);
Msg_Body:=aCancel;
exit;
end;
if Msg_Header.Command_ID = CMP_Cancel_REP then
begin
new(aCancel_Rep);
aQuery^:=Read_Query(Stream);
Msg_Body:=aCancel_Rep;
exit;
end;}
except
Msg_Body:=nil;
Result:=1;
exit;
end;
end;
{ TCMPPSocketClient }
procedure TCMPPSocketClient.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:=29;
Header.Command_ID:=1;
Header.Sequence_ID:=GetSeqid;
setlength(input,25+length(Passwd));
for i:=1 to length(spid) do input[i]:=spid[i];
for i:=length(spid)+1 to 15 do input[i]:=#0;
for i:=1 to length(passwd) do input[i+15]:=Passwd[i];
aTime:=FormatDateTime('mmddhhnnss',now);
for i:=1 to 10 do input[i+15+length(passwd)]:=aTime[i];
md5:=TIdHashMessageDigest5.Create;
Msg.AuthenticatorSP:=md5.HashValue(aTime);
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.Free
end;
procedure TCMPPSocketClient.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 TCMPPSocketClient.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 TCMPPSocketClient.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 TCMPPSocketClient.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+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 TCMPPSocketClient.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 TCMPPSocketClient.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 TCMPPSocketClient.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 TCMPPSocketClient.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;
msgLength:integer;
begin
Result:=0;
if Self.RcvdCount<12 then
begin
Msg_Body:=nil;
Result:=255;
exit;
end;
Stream:=TMemoryStream.Create;
msgLength:=self.RcvdCount;
Stream.SetSize(self.RcvdCount);
self.Receive(Stream.Memory,self.RcvdCount);
Msg_Header:=ReadMsgHeader(Stream);
try
if Msg_Header.Total_Length>MsgLength 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
begin
Msg_body:=nil;
exit;
end;
if Msg_Header.Command_ID = CMP_Submit then
begin
new(aSubmit);
aSubmit^:=Read_Submit(Stream);
Msg_Body:=aSubmit;
exit;
end;
if Msg_Header.Command_ID = CMP_Submit_REP then
begin
new(aSubmit_Rep);
aSubmit_Rep^:=Read_Submit_Rep(Stream);
Msg_Body:=aSubmit_Rep;
exit;
end;
if Msg_Header.Command_ID = CMP_Deliver then
begin
new(aDeliver);
aDeliver^:=Read_Deliver(Stream);
Msg_Body:=aDeliver;
exit
end;
if Msg_Header.Command_ID = CMP_Deliver_REP then
begin
new(aDeliver_Rep);
aDeliver_Rep^:=Read_Deliver_Rep(Stream);
Msg_Body:=aDeliver_Rep;
exit
end;
if Msg_Header.Command_ID = CMP_Query then
begin
new(aQuery);
aQuery^:=Read_Query(Stream);
Msg_Body:=aQuery;
exit;
end;
if Msg_Header.Command_ID = CMP_Query_REP then
begin
new(aQuery_Rep);
aQuery_Rep^:=Read_Query_Rep(Stream);
Msg_Body:=aQuery_Rep;
exit;
end;
{if Msg_Header.Command_ID = CMP_Cancel then
begin
new(aCancel);
aQuery^:=Read_Query(Stream);
Msg_Body:=aCancel;
exit;
end;
if Msg_Header.Command_ID = CMP_Cancel_REP then
begin
new(aCancel_Rep);
aQuery^:=Read_Query(Stream);
Msg_Body:=aCancel_Rep;
exit;
end;}
except
Msg_Body:=nil;
Result:=1;
exit;
end;
end;
procedure TCMPPSocketClient.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 TCMPPSocketClient.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;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -