ftp_server.h
Go to the documentation of this file.
1 /**
2  * @file ftp_server.h
3  * @brief FTP server (File Transfer Protocol)
4  *
5  * @section License
6  *
7  * SPDX-License-Identifier: GPL-2.0-or-later
8  *
9  * Copyright (C) 2010-2026 Oryx Embedded SARL. All rights reserved.
10  *
11  * This file is part of CycloneTCP Open.
12  *
13  * This program is free software; you can redistribute it and/or
14  * modify it under the terms of the GNU General Public License
15  * as published by the Free Software Foundation; either version 2
16  * of the License, or (at your option) any later version.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with this program; if not, write to the Free Software Foundation,
25  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
26  *
27  * @author Oryx Embedded SARL (www.oryx-embedded.com)
28  * @version 2.6.2
29  **/
30 
31 #ifndef _FTP_SERVER_H
32 #define _FTP_SERVER_H
33 
34 //Dependencies
35 #include "core/net.h"
36 #include "core/socket.h"
37 #include "fs_port.h"
38 
39 //FTP server support
40 #ifndef FTP_SERVER_SUPPORT
41  #define FTP_SERVER_SUPPORT ENABLED
42 #elif (FTP_SERVER_SUPPORT != ENABLED && FTP_SERVER_SUPPORT != DISABLED)
43  #error FTP_SERVER_SUPPORT parameter is not valid
44 #endif
45 
46 //FTP over TLS
47 #ifndef FTP_SERVER_TLS_SUPPORT
48  #define FTP_SERVER_TLS_SUPPORT DISABLED
49 #elif (FTP_SERVER_TLS_SUPPORT != ENABLED && FTP_SERVER_TLS_SUPPORT != DISABLED)
50  #error FTP_SERVER_TLS_SUPPORT parameter is not valid
51 #endif
52 
53 //Stack size required to run the FTP server
54 #ifndef FTP_SERVER_STACK_SIZE
55  #define FTP_SERVER_STACK_SIZE 650
56 #elif (FTP_SERVER_STACK_SIZE < 1)
57  #error FTP_SERVER_STACK_SIZE parameter is not valid
58 #endif
59 
60 //Priority at which the FTP server should run
61 #ifndef FTP_SERVER_PRIORITY
62  #define FTP_SERVER_PRIORITY OS_TASK_PRIORITY_NORMAL
63 #endif
64 
65 //Maximum number of simultaneous connections
66 #ifndef FTP_SERVER_MAX_CONNECTIONS
67  #define FTP_SERVER_MAX_CONNECTIONS 10
68 #elif (FTP_SERVER_MAX_CONNECTIONS < 1)
69  #error FTP_SERVER_MAX_CONNECTIONS parameter is not valid
70 #endif
71 
72 //Maximum time the server will wait before closing the connection
73 #ifndef FTP_SERVER_TIMEOUT
74  #define FTP_SERVER_TIMEOUT 60000
75 #elif (FTP_SERVER_TIMEOUT < 1000)
76  #error FTP_SERVER_TIMEOUT parameter is not valid
77 #endif
78 
79 //FTP server tick interval
80 #ifndef FTP_SERVER_TICK_INTERVAL
81  #define FTP_SERVER_TICK_INTERVAL 1000
82 #elif (FTP_SERVER_TICK_INTERVAL < 100)
83  #error FTP_SERVER_TICK_INTERVAL parameter is not valid
84 #endif
85 
86 //Maximum length of the pending connection queue
87 #ifndef FTP_SERVER_BACKLOG
88  #define FTP_SERVER_BACKLOG 4
89 #elif (FTP_SERVER_BACKLOG < 1)
90  #error FTP_SERVER_BACKLOG parameter is not valid
91 #endif
92 
93 //Maximum line length
94 #ifndef FTP_SERVER_MAX_LINE_LEN
95  #define FTP_SERVER_MAX_LINE_LEN 255
96 #elif (FTP_SERVER_MAX_LINE_LEN < 64)
97  #error FTP_SERVER_MAX_LINE_LEN parameter is not valid
98 #endif
99 
100 //Size of buffer used for input/output operations
101 #ifndef FTP_SERVER_BUFFER_SIZE
102  #define FTP_SERVER_BUFFER_SIZE 1024
103 #elif (FTP_SERVER_BUFFER_SIZE < 128)
104  #error FTP_SERVER_BUFFER_SIZE parameter is not valid
105 #endif
106 
107 //Maximum size of root directory
108 #ifndef FTP_SERVER_MAX_ROOT_DIR_LEN
109  #define FTP_SERVER_MAX_ROOT_DIR_LEN 63
110 #elif (FTP_SERVER_MAX_ROOT_DIR_LEN < 7)
111  #error FTP_SERVER_MAX_ROOT_DIR_LEN parameter is not valid
112 #endif
113 
114 //Maximum user name length
115 #ifndef FTP_SERVER_MAX_USERNAME_LEN
116  #define FTP_SERVER_MAX_USERNAME_LEN 63
117 #elif (FTP_SERVER_MAX_USERNAME_LEN < 7)
118  #error FTP_SERVER_MAX_USERNAME_LEN parameter is not valid
119 #endif
120 
121 //Maximum path length
122 #ifndef FTP_SERVER_MAX_PATH_LEN
123  #define FTP_SERVER_MAX_PATH_LEN 255
124 #elif (FTP_SERVER_MAX_PATH_LEN < 7)
125  #error FTP_SERVER_MAX_PATH_LEN parameter is not valid
126 #endif
127 
128 //Minimum buffer size for TCP sockets
129 #ifndef FTP_SERVER_MIN_TCP_BUFFER_SIZE
130  #define FTP_SERVER_MIN_TCP_BUFFER_SIZE 1430
131 #elif (FTP_SERVER_MIN_TCP_BUFFER_SIZE < 512)
132  #error FTP_SERVER_MIN_TCP_BUFFER_SIZE parameter is not valid
133 #endif
134 
135 //Maximum buffer size for TCP sockets
136 #ifndef FTP_SERVER_MAX_TCP_BUFFER_SIZE
137  #define FTP_SERVER_MAX_TCP_BUFFER_SIZE 2860
138 #elif (FTP_SERVER_MAX_TCP_BUFFER_SIZE < 512)
139  #error FTP_SERVER_MAX_TCP_BUFFER_SIZE parameter is not valid
140 #endif
141 
142 //TX buffer size for TLS connections
143 #ifndef FTP_SERVER_TLS_TX_BUFFER_SIZE
144  #define FTP_SERVER_TLS_TX_BUFFER_SIZE 4096
145 #elif (FTP_SERVER_TLS_TX_BUFFER_SIZE < 512)
146  #error FTP_SERVER_TLS_TX_BUFFER_SIZE parameter is not valid
147 #endif
148 
149 //Minimum RX buffer size for TLS connections
150 #ifndef FTP_SERVER_MIN_TLS_RX_BUFFER_SIZE
151  #define FTP_SERVER_MIN_TLS_RX_BUFFER_SIZE 2048
152 #elif (FTP_SERVER_MIN_TLS_RX_BUFFER_SIZE < 512)
153  #error FTP_SERVER_MIN_TLS_RX_BUFFER_SIZE parameter is not valid
154 #endif
155 
156 //Maximum RX buffer size for TLS connections
157 #ifndef FTP_SERVER_MAX_TLS_RX_BUFFER_SIZE
158  #define FTP_SERVER_MAX_TLS_RX_BUFFER_SIZE 16384
159 #elif (FTP_SERVER_MAX_TLS_RX_BUFFER_SIZE < 512)
160  #error FTP_SERVER_MAX_TLS_RX_BUFFER_SIZE parameter is not valid
161 #endif
162 
163 //Passive port range (lower limit)
164 #ifndef FTP_SERVER_PASSIVE_PORT_MIN
165  #define FTP_SERVER_PASSIVE_PORT_MIN 48128
166 #elif (FTP_SERVER_PASSIVE_PORT_MIN < 1024)
167  #error FTP_SERVER_PASSIVE_PORT_MIN parameter is not valid
168 #endif
169 
170 //Passive port range (upper limit)
171 #ifndef FTP_SERVER_PASSIVE_PORT_MAX
172  #define FTP_SERVER_PASSIVE_PORT_MAX 49151
173 #elif (FTP_SERVER_PASSIVE_PORT_MAX <= FTP_SERVER_PASSIVE_PORT_MIN || FTP_SERVER_PASSIVE_PORT_MAX > 65535)
174  #error FTP_SERVER_PASSIVE_PORT_MAX parameter is not valid
175 #endif
176 
177 //Application specific context
178 #ifndef FTP_SERVER_PRIVATE_CONTEXT
179  #define FTP_SERVER_PRIVATE_CONTEXT
180 #endif
181 
182 //Maximum command length
183 #define FTP_SERVER_MAX_COMMAND_LEN FTP_SERVER_MAX_LINE_LEN
184 //Maximum response length
185 #define FTP_SERVER_MAX_RESPONSE_LEN MAX(FTP_SERVER_MAX_LINE_LEN, FTP_SERVER_MAX_PATH_LEN + 32)
186 
187 //TLS supported?
188 #if (FTP_SERVER_TLS_SUPPORT == ENABLED)
189  #include "core/crypto.h"
190  #include "tls/tls.h"
191  #include "tls/tls_ticket.h"
192 #endif
193 
194 //FTP port number
195 #define FTP_PORT 21
196 //FTP data port number
197 #define FTP_DATA_PORT 20
198 
199 //FTPS port number (implicit mode)
200 #define FTPS_PORT 990
201 //FTPS data port number (implicit mode)
202 #define FTPS_DATA_PORT 989
203 
204 //Forward declaration of FtpServerContext structure
205 struct _FtpServerContext;
206 #define FtpServerContext struct _FtpServerContext
207 
208 //Forward declaration of FtpClientConnection structure
209 struct _FtpClientConnection;
210 #define FtpClientConnection struct _FtpClientConnection
211 
212 //C++ guard
213 #ifdef __cplusplus
214 extern "C" {
215 #endif
216 
217 
218 /**
219  * @brief Channel state
220  **/
221 
222 typedef enum
223 {
245 
246 
247 /**
248  * @brief Security modes
249  **/
250 
251 typedef enum
252 {
257 
258 
259 /**
260  * @brief FTP server access status
261  **/
262 
263 typedef enum
264 {
269 
270 
271 /**
272  * @brief File permissions
273  **/
274 
275 typedef enum
276 {
279  FTP_FILE_PERM_WRITE = 0x04
281 
282 
283 /**
284  * @brief Connection callback function
285  **/
286 
288  const IpAddr *clientIpAddr, uint16_t clientPort);
289 
290 
291 /**
292  * @brief Disconnection callback function
293  **/
294 
296  const IpAddr *clientIpAddr, uint16_t clientPort);
297 
298 
299 //TLS supported?
300 #if (FTP_SERVER_TLS_SUPPORT == ENABLED)
301 
302 /**
303  * @brief TLS initialization callback function
304  **/
305 
307  TlsContext *tlsContext);
308 
309 #endif
310 
311 
312 /**
313  * @brief User verification callback function
314  **/
315 
317  const char_t *user);
318 
319 
320 /**
321  * @brief Password verification callback function
322  **/
323 
325  const char_t *user, const char_t *password);
326 
327 
328 /**
329  * @brief Callback used to retrieve file permissions
330  **/
331 
333  const char_t *user, const char_t *path);
334 
335 
336 /**
337  * @brief Unknown command callback function
338  **/
339 
341  const char_t *command, const char_t *param);
342 
343 
344 /**
345  * @brief FTP server settings
346  **/
347 
348 typedef struct
349 {
350  OsTaskParameters task; ///<Task parameters
351  NetContext *netContext; ///<TCP/IP stack context
352  NetInterface *interface; ///<Underlying network interface
353  uint16_t port; ///<FTP command port number
354  uint16_t dataPort; ///<FTP data port number
355  uint16_t passivePortMin; ///<Passive port range (lower value)
356  uint16_t passivePortMax; ///<Passive port range (upper value)
357  Ipv4Addr publicIpv4Addr; ///<Public IPv4 address to be used in PASV replies
358  uint_t mode; ///<Security modes
359  uint_t maxConnections; ///<Maximum number of client connections
360  FtpClientConnection *connections; ///<Client connections
361  const char_t *rootDir; ///<Root directory
362  FtpServerConnectCallback connectCallback; ///<Connection callback function
363  FtpServerDisconnectCallback disconnectCallback; ///<Disconnection callback function
364 #if (FTP_SERVER_TLS_SUPPORT == ENABLED)
365  FtpServerTlsInitCallback tlsInitCallback; ///<TLS initialization callback function
366 #endif
367  FtpServerCheckUserCallback checkUserCallback; ///<User verification callback function
368  FtpServerCheckPasswordCallback checkPasswordCallback; ///<Password verification callback function
369  FtpServerGetFilePermCallback getFilePermCallback; ///<Callback used to retrieve file permissions
370  FtpServerUnknownCommandCallback unknownCommandCallback; ///<Unknown command callback function
372 
373 
374 /**
375  * @brief Control or data channel
376  **/
377 
378 typedef struct
379 {
380  FtpServerChannelState state; ///<Channel state
381  Socket *socket; ///<Underlying TCP socket
382 #if (FTP_SERVER_TLS_SUPPORT == ENABLED)
383  TlsContext *tlsContext; ///<TLS context
384 #endif
386 
387 
388 /**
389  * @brief FTP client connection
390  **/
391 
393 {
394  FtpServerContext *context; ///<FTP server context
395  NetInterface *interface; ///<Underlying network interface
396  bool_t userLoggedIn; ///<This flag tells whether the user is logged in
397  systime_t timestamp; ///<Time stamp to manage timeout
398  FtpServerChannel controlChannel; ///<Control channel
399  FtpServerChannel dataChannel; ///<Data channel
400  FsFile *file; ///<File pointer
401  FsDir *dir; ///<Directory pointer
402  bool_t passiveMode; ///<Passive data transfer
403  IpAddr remoteIpAddr; ///<Remote IP address
404  uint16_t remotePort; ///<Remote port number
406  char_t rootDir[FTP_SERVER_MAX_ROOT_DIR_LEN + 1]; ///<Root directory
407  char_t currentDir[FTP_SERVER_MAX_PATH_LEN + 1]; ///<Current directory
409  char_t command[FTP_SERVER_MAX_COMMAND_LEN + 1]; ///<Command buffer
410  size_t commandLen; ///<Number of bytes available in the command buffer
411  char_t response[FTP_SERVER_MAX_RESPONSE_LEN + 1]; ///<Response buffer
412  size_t responseLen; ///<Number of bytes available in the response buffer
413  size_t responsePos; ///<Current position in the response buffer
414  char_t buffer[FTP_SERVER_BUFFER_SIZE]; ///<Memory buffer for input/output operations
415  size_t bufferLength; ///<Length of the buffer, in bytes
416  size_t bufferPos; ///<Current position in the buffer
417 };
418 
419 
420 /**
421  * @brief FTP server context
422  **/
423 
425 {
426  NetContext *netContext; ///<TCP/IP stack context
427  NetInterface *interface; ///<Underlying network interface
428  uint16_t port; ///<FTP command port number
429  uint16_t dataPort; ///<FTP data port number
430  uint16_t passivePortMin; ///<Passive port range (lower value)
431  uint16_t passivePortMax; ///<Passive port range (upper value)
432  Ipv4Addr publicIpv4Addr; ///<Public IPv4 address to be used in PASV replies
433  uint_t mode; ///<Security modes
434  uint_t maxConnections; ///<Maximum number of client connections
435  FtpClientConnection *connections; ///<Client connections
436  char_t rootDir[FTP_SERVER_MAX_ROOT_DIR_LEN + 1]; ///<Root directory
437  FtpServerConnectCallback connectCallback; ///<Connection callback function
438  FtpServerDisconnectCallback disconnectCallback; ///<Disconnection callback function
439 #if (FTP_SERVER_TLS_SUPPORT == ENABLED)
440  FtpServerTlsInitCallback tlsInitCallback; ///<TLS initialization callback function
441 #endif
442  FtpServerCheckUserCallback checkUserCallback; ///<User verification callback function
443  FtpServerCheckPasswordCallback checkPasswordCallback; ///<Password verification callback function
444  FtpServerGetFilePermCallback getFilePermCallback; ///<Callback used to retrieve file permissions
445  FtpServerUnknownCommandCallback unknownCommandCallback; ///<Unknown command callback function
446  bool_t running; ///<Operational state of the FTP server
447  bool_t stop; ///<Stop request
448  OsEvent event; ///<Event object used to poll the sockets
449  OsTaskParameters taskParams; ///<Task parameters
450  OsTaskId taskId; ///<Task identifier
451  Socket *socket; ///<Listening socket
452  uint16_t passivePort; ///<Current passive port number
453  SocketEventDesc eventDesc[2 * FTP_SERVER_MAX_CONNECTIONS + 1]; ///<The events the application is interested in
454 #if (FTP_SERVER_TLS_SUPPORT == ENABLED && TLS_TICKET_SUPPORT == ENABLED)
455  TlsTicketContext tlsTicketContext; ///<TLS ticket encryption context
456 #endif
457  FTP_SERVER_PRIVATE_CONTEXT ///<Application specific context
458 };
459 
460 
461 //FTP server related functions
463 
465  const FtpServerSettings *settings);
466 
469 
471  const char_t *rootDir);
472 
474  const char_t *homeDir);
475 
476 void ftpServerTask(FtpServerContext *context);
477 
478 void ftpServerDeinit(FtpServerContext *context);
479 
480 //C++ guard
481 #ifdef __cplusplus
482 }
483 #endif
484 
485 #endif
size_t responsePos
Current position in the response buffer.
Definition: ftp_server.h:413
#define FtpServerContext
Definition: ftp_server.h:206
@ FTP_CHANNEL_STATE_RECEIVE
Definition: ftp_server.h:229
OsTaskParameters taskParams
Task parameters.
Definition: ftp_server.h:449
Control or data channel.
Definition: ftp_server.h:379
#define NetContext
Definition: net.h:36
uint_t(* FtpServerGetFilePermCallback)(FtpClientConnection *connection, const char_t *user, const char_t *path)
Callback used to retrieve file permissions.
Definition: ftp_server.h:332
error_t(* FtpServerUnknownCommandCallback)(FtpClientConnection *connection, const char_t *command, const char_t *param)
Unknown command callback function.
Definition: ftp_server.h:340
int bool_t
Definition: compiler_port.h:63
Socket * socket
Listening socket.
Definition: ftp_server.h:451
NetContext * netContext
TCP/IP stack context.
Definition: ftp_server.h:426
uint16_t passivePortMin
Passive port range (lower value)
Definition: ftp_server.h:355
OsTaskId taskId
Task identifier.
Definition: ftp_server.h:450
FtpServerConnectCallback connectCallback
Connection callback function.
Definition: ftp_server.h:362
char_t response[FTP_SERVER_MAX_RESPONSE_LEN+1]
Response buffer.
Definition: ftp_server.h:411
IP network address.
Definition: ip.h:90
FtpClientConnection * connections
Client connections.
Definition: ftp_server.h:435
FtpServerChannelState
Channel state.
Definition: ftp_server.h:223
@ FTP_CHANNEL_STATE_IDLE
Definition: ftp_server.h:227
uint16_t dataPort
FTP data port number.
Definition: ftp_server.h:429
@ FTP_ACCESS_ALLOWED
Definition: ftp_server.h:266
@ FTP_CHANNEL_STATE_RNFR
Definition: ftp_server.h:239
char_t rootDir[FTP_SERVER_MAX_ROOT_DIR_LEN+1]
Root directory.
Definition: ftp_server.h:436
Event object.
uint_t mode
Security modes.
Definition: ftp_server.h:433
#define FTP_SERVER_MAX_PATH_LEN
Definition: ftp_server.h:123
error_t ftpServerInit(FtpServerContext *context, const FtpServerSettings *settings)
FTP server initialization.
Definition: ftp_server.c:123
#define FTP_SERVER_MAX_USERNAME_LEN
Definition: ftp_server.h:116
FtpServerChannel controlChannel
Control channel.
Definition: ftp_server.h:398
void(* FtpServerDisconnectCallback)(FtpClientConnection *connection, const IpAddr *clientIpAddr, uint16_t clientPort)
Disconnection callback function.
Definition: ftp_server.h:295
FtpServerConnectCallback connectCallback
Connection callback function.
Definition: ftp_server.h:437
@ FTP_SERVER_MODE_EXPLICIT_TLS
Definition: ftp_server.h:255
#define FTP_SERVER_MAX_RESPONSE_LEN
Definition: ftp_server.h:185
FTP server context.
Definition: ftp_server.h:425
NetInterface * interface
Underlying network interface.
Definition: ftp_server.h:352
@ FTP_CHANNEL_STATE_SHUTDOWN_TLS
Definition: ftp_server.h:240
FtpServerContext * context
FTP server context.
Definition: ftp_server.h:394
void ftpServerTask(FtpServerContext *context)
FTP server task.
Definition: ftp_server.c:473
NetInterface * interface
Underlying network interface.
Definition: ftp_server.h:395
FtpServerUnknownCommandCallback unknownCommandCallback
Unknown command callback function.
Definition: ftp_server.h:445
uint16_t dataPort
FTP data port number.
Definition: ftp_server.h:354
FtpAccessStatus
FTP server access status.
Definition: ftp_server.h:264
uint16_t remotePort
Remote port number.
Definition: ftp_server.h:404
Directory descriptor.
Definition: fs_port_posix.h:60
char_t buffer[FTP_SERVER_BUFFER_SIZE]
Memory buffer for input/output operations.
Definition: ftp_server.h:414
#define FTP_SERVER_MAX_ROOT_DIR_LEN
Definition: ftp_server.h:109
uint32_t Ipv4Addr
IPv4 network address.
Definition: ipv4.h:323
uint_t mode
Security modes.
Definition: ftp_server.h:358
Structure describing socket events.
Definition: socket.h:433
@ FTP_PASSWORD_REQUIRED
Definition: ftp_server.h:267
uint16_t passivePortMax
Passive port range (upper value)
Definition: ftp_server.h:356
void ftpServerGetDefaultSettings(FtpServerSettings *settings)
Initialize settings with default values.
Definition: ftp_server.c:61
uint_t(* FtpServerCheckPasswordCallback)(FtpClientConnection *connection, const char_t *user, const char_t *password)
Password verification callback function.
Definition: ftp_server.h:324
FTP server settings.
Definition: ftp_server.h:349
uint16_t passivePortMax
Passive port range (upper value)
Definition: ftp_server.h:431
@ FTP_CHANNEL_STATE_CLOSED
Definition: ftp_server.h:224
FtpServerGetFilePermCallback getFilePermCallback
Callback used to retrieve file permissions.
Definition: ftp_server.h:444
@ FTP_CHANNEL_STATE_AUTH_TLS_1
Definition: ftp_server.h:231
FtpServerMode
Security modes.
Definition: ftp_server.h:252
FtpServerChannelState state
Channel state.
Definition: ftp_server.h:380
OsTaskParameters task
Task parameters.
Definition: ftp_server.h:350
@ FTP_CHANNEL_STATE_RETR
Definition: ftp_server.h:236
Session ticket encryption context.
Definition: tls_ticket.h:91
NetContext * netContext
TCP/IP stack context.
Definition: ftp_server.h:351
IpAddr remoteIpAddr
Remote IP address.
Definition: ftp_server.h:403
char_t user[FTP_SERVER_MAX_USERNAME_LEN+1]
User name.
Definition: ftp_server.h:405
@ FTP_CHANNEL_STATE_WAIT_ACK
Definition: ftp_server.h:241
FtpServerCheckPasswordCallback checkPasswordCallback
Password verification callback function.
Definition: ftp_server.h:368
@ FTP_CHANNEL_STATE_NLST
Definition: ftp_server.h:235
FtpServerGetFilePermCallback getFilePermCallback
Callback used to retrieve file permissions.
Definition: ftp_server.h:369
#define TlsContext
Definition: tls.h:36
@ FTP_ACCESS_DENIED
Definition: ftp_server.h:265
error_t
Error codes.
Definition: error.h:43
error_t ftpServerStart(FtpServerContext *context)
Start FTP server.
Definition: ftp_server.c:248
@ FTP_CHANNEL_STATE_LISTEN
Definition: ftp_server.h:226
Ipv4Addr publicIpv4Addr
Public IPv4 address to be used in PASV replies.
Definition: ftp_server.h:357
@ FTP_CHANNEL_STATE_AUTH_TLS_2
Definition: ftp_server.h:232
FtpServerCheckUserCallback checkUserCallback
User verification callback function.
Definition: ftp_server.h:442
@ FTP_CHANNEL_STATE_SHUTDOWN_TX
Definition: ftp_server.h:242
bool_t userLoggedIn
This flag tells whether the user is logged in.
Definition: ftp_server.h:396
#define NetInterface
Definition: net.h:40
TlsContext * tlsContext
TLS context.
Definition: ftp_server.h:383
bool_t passiveMode
Passive data transfer.
Definition: ftp_server.h:402
char_t currentDir[FTP_SERVER_MAX_PATH_LEN+1]
Current directory.
Definition: ftp_server.h:407
NetInterface * interface
Underlying network interface.
Definition: ftp_server.h:427
bool_t stop
Stop request.
Definition: ftp_server.h:447
General definitions for cryptographic algorithms.
char_t command[FTP_SERVER_MAX_COMMAND_LEN+1]
Command buffer.
Definition: ftp_server.h:409
@ FTP_CHANNEL_STATE_SHUTDOWN_RX
Definition: ftp_server.h:243
@ FTP_CHANNEL_STATE_USER
Definition: ftp_server.h:233
FtpServerCheckPasswordCallback checkPasswordCallback
Password verification callback function.
Definition: ftp_server.h:443
Task parameters.
uint16_t port
FTP command port number.
Definition: ftp_server.h:353
@ FTP_CHANNEL_STATE_APPE
Definition: ftp_server.h:238
TlsTicketContext tlsTicketContext
TLS ticket encryption context.
Definition: ftp_server.h:455
OsEvent event
Event object used to poll the sockets.
Definition: ftp_server.h:448
#define FTP_SERVER_PRIVATE_CONTEXT
Definition: ftp_server.h:179
FsFile * file
File pointer.
Definition: ftp_server.h:400
#define FTP_SERVER_BUFFER_SIZE
Definition: ftp_server.h:102
File system abstraction layer.
error_t ftpServerSetHomeDir(FtpClientConnection *connection, const char_t *homeDir)
Set user's home directory.
Definition: ftp_server.c:443
TLS session tickets.
@ FTP_CHANNEL_STATE_DISCARD
Definition: ftp_server.h:230
@ FTP_FILE_PERM_LIST
Definition: ftp_server.h:277
error_t ftpServerSetRootDir(FtpClientConnection *connection, const char_t *rootDir)
Set user's root directory.
Definition: ftp_server.c:407
const char_t * rootDir
Root directory.
Definition: ftp_server.h:361
FtpServerTlsInitCallback tlsInitCallback
TLS initialization callback function.
Definition: ftp_server.h:365
uint16_t port
FTP command port number.
Definition: ftp_server.h:428
uint32_t systime_t
System time.
char char_t
Definition: compiler_port.h:55
SocketEventDesc eventDesc[2 *FTP_SERVER_MAX_CONNECTIONS+1]
The events the application is interested in.
Definition: ftp_server.h:453
size_t commandLen
Number of bytes available in the command buffer.
Definition: ftp_server.h:410
FsDir * dir
Directory pointer.
Definition: ftp_server.h:401
#define FTP_SERVER_MAX_COMMAND_LEN
Definition: ftp_server.h:183
uint16_t passivePortMin
Passive port range (lower value)
Definition: ftp_server.h:430
char_t path[FTP_SERVER_MAX_PATH_LEN+1]
Pathname.
Definition: ftp_server.h:408
FtpFilePerm
File permissions.
Definition: ftp_server.h:276
FTP client connection.
Definition: ftp_server.h:393
@ FTP_CHANNEL_STATE_LIST
Definition: ftp_server.h:234
size_t responseLen
Number of bytes available in the response buffer.
Definition: ftp_server.h:412
error_t(* FtpServerTlsInitCallback)(FtpClientConnection *connection, TlsContext *tlsContext)
TLS initialization callback function.
Definition: ftp_server.h:306
FtpServerDisconnectCallback disconnectCallback
Disconnection callback function.
Definition: ftp_server.h:438
FtpServerChannel dataChannel
Data channel.
Definition: ftp_server.h:399
char_t rootDir[FTP_SERVER_MAX_ROOT_DIR_LEN+1]
Root directory.
Definition: ftp_server.h:406
error_t ftpServerStop(FtpServerContext *context)
Stop FTP server.
Definition: ftp_server.c:356
#define Socket
Definition: socket.h:36
Ipv4Addr publicIpv4Addr
Public IPv4 address to be used in PASV replies.
Definition: ftp_server.h:432
@ FTP_CHANNEL_STATE_SEND
Definition: ftp_server.h:228
FtpClientConnection * connections
Client connections.
Definition: ftp_server.h:360
bool_t running
Operational state of the FTP server.
Definition: ftp_server.h:446
uint_t maxConnections
Maximum number of client connections.
Definition: ftp_server.h:434
TLS (Transport Layer Security)
Socket API.
Socket * socket
Underlying TCP socket.
Definition: ftp_server.h:381
FtpServerDisconnectCallback disconnectCallback
Disconnection callback function.
Definition: ftp_server.h:363
@ FTP_SERVER_MODE_PLAINTEXT
Definition: ftp_server.h:253
#define FtpClientConnection
Definition: ftp_server.h:210
uint16_t passivePort
Current passive port number.
Definition: ftp_server.h:452
FtpServerCheckUserCallback checkUserCallback
User verification callback function.
Definition: ftp_server.h:367
FtpServerUnknownCommandCallback unknownCommandCallback
Unknown command callback function.
Definition: ftp_server.h:370
@ FTP_CHANNEL_STATE_STOR
Definition: ftp_server.h:237
@ FTP_FILE_PERM_READ
Definition: ftp_server.h:278
#define FTP_SERVER_MAX_CONNECTIONS
Definition: ftp_server.h:67
FtpServerTlsInitCallback tlsInitCallback
TLS initialization callback function.
Definition: ftp_server.h:440
size_t bufferPos
Current position in the buffer.
Definition: ftp_server.h:416
thread_t * OsTaskId
Task identifier.
uint_t maxConnections
Maximum number of client connections.
Definition: ftp_server.h:359
size_t bufferLength
Length of the buffer, in bytes.
Definition: ftp_server.h:415
unsigned int uint_t
Definition: compiler_port.h:57
TCP/IP stack core.
uint_t(* FtpServerCheckUserCallback)(FtpClientConnection *connection, const char_t *user)
User verification callback function.
Definition: ftp_server.h:316
systime_t timestamp
Time stamp to manage timeout.
Definition: ftp_server.h:397
void ftpServerDeinit(FtpServerContext *context)
Release FTP server context.
Definition: ftp_server.c:617
error_t(* FtpServerConnectCallback)(FtpClientConnection *connection, const IpAddr *clientIpAddr, uint16_t clientPort)
Connection callback function.
Definition: ftp_server.h:287
@ FTP_CHANNEL_STATE_CONNECT_TLS
Definition: ftp_server.h:225
@ FTP_FILE_PERM_WRITE
Definition: ftp_server.h:279
@ FTP_SERVER_MODE_IMPLICIT_TLS
Definition: ftp_server.h:254
void FsFile
File descriptor.
Definition: fs_port_fatfs.h:60