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;