?? dxdnsservercore.pas
字號:
fOnCommandNS:=Value;
AddSimpleEvent(2,Value);
End;
Procedure TDXDNSServerCore.SetOnCommandMD(Value:DNSTSimpleEvent);
Begin
fOnCommandMD:=Value;
AddSimpleEvent(3,Value);
End;
Procedure TDXDNSServerCore.SetOnCommandMF(Value:DNSTSimpleEvent);
Begin
fOnCommandMF:=Value;
AddSimpleEvent(4,Value);
End;
Procedure TDXDNSServerCore.SetOnCommandCNAME(Value:DNSTSimpleEvent);
Begin
fOnCommandCNAME:=Value;
AddSimpleEvent(5,Value);
End;
Procedure TDXDNSServerCore.SetOnCommandSOA(Value:DNSTSimpleEvent);
Begin
fOnCommandSOA:=Value;
AddSimpleEvent(6,Value);
End;
Procedure TDXDNSServerCore.SetOnCommandMB(Value:DNSTSimpleEvent);
Begin
fOnCommandMB:=Value;
AddSimpleEvent(7,Value);
End;
Procedure TDXDNSServerCore.SetOnCommandMG(Value:DNSTSimpleEvent);
Begin
fOnCommandMG:=Value;
AddSimpleEvent(8,Value);
End;
Procedure TDXDNSServerCore.SetOnCommandMR(Value:DNSTSimpleEvent);
Begin
fOnCommandMR:=Value;
AddSimpleEvent(9,Value);
End;
Procedure TDXDNSServerCore.SetOnCommandNULL(Value:DNSTSimpleEvent);
Begin
fOnCommandNULL:=Value;
AddSimpleEvent(10,Value);
End;
Procedure TDXDNSServerCore.SetOnCommandWKS(Value:DNSTSimpleEvent);
Begin
fOnCommandWKS:=Value;
AddSimpleEvent(11,Value);
End;
Procedure TDXDNSServerCore.SetOnCommandPTR(Value:DNSTSimpleEvent);
Begin
fOnCommandPTR:=Value;
AddSimpleEvent(12,Value);
End;
Procedure TDXDNSServerCore.SetOnCommandHINFO(Value:DNSTSimpleEvent);
Begin
fOnCommandHINFO:=Value;
AddSimpleEvent(13,Value);
End;
Procedure TDXDNSServerCore.SetOnCommandMINFO(Value:DNSTSimpleEvent);
Begin
fOnCommandMINFO:=Value;
AddSimpleEvent(14,Value);
End;
Procedure TDXDNSServerCore.SetOnCommandMX(Value:DNSTSimpleEvent);
Begin
fOnCommandMX:=Value;
AddSimpleEvent(15,Value);
End;
Procedure TDXDNSServerCore.SetOnCommandTXT(Value:DNSTSimpleEvent);
Begin
fOnCommandTXT:=Value;
AddSimpleEvent(16,Value);
End;
Procedure TDXDNSServerCore.SetOnCommandRP(Value:DNSTSimpleEvent);
Begin
fOnCommandRP:=Value;
AddSimpleEvent(17,Value);
End;
Procedure TDXDNSServerCore.SetOnCommandAFSDB(Value:DNSTSimpleEvent);
Begin
fOnCommandAFSDB:=Value;
AddSimpleEvent(18,Value);
End;
Procedure TDXDNSServerCore.SetOnCommandX25(Value:DNSTSimpleEvent);
Begin
fOnCommandX25:=Value;
AddSimpleEvent(19,Value);
End;
Procedure TDXDNSServerCore.SetOnCommandISDN(Value:DNSTSimpleEvent);
Begin
fOnCommandISDN:=Value;
AddSimpleEvent(20,Value);
End;
Procedure TDXDNSServerCore.SetOnCommandRT(Value:DNSTSimpleEvent);
Begin
fOnCommandRT:=Value;
AddSimpleEvent(21,Value);
End;
Procedure TDXDNSServerCore.SetOnCommandOSINSAP(Value:DNSTSimpleEvent);
Begin
fOnCommandOSINSAP:=Value;
AddSimpleEvent(22,Value);
End;
Procedure TDXDNSServerCore.SetOnCommandAXFR(Value:DNSTSimpleEvent);
Begin
fOnCommandAXFR:=Value;
AddSimpleEvent(252,Value);
End;
Procedure TDXDNSServerCore.SetOnCommandMAILB(Value:DNSTSimpleEvent);
Begin
fOnCommandMAILB:=Value;
AddSimpleEvent(253,Value);
End;
Procedure TDXDNSServerCore.SetOnCommandMAILA(Value:DNSTSimpleEvent);
Begin
fOnCommandMAILA:=Value;
AddSimpleEvent(254,Value);
End;
Procedure TDXDNSServerCore.SetOnCommandALL(Value:DNSTSimpleEvent);
Begin
fOnCommandALL:=Value;
AddSimpleEvent(255,Value);
End;
(******************************************************************************
PROCESSSESSION:
If you want this CORE to process the parsing, you should call
this from your "OnNewConnect" implementation. This should be
right after your call to SayHello (optional).
******************************************************************************)
// QR=1bit
// OPCODE=4bits(0=query, 1=inverse query, 2=server status, 3-15 reserved.}
// AA=1bit (Authoritative flag}
// TC=1bit (Truncation flag}
// RD=1bit (Recursion desired)
// RA=1bit (Recursion available)
// Z=3bits (reserved)
// RCODE=4bites(0=no error, 1=format error, 2=server problem,
// 3=server cant find it, 4=query not supported,
// 6=not authorized to do this,6-15 reserved.)
procedure TDXDNSServerCore.ProcessSession(ClientThread: TDXClientThread);
var
S:String;
Loop:Integer;
WasHandled:Boolean;
Packet:PDXDNSQueryPacket;
QueryWord:Word;
OutData:Pointer;
Procedure DecodeFlags(W:Word);
Begin
With Packet^ do Begin
QR:=(W And $8000)=$8000; // 1bit
OpCode:=((W And $7800) Shr 11) And $000F; // 4bit
AA:=(W And $0400)=$0400; // 1bit
TC:=(W And $0200)=$0200; // 1bit
RD:=(W And $0100)=$0100; // 1bit
RA:=(W And $0080)=$0080; // 1bit
// z (reserved) // 3bit
RCode:=(W And $000F); // 4bit
End;
End;
Procedure CustomSwap(S:String;Position:Integer;Var Dest:Word);
Var
OWord:Word;
Begin
FastMove(S[Position],OWord,2);
SwapMove(OWord,Dest);
End;
begin
with ClientThread.Socket do begin
S:=ReadStr(CharactersToRead);
If S<>'' then Begin
if assigned({$IFDEF TLS_EDITION}OnReadFilter{$ELSE}OnFilter{$ENDIF}) then begin
Loop:=FilterRead(@S[1],OutData,Length(S),ClientThread);
SetLength(S,Loop);
If Assigned(OutData) then Begin
FastMove(TDXBSArray(OutData^),S[1],Loop);
{$IFDEF TLS_EDITION}OnReadFilter{$ELSE}OnFilter{$ENDIF}(ddFreePointer,nil,OutData,Loop,Loop,WasHandled,ClientThread) ;
End;
End;
End
Else Exit;
ProcessWindowsMessageQueue;
New(Packet);
// FillChar2(Packet^,Sizeof(TDXDNSQueryPacket),#0);
// ID=16bits
CustomSwap(S,1,Packet^.ID);
// QR,OPCODE,AA,TC,RD,RA,Z,RCODE=16bits
CustomSwap(S,3,QueryWord);
DecodeFlags(QueryWord);
// QDCOUNT
CustomSwap(S,5,Packet^.QDCount);
// ANCOUNT
CustomSwap(S,7,Packet^.ANCount);
// NSCOUNT
CustomSwap(S,9,Packet^.NSCount);
// ARCOUNT
CustomSwap(S,11,Packet^.ARCount);
Delete(S,1,12); // only thing left is the query.
Packet^.Query:=DecodeDomain(Copy(S,1,Length(S)-4));
Delete(S,1,Length(S)-4);
CustomSwap(S,1,Packet^.QueryType);
CustomSwap(S,3,Packet^.QueryClass);
Loop:=0;
WasHandled:=False;
While (Loop<fEventArray.Count) and (Not WasHandled) do Begin
If PDNSSimpleEvent(fEventArray[Loop]).Command=Packet^.QueryType then Begin
Case PDNSSimpleEvent(fEventArray[Loop]).Tag of
1:With Packet^ Do
if Assigned(PDNSSimpleEvent(fEventArray[Loop]).EventProcedure) then
DNSTSimpleEvent(PDNSSimpleEvent(fEventArray[Loop]).EventProcedure)(ClientThread,Packet);
End;
WasHandled:=True;
End
Else Inc(Loop);
End;
Dispose(Packet);
If Not WasHandled then Begin
if assigned(OnCommandOther) then
OnCommandOther(ClientThread,Packet,WasHandled);
end;
end;
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -