Francois PIETTE wrote:
>> 1) Command Open succeeds.
>> 2) After the server received command User it closes the connection
>> (FIN/ACK).
>> 3) OnSessionClosed triggers with ErrCode 0.
>> 4) OnRequestDone triggers with ErrCode 0 and the status code from
>> previous request.
>> 
>> Would you agree that is a bug?
> 
> If the server closes the connection as a reaction to a command except
> quit, then OnrequestDone should report a failure code, probably
> WSAECONNRESET. 

Do you see anything obviously wrong in this fix?


procedure TCustomFtpCli.ControlSocketSessionClosed(
    Sender  : TObject;
    ErrCode : Word);
var
    LClosedState : TFtpState;
begin
    LClosedState := FState;
    if FConnected then begin
        FConnected := FALSE;
        if FState <> ftpAbort then
            StateChange(ftpNotConnected);
        if Assigned(FOnSessionClosed) then
            FOnSessionClosed(Self, ErrCode);
    end;
    if FState <> ftpAbort then
        StateChange(ftpInternalReady);
    if FRequestType <> ftpRqAbort then begin
        if (ErrCode <> 0) or ((FRequestType <> ftpQuitAsync) and   //<==
           (LClosedState in [ftpWaitingBanner, ftpWaitingResponse])) then begin 
//<==
            FLastResponse  := '500 Control connection closed - ' +
                               GetWinsockOrProxyErrorStr(ErrCode); // <== New 
function, not related to this fix
            FStatusCode    := 500;
            FRequestResult :=  FStatusCode;    { 06 apr 2002 }
            SetErrorMessage;
        end;
        TriggerRequestDone(FRequestResult);
    end;
end;


-- 
Arno Garrels
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

Reply via email to