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
There's no direct replacement for the `UserData` property, but you can use the feature collection too.
141
142
143
+
## Data connections
144
+
145
+
We're now using two factories to create data connections:
146
+
147
+
-[`ActiveDataConnectionFeatureFactory`](xref:FubarDev.FtpServer.DataConnection.ActiveDataConnectionFeatureFactory) for active data connections (`PORT`/`EPRT` commands)
148
+
-[`PassiveDataConnectionFeatureFactory`](xref:FubarDev.FtpServer.DataConnection.PassiveDataConnectionFeatureFactory) for passive data connections (`PASV`/`EPSV` commands)
149
+
150
+
This factories create a [`IFtpDataConnectionFeature`](xref:FubarDev.FtpServer.Features.IFtpDataConnectionFeature) which is used to create [`IFtpDataConnection`](xref:FubarDev.FtpServer.IFtpDataConnection) implementations. This allows us to abstract away the differences between active and passive data connections.
151
+
152
+
The function `IFtpConnection.CreateResponseSocket` was replaced by [`IFtpConnection.OpenDataConnectionAsync`](xref:FubarDev.FtpServer.IFtpConnection.OpenDataConnectionAsync) and returns a [`IFtpDataConnection`](xref:FubarDev.FtpServer.IFtpDataConnection) implementation. This function also takes care of SSL/TLS encryption as it wraps the [`IFtpDataConnection`](xref:FubarDev.FtpServer.IFtpDataConnection) implementation returned by the [`IFtpDataConnectionFeature`](xref:FubarDev.FtpServer.Features.IFtpDataConnectionFeature) into a new [`IFtpDataConnection`](xref:FubarDev.FtpServer.IFtpDataConnection) implementation with the help of the [`SecureDataConnectionWrapper`](xref:FubarDev.FtpServer.DataConnection.SecureDataConnectionWrapper).
153
+
154
+
The extension method `SendResponseAsync` on the `IFtpConnection` was replaced by [`SendDataAsync`](xref:FubarDev.FtpServer.ConnectionExtensions.SendDataAsync) and takes care of closing the [`IFtpDataConnection`](xref:FubarDev.FtpServer.IFtpDataConnection).
155
+
142
156
# FTP middleware
143
157
144
158
There are two types of middlewares:
@@ -258,14 +272,13 @@ and [`FtpCommandCollector`](xref:FubarDev.FtpServer.FtpCommandCollector).
258
272
## What's changed?
259
273
260
274
- Google drive upload without background uploader
275
+
- The `IFtpCommandHandler.GetExtensions()` is now deprecated as all extensions that were previously returned here have their own implementation now
261
276
- BREAKING: Usage of `ReadOnlySpan` in the FTP command collector
takes an [`IAccountInformation`](xref:FubarDev.FtpServer.IAccountInformation)
277
+
- BREAKING: [`IFileSystemClassFactory.Create`](xref:FubarDev.FtpServer.FileSystem.IFileSystemClassFactory.Create(FubarDev.FtpServer.IAccountInformation)) takes an [`IAccountInformation`](xref:FubarDev.FtpServer.IAccountInformation)
264
278
- BREAKING: The [`IMembershipProvider`](xref:FubarDev.FtpServer.AccountManagement.IMembershipProvider) is now asynchronous
265
279
- BREAKING: `FtpConnectionData.IsAnonymous` is obsolete, the anonymous user is now of type [`IAnonymousFtpUser`](xref:FubarDev.FtpServer.AccountManagement.IAnonymousFtpUser)
266
-
- The `IFtpCommandHandler.GetExtensions()` is now deprecated as all extensions that were previously returned here have
267
-
their own implementation now
268
280
- BREAKING: Moved [`PromiscuousPasv`](xref:FubarDev.FtpServer.PasvCommandOptions.PromiscuousPasv) into [`PasvCommandOptions`](xref:FubarDev.FtpServer.PasvCommandOptions)
281
+
- BREAKING: Removed property `PortAddress`, `TransferTypeCommandUsed`, and `PassiveSocketClient` from `FtpConnectionData`, because we're using a new [`IFtpDataConnection`](xref:FubarDev.FtpServer.IFtpDataConnection) abstraction
0 commit comments