AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi IDFTP-Server - eigene Replys schreiben
Thema durchsuchen
Ansicht
Themen-Optionen

IDFTP-Server - eigene Replys schreiben

Ein Thema von Servi · begonnen am 3. Jan 2010 · letzter Beitrag vom 5. Jan 2010
Antwort Antwort
Servi

Registriert seit: 3. Jan 2010
3 Beiträge
 
#1

IDFTP-Server - eigene Replys schreiben

  Alt 3. Jan 2010, 20:08
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.
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#2

Re: IDFTP-Server - eigene Replys schreiben

  Alt 5. Jan 2010, 13:21
Hallo Servi,

Zitat von Servi:
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.
Ich sehe zwei Möglichkeiten:

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
Frederik
  Mit Zitat antworten Zitat
Servi

Registriert seit: 3. Jan 2010
3 Beiträge
 
#3

Re: IDFTP-Server - eigene Replys schreiben

  Alt 5. Jan 2010, 17:04
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
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#4

Re: IDFTP-Server - eigene Replys schreiben

  Alt 5. Jan 2010, 18:06
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
Frederik
  Mit Zitat antworten Zitat
Servi

Registriert seit: 3. Jan 2010
3 Beiträge
 
#5

Re: IDFTP-Server - eigene Replys schreiben

  Alt 5. Jan 2010, 19:42
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
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#6

Re: IDFTP-Server - eigene Replys schreiben

  Alt 5. Jan 2010, 19:45
Hi Servi,

Zitat von Servi:
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
Das freut mich War ich ja dicht dran, hätte mich noch etwas länger einlesen müssen... So ein Wunsch kommt ja selten vor. Hauptsache, es geht jetzt!

Viele Grüße,

Assertor

Frederik
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz