Zitat von
Servi:
Hey, Danke erstmal für die Antwort
Gerne, hat etwas gedauert, aber doch noch gefunden
Zitat von
Servi:
Aber beide Möglichkeiten sind nicht ganz das was ich gesucht hatte, wollte es nämlich flexibel halten, denn würde ich das in der entsprechenden
Unit ändern, so wäre es nicht mehr änderbar...
Gibt es sonst vll. eine Möglichkeit einfach zu dem Reply etwas hinzuzufügen? Bei den manuel erstellten befehlen, z.b SITE USER, ( procedure TFTPServer.IdFTPServer1SITECommands1Command(ASende r: TIdCommand); ) etc. bekomm ich diesen ASender als Tidcommand übergeben, und ich kann die Antwort ganz einfach mit ASender.Reply.SetReply(200, 'Meine Antwort') wählen, sowas habe ich in den vordefinierten Ereignismethoden leider nicht gefunden, dort gibts zwar auch TIDReply, nur komm ich mit dieser nicht zurecht
Hmm, Du könntest versuchen durch die IdFTPServer.CommandHandlers.Items zu iterieren und NormalReply.Text (bzw. Text.Text) zu ersetzen:
Delphi-Quellcode:
var
i: Integer;
begin
...
for i := 0 to IdFTPServer1.CommandHandlers.Count - 1 do
begin
if IdFTPServer1.CommandHandlers.Items[i].NameIs('CWD') then
IdFTPServer1.CommandHandlers.Items[i].NormalReply.Text.Text := 'foo';
end;
end;
Das Problem ist aber, das die BuiltIn-Commands den Default Handler CmdCommandSuccessful aufrufen. Da drin wird immer ein
ASender.Reply.SetReply(AReplyCode, IndyFormat(RSFTPCmdSuccessful, [ASender.CommandHandler.Command]));
gemacht.
Also wird die Successful Meldung immer Code + ResourceString sein.
Gerade noch eine Idee: Was auch noch ginge, wäre den ResourceString zu hooken... Für ein Beispiel zum Hooken schau Dir mal den
Beitrag von Peter Below in den Delphi Newsgroups dazu an.
Gruß Assertor