(08-30-2019, 05:50 AM)PeakTibor Wrote: The requested sequnce of FTP commands/activities with this Visa server is as follows:
- AUTH TLS
- TLS handshake
- PBSZ 0
- PROT P (Data channel must be encrypted)
- USER, PASS
- CCC (if Clear Command Channel have to be used)
Is it possible with the current idFTP solution to follow this?
Possible, but not in a straight-forward manner.
TIdFTP does have SendPBSZ() and SendPROT() methods, which you can call whenever you want. However, they are protected methods, so you would need to use a descendant/accessor class to reach them, as well as to set TIdFTP.FDataSettingsSent=True so that TIdFTP.SendDataSettings() does not send its own PBSZ/PROT/CCC commands.
The TIdFTP.Login() method does not natively allow you to send custom commands after it sends AUTH and performs the TLS handshake, and before it sends USER/PASS/ACCT, so you would have to handle the login sequence manually. You could set TIdFTP.AutoLogin=False and handle the entire login sequence manually. Or, you could set TIdFTP.ProxySettings.ProxyType=fpcmCustomProxy and use the TIdFTP.OnCustomFTPProxy event to send PBSZ, PROT, and USER/PASS after TIdFTP.Login() sends AUTH and performs the TLS handshake for you.
That just leaves CCC, which you can disable by setting TIdFTP.UseCCC=False and then send it manually when needed.