Einzelnen Beitrag anzeigen

mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#6

AW: FTP Fehlermeldung vom Server beim Client (indy)

  Alt 19. Feb 2014, 13:38
Ich will versuchen wenn der Client sich einloggt und dabei ein Fehler auftritt der Client diese Meldung bekommt die ich ihm geben will.
RFC 959 (der FTP Standard) besagt, dass eine FTP Antwort des Servers aus einem dreistelligen numerische Code, gefolgt von (optionalem) Text besteht. Der Client kann, aber muss diesen Text nicht weiter verarbeiten (zum Beispiel dem Benutzer anzeigen). Falls Indy FTP Clients eingesetzt werden, kann man diese Beschränkung natürlich durch Anpassungen des Quelltextes umgehen.

In Indy 10.6 enthält die TIdFTPServer Klasse ein Event namens OnLoginFailureBanner, es wird bei einer erfolglosen Anmeldung indirekt aus der Methode DisconUser aufgerufen:

Delphi-Quellcode:
procedure TIdFTPServer.DisconUser(ASender: TIdCommand);
begin
  ASender.Disconnect := True;
  ASender.Reply.SetReply(421, RSFTPClosingConnection);
  if Assigned(OnLoginFailureBanner) then begin
    OnLoginFailureBanner(TIdFTPServerContext(ASender.Context), ASender.Reply);
    ASender.Reply.SetReply(421, ASender.Reply.Text.Text);
  end;
end;
Damit sollte es gehen, man muss der Komponente einen entsprechenden Ereignishandler für OnLoginFailureBanner zuweisen.
OnLoginFailureBanner ist vom Typ TIdOnBanner:
TIdOnBanner = procedure(ASender: TIdFTPServerContext; AGreeting : TIdReply) of object;

Daher würde der Eventhandler so oder ähnlich aussehen:
Delphi-Quellcode:
procedure IdFTServer1.OnLoginFailureBanner(ASender: TIdFTPServerContext; AGreeting : TIdReply);
begin
  AGreeting.Text.Text := 'Die Anmeldung war leider nicht erfolgreich. Das tut uns leid.';
end;
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat