1 /* ftpd.h: Prototypes for BetaFTPD
2 Copyright (C) 1999-2000 Steinar H. Gunderson
4 This program is is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License, version 2 if the
6 License as published by the Free Software Foundation.
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 GNU General Public License for more details.
13 You should have received a copy of the GNU General Public License
14 along with this program; if not, write to the Free Software
15 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 * This is the port you want BetaFTPD to listen on. The standard
20 * FTP port is 21 -- if you really want to use BetaFTPD as your
21 * primary FTP server, change FTP_PORT.
24 #define FTP_PORT 12121
30 * This is the number of seconds an idle connection is allowed to
31 * remain idle (`idle' is defined as `no activity on the data socket',
32 * more or less) without getting shut down. This is not accurate,
33 * as such delays are only checked for every 60 seconds.
35 * The default (15 minutes) should be OK for most people.
37 #define TIMEOUT_SECS 900
40 * This is the maximum block size you think you need. (This will most
41 * likely be the block size of your filesystem, and you're not likely
42 * to need a bigger number than this, unless your TCP stack likes
43 * big send()s better than small ones, and still manages to `interleave'
44 * the framents.) If this value is too small, your performance would be
45 * slightly worse, but it would still work. Try to keep it at a power of
46 * two -- most (read: all) FS block sizes _are_ powers of two. If you
47 * set it too high, it won't affect performance much -- you would just
48 * use a bit more memory.
50 #define MAX_BLOCK_SIZE 4096
52 #if HAVE_LINUX_SENDFILE && !HAVE_MMAP
53 #warning sendfile() without mmap() is not supported -- disabling sendfile()
54 #undef HAVE_LINUX_SENDFILE
57 #if WANT_DCACHE && !HAVE_MMAP
58 #warning directory cache requires use of mmap() -- disabling directory cache
69 * General structure for the doubly linked lists (conn, ftran, dcache).
70 * This is used only by the generic linked list code (which inserts and
71 * removes elements from the lists).
74 struct list_element *prev;
75 struct list_element *next;
77 /* structure specific data here */
80 /* doubly linked list of active connections */
82 struct conn *prev_conn;
83 struct conn *next_conn;
93 char rename_from[256];
104 struct ftran *transfer;
111 time_t last_transfer;
115 /* doubly linked list of cached directory listings */
117 struct dcache *prev_dcache;
118 struct dcache *next_dcache;
126 struct list_options lo;
133 /* doubly linked list of file transfers */
135 struct ftran *prev_ftran;
136 struct ftran *next_ftran;
140 * 0 = none, 1 = got PASV addr,
141 * 2 = waiting on PASV socket,
142 * 3 = got PORT addr, 4 = waiting for
144 * 5 = transferring file (or waiting
147 struct sockaddr_in sin;
151 struct dcache *dir_cache;
164 char *file_data; /* mmap'ed */
174 void add_to_linked_list(struct list_element * const first,
175 struct list_element * const elem);
176 void remove_from_linked_list(struct list_element * const elem);
178 struct conn *alloc_new_conn(const int sock);
179 struct ftran *alloc_new_ftran(const int sock, const struct conn * const c);
181 struct dcache *alloc_new_dcache();
184 int add_fd(const int fd, const int events);
185 void del_fd(const int fd);
187 void destroy_conn(struct conn * const c);
188 void destroy_ftran(struct ftran * const f);
190 void destroy_dcache(struct dcache * const d);
194 int process_all_clients(const int num_ac);
195 int process_all_sendfiles(const int num_ac);
197 int process_all_clients(const fd_set * const active_clients, const int num_ac);
198 int process_all_sendfiles(fd_set * const active_clients, const int num_ac);
201 int do_upload(struct ftran *f);
202 int do_download(struct ftran *f);
203 void write_xferlog(struct ftran *f);
206 RETSIGTYPE handle_alarm(int signum);
208 void accept_new_client(int * const server_sock);
209 void time_out_sockets();
211 void time_out_dcache();
214 void remove_bytes(struct conn * const c, const int i);
215 void numeric(struct conn * const c, const int numeric, const char * const format, ...);
216 void init_file_transfer(struct ftran * const f);
217 int create_server_socket();
220 void clear_bad_fds(int * const server_sock);
224 void dump_file(struct conn * const c, const int num, const char * const filename);
225 void list_readmes(struct conn * const c);