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-2025 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.5.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 //TLS supported?
183 #if (FTP_SERVER_TLS_SUPPORT == ENABLED)
184  #include "core/crypto.h"
185  #include "tls.h"
186  #include "tls_ticket.h"
187 #endif
188 
189 //FTP port number
190 #define FTP_PORT 21
191 //FTP data port number
192 #define FTP_DATA_PORT 20
193 
194 //FTPS port number (implicit mode)
195 #define FTPS_PORT 990
196 //FTPS data port number (implicit mode)
197 #define FTPS_DATA_PORT 989
198 
199 //Forward declaration of FtpServerContext structure
200 struct _FtpServerContext;
201 #define FtpServerContext struct _FtpServerContext
202 
203 //Forward declaration of FtpClientConnection structure
204 struct _FtpClientConnection;
205 #define FtpClientConnection struct _FtpClientConnection
206 
207 //C++ guard
208 #ifdef __cplusplus
209 extern "C" {
210 #endif
211 
212 
213 /**
214  * @brief Channel state
215  **/
216 
217 typedef enum
218 {
240 
241 
242 /**
243  * @brief Security modes
244  **/
245 
246 typedef enum
247 {
252 
253 
254 /**
255  * @brief FTP server access status
256  **/
257 
258 typedef enum
259 {
264 
265 
266 /**
267  * @brief File permissions
268  **/
269 
270 typedef enum
271 {
274  FTP_FILE_PERM_WRITE = 0x04
276 
277 
278 /**
279  * @brief Connection callback function
280  **/
281 
283  const IpAddr *clientIpAddr, uint16_t clientPort);
284 
285 
286 /**
287  * @brief Disconnection callback function
288  **/
289 
291  const IpAddr *clientIpAddr, uint16_t clientPort);
292 
293 
294 //TLS supported?
295 #if (FTP_SERVER_TLS_SUPPORT == ENABLED)
296 
297 /**
298  * @brief TLS initialization callback function
299  **/
300 
302  TlsContext *tlsContext);
303 
304 #endif
305 
306 
307 /**
308  * @brief User verification callback function
309  **/
310 
312  const char_t *user);
313 
314 
315 /**
316  * @brief Password verification callback function
317  **/
318 
320  const char_t *user, const char_t *password);
321 
322 
323 /**
324  * @brief Callback used to retrieve file permissions
325  **/
326 
328  const char_t *user, const char_t *path);
329 
330 
331 /**
332  * @brief Unknown command callback function
333  **/
334 
336  const char_t *command, const char_t *param);
337 
338 
339 /**
340  * @brief FTP server settings
341  **/
342 
343 typedef struct
344 {
345  OsTaskParameters task; ///<Task parameters
346  NetInterface *interface; ///<Underlying network interface
347  uint16_t port; ///<FTP command port number
348  uint16_t dataPort; ///<FTP data port number
349  uint16_t passivePortMin; ///<Passive port range (lower value)
350  uint16_t passivePortMax; ///<Passive port range (upper value)
351  Ipv4Addr publicIpv4Addr; ///<Public IPv4 address to be used in PASV replies
352  uint_t mode; ///<Security modes
353  uint_t maxConnections; ///<Maximum number of client connections
354  FtpClientConnection *connections; ///<Client connections
355  const char_t *rootDir; ///<Root directory
356  FtpServerConnectCallback connectCallback; ///<Connection callback function
357  FtpServerDisconnectCallback disconnectCallback; ///<Disconnection callback function
358 #if (FTP_SERVER_TLS_SUPPORT == ENABLED)
359  FtpServerTlsInitCallback tlsInitCallback; ///<TLS initialization callback function
360 #endif
361  FtpServerCheckUserCallback checkUserCallback; ///<User verification callback function
362  FtpServerCheckPasswordCallback checkPasswordCallback; ///<Password verification callback function
363  FtpServerGetFilePermCallback getFilePermCallback; ///<Callback used to retrieve file permissions
364  FtpServerUnknownCommandCallback unknownCommandCallback; ///<Unknown command callback function
366 
367 
368 /**
369  * @brief Control or data channel
370  **/
371 
372 typedef struct
373 {
374  FtpServerChannelState state; ///<Channel state
375  Socket *socket; ///<Underlying TCP socket
376 #if (FTP_SERVER_TLS_SUPPORT == ENABLED)
377  TlsContext *tlsContext; ///<TLS context
378 #endif
380 
381 
382 /**
383  * @brief FTP client connection
384  **/
385 
387 {
388  FtpServerContext *context; ///<FTP server context
389  NetInterface *interface; ///<Underlying network interface
390  bool_t userLoggedIn; ///<This flag tells whether the user is logged in
391  systime_t timestamp; ///<Time stamp to manage timeout
392  FtpServerChannel controlChannel; ///<Control channel
393  FtpServerChannel dataChannel; ///<Data channel
394  FsFile *file; ///<File pointer
395  FsDir *dir; ///<Directory pointer
396  bool_t passiveMode; ///<Passive data transfer
397  IpAddr remoteIpAddr; ///<Remote IP address
398  uint16_t remotePort; ///<Remote port number
400  char_t rootDir[FTP_SERVER_MAX_ROOT_DIR_LEN + 1]; ///<Root directory
401  char_t currentDir[FTP_SERVER_MAX_PATH_LEN + 1]; ///<Current directory
403  char_t command[FTP_SERVER_MAX_LINE_LEN + 1]; ///<Incoming command
404  size_t commandLen; ///<Number of bytes available in the command buffer
405  char_t response[FTP_SERVER_MAX_LINE_LEN + 1]; ///<Response buffer
406  size_t responseLen; ///<Number of bytes available in the response buffer
407  size_t responsePos; ///<Current position in the response buffer
408  char_t buffer[FTP_SERVER_BUFFER_SIZE]; ///<Memory buffer for input/output operations
409  size_t bufferLength; ///<Length of the buffer, in bytes
410  size_t bufferPos; ///<Current position in the buffer
411 };
412 
413 
414 /**
415  * @brief FTP server context
416  **/
417 
419 {
420  NetInterface *interface; ///<Underlying network interface
421  uint16_t port; ///<FTP command port number
422  uint16_t dataPort; ///<FTP data port number
423  uint16_t passivePortMin; ///<Passive port range (lower value)
424  uint16_t passivePortMax; ///<Passive port range (upper value)
425  Ipv4Addr publicIpv4Addr; ///<Public IPv4 address to be used in PASV replies
426  uint_t mode; ///<Security modes
427  uint_t maxConnections; ///<Maximum number of client connections
428  FtpClientConnection *connections; ///<Client connections
429  char_t rootDir[FTP_SERVER_MAX_ROOT_DIR_LEN + 1]; ///<Root directory
430  FtpServerConnectCallback connectCallback; ///<Connection callback function
431  FtpServerDisconnectCallback disconnectCallback; ///<Disconnection callback function
432 #if (FTP_SERVER_TLS_SUPPORT == ENABLED)
433  FtpServerTlsInitCallback tlsInitCallback; ///<TLS initialization callback function
434 #endif
435  FtpServerCheckUserCallback checkUserCallback; ///<User verification callback function
436  FtpServerCheckPasswordCallback checkPasswordCallback; ///<Password verification callback function
437  FtpServerGetFilePermCallback getFilePermCallback; ///<Callback used to retrieve file permissions
438  FtpServerUnknownCommandCallback unknownCommandCallback; ///<Unknown command callback function
439  bool_t running; ///<Operational state of the FTP server
440  bool_t stop; ///<Stop request
441  OsEvent event; ///<Event object used to poll the sockets
442  OsTaskParameters taskParams; ///<Task parameters
443  OsTaskId taskId; ///<Task identifier
444  Socket *socket; ///<Listening socket
445  uint16_t passivePort; ///<Current passive port number
446  SocketEventDesc eventDesc[2 * FTP_SERVER_MAX_CONNECTIONS + 1]; ///<The events the application is interested in
447 #if (FTP_SERVER_TLS_SUPPORT == ENABLED && TLS_TICKET_SUPPORT == ENABLED)
448  TlsTicketContext tlsTicketContext; ///<TLS ticket encryption context
449 #endif
450  FTP_SERVER_PRIVATE_CONTEXT ///<Application specific context
451 };
452 
453 
454 //FTP server related functions
456 
458  const FtpServerSettings *settings);
459 
462 
464  const char_t *rootDir);
465 
467  const char_t *homeDir);
468 
469 void ftpServerTask(FtpServerContext *context);
470 
471 void ftpServerDeinit(FtpServerContext *context);
472 
473 //C++ guard
474 #ifdef __cplusplus
475 }
476 #endif
477 
478 #endif
size_t responsePos
Current position in the response buffer.
Definition: ftp_server.h:407
#define FtpServerContext
Definition: ftp_server.h:201
@ FTP_CHANNEL_STATE_RECEIVE
Definition: ftp_server.h:224
OsTaskParameters taskParams
Task parameters.
Definition: ftp_server.h:442
Control or data channel.
Definition: ftp_server.h:373
uint_t(* FtpServerGetFilePermCallback)(FtpClientConnection *connection, const char_t *user, const char_t *path)
Callback used to retrieve file permissions.
Definition: ftp_server.h:327
error_t(* FtpServerUnknownCommandCallback)(FtpClientConnection *connection, const char_t *command, const char_t *param)
Unknown command callback function.
Definition: ftp_server.h:335
int bool_t
Definition: compiler_port.h:61
Socket * socket
Listening socket.
Definition: ftp_server.h:444
uint16_t passivePortMin
Passive port range (lower value)
Definition: ftp_server.h:349
OsTaskId taskId
Task identifier.
Definition: ftp_server.h:443
FtpServerConnectCallback connectCallback
Connection callback function.
Definition: ftp_server.h:356
IP network address.
Definition: ip.h:90
FtpClientConnection * connections
Client connections.
Definition: ftp_server.h:428
FtpServerChannelState
Channel state.
Definition: ftp_server.h:218
@ FTP_CHANNEL_STATE_IDLE
Definition: ftp_server.h:222
uint16_t dataPort
FTP data port number.
Definition: ftp_server.h:422
@ FTP_ACCESS_ALLOWED
Definition: ftp_server.h:261
@ FTP_CHANNEL_STATE_RNFR
Definition: ftp_server.h:234
char_t rootDir[FTP_SERVER_MAX_ROOT_DIR_LEN+1]
Root directory.
Definition: ftp_server.h:429
Event object.
uint_t mode
Security modes.
Definition: ftp_server.h:426
#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:121
#define FTP_SERVER_MAX_USERNAME_LEN
Definition: ftp_server.h:116
FtpServerChannel controlChannel
Control channel.
Definition: ftp_server.h:392
void(* FtpServerDisconnectCallback)(FtpClientConnection *connection, const IpAddr *clientIpAddr, uint16_t clientPort)
Disconnection callback function.
Definition: ftp_server.h:290
FtpServerConnectCallback connectCallback
Connection callback function.
Definition: ftp_server.h:430
@ FTP_SERVER_MODE_EXPLICIT_TLS
Definition: ftp_server.h:250
FTP server context.
Definition: ftp_server.h:419
NetInterface * interface
Underlying network interface.
Definition: ftp_server.h:346
@ FTP_CHANNEL_STATE_SHUTDOWN_TLS
Definition: ftp_server.h:235
FtpServerContext * context
FTP server context.
Definition: ftp_server.h:388
void ftpServerTask(FtpServerContext *context)
FTP server task.
Definition: ftp_server.c:456
NetInterface * interface
Underlying network interface.
Definition: ftp_server.h:389
FtpServerUnknownCommandCallback unknownCommandCallback
Unknown command callback function.
Definition: ftp_server.h:438
uint16_t dataPort
FTP data port number.
Definition: ftp_server.h:348
FtpAccessStatus
FTP server access status.
Definition: ftp_server.h:259
uint16_t remotePort
Remote port number.
Definition: ftp_server.h:398
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:408
#define FTP_SERVER_MAX_ROOT_DIR_LEN
Definition: ftp_server.h:109
uint32_t Ipv4Addr
IPv4 network address.
Definition: ipv4.h:298
uint_t mode
Security modes.
Definition: ftp_server.h:352
Structure describing socket events.
Definition: socket.h:432
@ FTP_PASSWORD_REQUIRED
Definition: ftp_server.h:262
uint16_t passivePortMax
Passive port range (upper value)
Definition: ftp_server.h:350
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:319
FTP server settings.
Definition: ftp_server.h:344
uint16_t passivePortMax
Passive port range (upper value)
Definition: ftp_server.h:424
@ FTP_CHANNEL_STATE_CLOSED
Definition: ftp_server.h:219
FtpServerGetFilePermCallback getFilePermCallback
Callback used to retrieve file permissions.
Definition: ftp_server.h:437
@ FTP_CHANNEL_STATE_AUTH_TLS_1
Definition: ftp_server.h:226
FtpServerMode
Security modes.
Definition: ftp_server.h:247
FtpServerChannelState state
Channel state.
Definition: ftp_server.h:374
OsTaskParameters task
Task parameters.
Definition: ftp_server.h:345
@ FTP_CHANNEL_STATE_RETR
Definition: ftp_server.h:231
Session ticket encryption context.
Definition: tls_ticket.h:91
IpAddr remoteIpAddr
Remote IP address.
Definition: ftp_server.h:397
char_t user[FTP_SERVER_MAX_USERNAME_LEN+1]
User name.
Definition: ftp_server.h:399
@ FTP_CHANNEL_STATE_WAIT_ACK
Definition: ftp_server.h:236
FtpServerCheckPasswordCallback checkPasswordCallback
Password verification callback function.
Definition: ftp_server.h:362
@ FTP_CHANNEL_STATE_NLST
Definition: ftp_server.h:230
FtpServerGetFilePermCallback getFilePermCallback
Callback used to retrieve file permissions.
Definition: ftp_server.h:363
#define TlsContext
Definition: tls.h:36
@ FTP_ACCESS_DENIED
Definition: ftp_server.h:260
error_t
Error codes.
Definition: error.h:43
error_t ftpServerStart(FtpServerContext *context)
Start FTP server.
Definition: ftp_server.c:232
@ FTP_CHANNEL_STATE_LISTEN
Definition: ftp_server.h:221
Ipv4Addr publicIpv4Addr
Public IPv4 address to be used in PASV replies.
Definition: ftp_server.h:351
@ FTP_CHANNEL_STATE_AUTH_TLS_2
Definition: ftp_server.h:227
FtpServerCheckUserCallback checkUserCallback
User verification callback function.
Definition: ftp_server.h:435
char_t command[FTP_SERVER_MAX_LINE_LEN+1]
Incoming command.
Definition: ftp_server.h:403
@ FTP_CHANNEL_STATE_SHUTDOWN_TX
Definition: ftp_server.h:237
bool_t userLoggedIn
This flag tells whether the user is logged in.
Definition: ftp_server.h:390
#define NetInterface
Definition: net.h:36
TlsContext * tlsContext
TLS context.
Definition: ftp_server.h:377
bool_t passiveMode
Passive data transfer.
Definition: ftp_server.h:396
char_t currentDir[FTP_SERVER_MAX_PATH_LEN+1]
Current directory.
Definition: ftp_server.h:401
NetInterface * interface
Underlying network interface.
Definition: ftp_server.h:420
bool_t stop
Stop request.
Definition: ftp_server.h:440
General definitions for cryptographic algorithms.
@ FTP_CHANNEL_STATE_SHUTDOWN_RX
Definition: ftp_server.h:238
@ FTP_CHANNEL_STATE_USER
Definition: ftp_server.h:228
FtpServerCheckPasswordCallback checkPasswordCallback
Password verification callback function.
Definition: ftp_server.h:436
Task parameters.
uint16_t port
FTP command port number.
Definition: ftp_server.h:347
@ FTP_CHANNEL_STATE_APPE
Definition: ftp_server.h:233
TlsTicketContext tlsTicketContext
TLS ticket encryption context.
Definition: ftp_server.h:448
OsEvent event
Event object used to poll the sockets.
Definition: ftp_server.h:441
#define FTP_SERVER_PRIVATE_CONTEXT
Definition: ftp_server.h:179
FsFile * file
File pointer.
Definition: ftp_server.h:394
#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:426
TLS session tickets.
@ FTP_CHANNEL_STATE_DISCARD
Definition: ftp_server.h:225
@ FTP_FILE_PERM_LIST
Definition: ftp_server.h:272
error_t ftpServerSetRootDir(FtpClientConnection *connection, const char_t *rootDir)
Set user's root directory.
Definition: ftp_server.c:390
const char_t * rootDir
Root directory.
Definition: ftp_server.h:355
FtpServerTlsInitCallback tlsInitCallback
TLS initialization callback function.
Definition: ftp_server.h:359
uint16_t port
FTP command port number.
Definition: ftp_server.h:421
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:446
size_t commandLen
Number of bytes available in the command buffer.
Definition: ftp_server.h:404
FsDir * dir
Directory pointer.
Definition: ftp_server.h:395
uint16_t passivePortMin
Passive port range (lower value)
Definition: ftp_server.h:423
char_t path[FTP_SERVER_MAX_PATH_LEN+1]
Pathname.
Definition: ftp_server.h:402
FtpFilePerm
File permissions.
Definition: ftp_server.h:271
FTP client connection.
Definition: ftp_server.h:387
@ FTP_CHANNEL_STATE_LIST
Definition: ftp_server.h:229
size_t responseLen
Number of bytes available in the response buffer.
Definition: ftp_server.h:406
error_t(* FtpServerTlsInitCallback)(FtpClientConnection *connection, TlsContext *tlsContext)
TLS initialization callback function.
Definition: ftp_server.h:301
FtpServerDisconnectCallback disconnectCallback
Disconnection callback function.
Definition: ftp_server.h:431
FtpServerChannel dataChannel
Data channel.
Definition: ftp_server.h:393
char_t rootDir[FTP_SERVER_MAX_ROOT_DIR_LEN+1]
Root directory.
Definition: ftp_server.h:400
error_t ftpServerStop(FtpServerContext *context)
Stop FTP server.
Definition: ftp_server.c:339
#define Socket
Definition: socket.h:36
Ipv4Addr publicIpv4Addr
Public IPv4 address to be used in PASV replies.
Definition: ftp_server.h:425
@ FTP_CHANNEL_STATE_SEND
Definition: ftp_server.h:223
FtpClientConnection * connections
Client connections.
Definition: ftp_server.h:354
bool_t running
Operational state of the FTP server.
Definition: ftp_server.h:439
uint_t maxConnections
Maximum number of client connections.
Definition: ftp_server.h:427
TLS (Transport Layer Security)
Socket API.
Socket * socket
Underlying TCP socket.
Definition: ftp_server.h:375
#define FTP_SERVER_MAX_LINE_LEN
Definition: ftp_server.h:95
FtpServerDisconnectCallback disconnectCallback
Disconnection callback function.
Definition: ftp_server.h:357
@ FTP_SERVER_MODE_PLAINTEXT
Definition: ftp_server.h:248
#define FtpClientConnection
Definition: ftp_server.h:205
uint16_t passivePort
Current passive port number.
Definition: ftp_server.h:445
FtpServerCheckUserCallback checkUserCallback
User verification callback function.
Definition: ftp_server.h:361
FtpServerUnknownCommandCallback unknownCommandCallback
Unknown command callback function.
Definition: ftp_server.h:364
@ FTP_CHANNEL_STATE_STOR
Definition: ftp_server.h:232
@ FTP_FILE_PERM_READ
Definition: ftp_server.h:273
#define FTP_SERVER_MAX_CONNECTIONS
Definition: ftp_server.h:67
FtpServerTlsInitCallback tlsInitCallback
TLS initialization callback function.
Definition: ftp_server.h:433
size_t bufferPos
Current position in the buffer.
Definition: ftp_server.h:410
thread_t * OsTaskId
Task identifier.
uint_t maxConnections
Maximum number of client connections.
Definition: ftp_server.h:353
char_t response[FTP_SERVER_MAX_LINE_LEN+1]
Response buffer.
Definition: ftp_server.h:405
size_t bufferLength
Length of the buffer, in bytes.
Definition: ftp_server.h:409
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:311
systime_t timestamp
Time stamp to manage timeout.
Definition: ftp_server.h:391
void ftpServerDeinit(FtpServerContext *context)
Release FTP server context.
Definition: ftp_server.c:600
error_t(* FtpServerConnectCallback)(FtpClientConnection *connection, const IpAddr *clientIpAddr, uint16_t clientPort)
Connection callback function.
Definition: ftp_server.h:282
@ FTP_CHANNEL_STATE_CONNECT_TLS
Definition: ftp_server.h:220
@ FTP_FILE_PERM_WRITE
Definition: ftp_server.h:274
@ FTP_SERVER_MODE_IMPLICIT_TLS
Definition: ftp_server.h:249
void FsFile
File descriptor.
Definition: fs_port_fatfs.h:60