diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2012-02-04 21:02:45 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2012-02-04 21:02:45 +0000 |
commit | e82f3f21bff1cf021e036ce3e67d5cc12eb41ebe (patch) | |
tree | f564a8e1329d499be76176d46618c76225e04b37 /apps/netutils/ftpd/ftpd.h | |
parent | 07944e1dd7c38a2de22861c695b295156ea8cafd (diff) | |
download | nuttx-e82f3f21bff1cf021e036ce3e67d5cc12eb41ebe.tar.gz nuttx-e82f3f21bff1cf021e036ce3e67d5cc12eb41ebe.tar.bz2 nuttx-e82f3f21bff1cf021e036ce3e67d5cc12eb41ebe.zip |
Add the beginnings of an FTP server
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4368 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'apps/netutils/ftpd/ftpd.h')
-rwxr-xr-x | apps/netutils/ftpd/ftpd.h | 204 |
1 files changed, 204 insertions, 0 deletions
diff --git a/apps/netutils/ftpd/ftpd.h b/apps/netutils/ftpd/ftpd.h new file mode 100755 index 000000000..938ca4b89 --- /dev/null +++ b/apps/netutils/ftpd/ftpd.h @@ -0,0 +1,204 @@ +/**************************************************************************** + * apps/include/ftpd.h + * + * Copyright (C) 2012 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <spudmonkey@racsa.co.cr> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#ifndef __APPS_NETUTILS_FTPD_FTPD_H +#define __APPS_NETUTILS_FTPD_FTPD_H + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include <nuttx/config.h> + +#include <sys/types.h> +#include <stdbool.h> + +#include <netinet/in.h> + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ +/* FPTD Definitions *********************************************************/ + +# define FTPD_ACCOUNTFLAG_NONE (0) +# define FTPD_ACCOUNTFLAG_ADMIN (1 << 0) +# define FTPD_ACCOUNTFLAG_SYSTEM (1 << 1) +# define FTPD_ACCOUNTFLAG_GUEST (1 << 2) + +# define FTPD_SESSIONFLAG_USER (1 << 0) +# define FTPD_SESSIONFLAG_RESTARTPOS (1 << 1) +# define FTPD_SESSIONFLAG_RENAMEFROM (1 << 2) + +# define FTPD_LISTOPTION_A (1 << 0) +# define FTPD_LISTOPTION_L (1 << 1) +# define FTPD_LISTOPTION_F (1 << 2) +# define FTPD_LISTOPTION_R (1 << 3) +# define FTPD_LISTOPTION_UNKNOWN (1 << 7) + +# define FTPD_CMDFLAG_LOGIN (1 << 0) + +/**************************************************************************** + * Public Types + ****************************************************************************/ +/* This enumerates the type of each session */ + +enum ftpd_sessiontype_e +{ + FTPD_SESSIONTYPE_NONE = 0 + FTPD_SESSIONTYPE_A, + FTPD_SESSIONTYPE_I, + FTPD_SESSIONTYPE_L8 +}; + +typedef struct ftpd_pathnode_s +{ + struct ftpd_pathnode_s *flink; + struct ftpd_pathnode_s *blink; + bool ignore; + FAR char *name; +}; + +union ftpd_sockaddr_u +{ + uint8_t raw[sizeof(struct sockaddr_storage)]; + struct sockaddr_storage ss; + struct sockaddr sa; +#ifdef CONFIG_NET_IPv6 + struct sockaddr_in6 in6; +#else + struct sockaddr_in in4; +#endif +}; + +/* This structure describes on account */ + +struct ftpd_account_s +{ + struct ftpd_account_s *blink; + struct ftpd_account_s *flink; + uint8_t flags; /* See FTPD_ACCOUNTFLAG_* definitions */ + FAR char *user; /* User name */ + FAR char *password; /* Un-encrypted password */ + FAR char *home; /* Home directory path */ +}; + +/* This structures describes an FTP session a list of associated accounts */ + +struct ftpd_server_s +{ + int sd; /* Listen socket descriptor */ + union ftpd_sockaddr_u addr; /* Listen address */ + struct ftpd_account_s *head; /* Head of a list of accounts */ + struct ftpd_account_s *tail; /* Tail of a list of accounts */ +}; + +struct ftpd_stream_s +{ + int sd; /* Socket descriptor */ + union ftpd_sockaddr_u addr; /* Network address */ + socklen_t addrlen; /* Length of the address */ + size_t buflen; /* Length of the buffer */ + uint8_t *buffer; /* Pointer to the buffer */ +}; + +struct ftpd_session_s +{ + FAR struct ftpd_server_s shadow; + FAR struct ftpd_account_s *head; + FAR struct ftpd_account_s *curr; + uint8_t flags; /* See TPD_SESSIONFLAG_* definitions */ + int txtimeout; + int txtimeout; + + /* Command */ + + struct ftpd_stream_s cmd; + FAR char *cmd; + FAR char *param; + + /* Data */ + + struct ftpd_stream_s data; + off_t restartpos; + + /* File */ + + int fd; + + /* Current user */ + + FAR char *user; + uint8_t m_type; /* See enum ftpd_sessiontype_e */ + FAR char *home; + FAR char *work; + FAR char *renamefrom; +}; + +typedef int (*ftpd_cmdhandler_t)(struct ftpd_session_s *); + +struct ftpd_cmd_s +{ + FAR const char *cmd; /* The command string */ + ftpd_cmdhandler_t handler; /* The function that handles the command */ + uint8_t flags; /* See FTPD_CMDFLAGS_* definitions */ +}; + +/* Used to maintain a list of protocol names */ + +struct ftpd_protocol_s +{ + FAR const char *name; + int value; +}; + +/**************************************************************************** + * Public Data + ****************************************************************************/ + +#ifdef __cplusplus +#define EXTERN extern "C" +extern "C" { +#else +#define EXTERN extern +#endif + +/**************************************************************************** + * Public Functions + ****************************************************************************/ +#undef EXTERN +#ifdef __cplusplus +} +#endif +#endif /* __APPS_NETUTILS_FTPD_FTPD_H */ |