1 #ifndef tftplib_h
2 #define tftplib_h
3 
4 #define TFTP_OFFSET 4 /* size of tftp header */
5 
6 #ifndef OACK
7 #define OACK 6 /* option ACK */
8 #endif
9 
10 union tftpbuf { struct tftphdr *hdr; char *buf; };
11 
12 struct utftpd_ctrl {
13 	int netascii;
14 	size_t segsize;
15 	int retries;
16 	int timeout;
17 	char *revision;
18 	union tftpbuf sendbuf; /* of segsize+TFTP_OFFSET size */
19 	union tftpbuf recvbuf; /* of segsize+TFTP_OFFSET size */
20 	size_t first_packet_length; /* see tftp_recv.c for a description */
21 	int recognize_oack;
22 	struct sockaddr_in s_in;
23 	/* */
24 	const char *filename;     /* qualified absolute filename */
25 	const char *origfilename; /* exactly what we received */
26 	int filefd;
27 	int remotefd;
28 	unsigned long bytes;
29 	pid_t pid;
30 	struct utftpd_vc *vc; /* version control */
31 };
32 struct utftpd_vc {
33 	int (* test) P__((const char *filename, struct utftpd_ctrl *flags));
34 	int (* commit) P__((const char *comment, struct utftpd_ctrl *flags));
35 	int (* checkout) P__((int mode, struct utftpd_ctrl *flags));
36 	int (* unget) P__((struct utftpd_ctrl *flags));
37 };
38 
39 extern struct utftpd_vc utftpd_novc;
40 extern struct utftpd_vc utftpd_rcs;
41 extern struct utftpd_vc utftpd_sccs;
42 
43 extern int wait_check_and_log(pid_t pid);
44 
45 /* prototypes for utftpd internal stuff */
46 int utftpd_recv P__((struct utftpd_ctrl *flags));
47 int utftpd_send P__((struct utftpd_ctrl *flags));
48 #define TSG_READ 0 /* get */
49 #define TSG_WRITE 1 /* get -e */
50 #define TSG_CREATE 2 /*  treat as "get -e", except in the "novc" driver. */
51 void do_nak P__((int remotefd, int ec, const char *et));
52 extern char *opt_rcs_ci;
53 extern char *opt_rcs_co;
54 extern char *opt_sccs_delta;
55 extern char *opt_sccs_get;
56 extern char *opt_sccs_unget;
57 extern char *opt_sccs_clean;
58 extern char *remoteip;
59 extern int nullfd;
60 extern int opt_suppress_naks;
61 extern int opt_verbose;
62 
63 
64 #define UTFTP_EC_OK 0
65 #define UTFTP_EC_LOCAL 1
66 #define UTFTP_EC_USAGE 2
67 #define UTFTP_EC_TIMEOUT 3
68 #define UTFTP_EC_PROTO 4
69 #define UTFTP_EC_NETWORK 5
70 #define UTFTP_EC_ERROR 6
71 #define UTFTP_EC_UNDEF 7
72 
73 
74 
75 int utftpd_nak P__((int remotefd, int tftp_errcode, const char *errtext, struct utftpd_ctrl *flags));
76 
77 #endif
78