Lets keep our version of opftpd in the CVS
[oftpd.git] / src / ftp_command.h
1 /* 
2  * $Id$
3  *
4  * The following comands are parsed:
5  *
6  * USER <SP> <username>
7  * PASS <SP> <password>
8  * CWD  <SP> <pathname> 
9  * CDUP
10  * QUIT
11  * PORT <SP> <host-port>
12  * LPRT <SP> <host-port-long>
13  * EPRT <SP> <host-port-ext>
14  * PASV
15  * LPSV
16  * EPSV [ <SP> <optional-number-or-all> ]
17  * TYPE <SP> <type-code>
18  * STRU <SP> <structure-code>
19  * MODE <SP> <mode-code>
20  * RETR <SP> <pathname>
21  * STOR <SP> <pathname>
22  * PWD
23  * LIST [ <SP> <pathname> ]
24  * NLST [ <SP> <pathname> ]
25  * SYST
26  * HELP [ <SP> <string> ]
27  * NOOP
28  * REST <SP> <offset>
29  */
30
31 #ifndef FTP_COMMAND_H
32 #define FTP_COMMAND_H
33
34 #include <netinet/in.h>
35 #include <limits.h>
36 #include <sys/types.h>
37 #include "af_portability.h"
38
39 /* special macro for handling EPSV ALL requests */
40 #define EPSV_ALL (-1)
41
42 /* maximum possible number of arguments */
43 #define MAX_ARG 2
44
45 /* maximum string length */
46 #define MAX_STRING_LEN PATH_MAX
47
48 typedef struct {
49     char command[5];
50     int num_arg;
51     union {
52         char string[MAX_STRING_LEN+1];
53         sockaddr_storage_t host_port;
54         int num;
55         off_t offset;
56     } arg[MAX_ARG];
57 } ftp_command_t;
58
59
60 int ftp_command_parse(const char *input, ftp_command_t *cmd);
61
62 #endif /* FTP_COMMAND_H */
63