You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Implemented nonblocking FTPS data-channel handshakes
Key changes:
- Added an event-driven SChannel handshake state machine that preserves partial input/output across FD_READ and FD_WRITE events ([ssl.cpp (line 706)](C:/Projects/FileManager/src/plugins/ftp/ssl.cpp:706)).
- Kept incomplete TLS contexts separate from established connections, with cancellation and socket-swap cleanup ([sockets.h (line 136)](C:/Projects/FileManager/src/plugins/ftp/sockets.h:136)).
- Integrated the state machine into passive and active downloads, uploads, and keep-alive transfers ([datacon1.cpp (line 913)](C:/Projects/FileManager/src/plugins/ftp/datacon1.cpp:913), [datacon2.cpp (line 1162)](C:/Projects/FileManager/src/plugins/ftp/datacon2.cpp:1162)).
- Upload payload and EOF processing remain blocked until TLS authentication completes.
- Preserved application data arriving alongside the final TLS handshake record.
- The blocking handshake remains for control connections; per-file data connections no longer use it.
- Added a regression contract preventing data paths from reverting to blocking EncryptSocket calls ([NativeSafetyRegressionTests.cs (line 2856)](C:/Projects/FileManager/tests/FileManager.UiTests/NativeSafetyRegressionTests.cs:2856)).
Validation:
- FTP plug-in Debug x64 full build: succeeded using Visual Studio Community 2026 with incremental linking disabled.
- Native safety regression suite: 72/72 passed.
- git diff --check: passed.
- The default incremental build triggers an internal VS 2026 linker LNK1000 in the language resource DLL; /p:LinkIncremental=false builds the complete plug-in successfully.