![]() |
IDFTP-Server - eigene Replys schreiben
Hallo, ich habe das folgende Problem, dass ich es nicht hinbekomme eigene Replys an die Clients zu schreiben...
Zum Beispiel beim wechseln des Verzeichnisses, wenn ich in der "procedure TFTPServer.IdFTPServer1ChangeDirectory(ASender: TIdFTPServerContext; var VDirectory: string);" bin. Also ich möchte dass neben dem "250 CWD Command successful." noch etwas anderes hinschreiben bzw dieses ersetzen. Ich habe versucht über die TIDReplys auf den Index 250 zuzugreifen, aber so läuft das ganze anscheinend nicht, und hoffe jemand hat schon mal damit Erfahrung gesammelt. |
Re: IDFTP-Server - eigene Replys schreiben
Hallo Servi,
Zitat:
1) Du kopierst die Datei IdResourceStringProtocols einfach in Dein Projektverzeichnis und passt die Indy ResourceStrings an. In Deinem Fall z.B. RSFTPCmdSuccessful. Danach einmal Build und die neue Unit wird genutzt. 2) Du nutzt, falls es um die Übersetzbarkeit geht, dxgettext / gnugettext oder ähnlich. Man könnte auch die Klasse TIdFTPServer ableiten und die Methode CmdCommandSuccessful(...) überschreiben. Da diese aber nicht virtual deklariert ist, mußt Du unter Umständen etwas tricksen (Reintroduce), damit der Compiler nicht mit Hinweisen meckert. Achtung: CmdCommandSuccessful wird für jedes positive Resultat genutzt, unabhängig vom Resultcode. Also nicht nur für CWD (250). Gruß Assertor |
Re: IDFTP-Server - eigene Replys schreiben
Hey, Danke erstmal für die Antwort :-)
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 :-( |
Re: IDFTP-Server - eigene Replys schreiben
Zitat:
Zitat:
Delphi-Quellcode:
Das Problem ist aber, das die BuiltIn-Commands den Default Handler CmdCommandSuccessful aufrufen. Da drin wird immer ein
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;
Delphi-Quellcode:
gemacht.
ASender.Reply.SetReply(AReplyCode, IndyFormat(RSFTPCmdSuccessful, [ASender.CommandHandler.Command]));
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 ![]() Gruß Assertor |
Re: IDFTP-Server - eigene Replys schreiben
Nochmals Danke Assertor^^
Also die Idee war wirklich gut, nach kurzem Testen merkte ich, dass deine Bedingung nicht ganz klappt, sondern so kann man das ganze testen: if ASender.Server.CommandHandlers.Items[i].Command = 'CWD', aber nichtsdestotrotz konnte ich den Reply-Text auf Biegen und Brechen nicht ändern, ob mit ASender.Server.CommandHandlers.BeginUpdate, über ASender.Server.CommandHandlers.Items[i].NormalReply.SetReply uvm^^ Habe sogar getestet und er hat mir meine Antwort in den Variablen richtig angezeigt aber dennoch die Standardausgabe CWD Command Successful ausgespuckt, nun dann bin ich aber auf was anderes aufmerksam geworden: ASender.Server.CommandHandlers.Items[i].Response.Add('foo'); Das ändert zwar die Ausgabe nicht, aber bei dem nächstem beliebigem Befehl (z.B: PWD kommt ja gleich nach CWD) wird "foo" ausgespuckt, löschen kann man dies mit ASender.Server.CommandHandlers.Items[i].Response.Clear; Dies reicht für das was ich wollte ^^ Also nochmals Danke für die Mühe :-) |
Re: IDFTP-Server - eigene Replys schreiben
Hi Servi,
Zitat:
Viele Grüße, Assertor :dp: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz