xref: /plan9/sys/src/cmd/ip/ftpfs/ftpfs.h (revision 12fd1c83b21b4d1deeab2b58fe2c202d2038c714)
1 typedef struct File	File;
2 typedef struct Node	Node;
3 typedef struct OS	OS;
4 
5 #pragma incomplete File
6 
7 enum
8 {
9 	Maxpath=	512,
10 };
11 
12 /* a tree for file path's - this mirrors the directory structure */
13 struct Node
14 {
15 	String	*remname;
16 	Dir	*d;
17 	Node	*parent;
18 	Node	*sibs;
19 	Node	*children;
20 	File	*fp;
21 	short	depth;
22 	char	chdirunknown;	/* true if QTDIR bit of files in this dir is unknown */
23 	int	opens;
24 };
25 
26 /* OS types */
27 enum
28 {
29 	Unix=		1,
30 	Tops=		2,
31 	Plan9=		3,
32 	VM=		4,
33 	VMS=		5,
34 	MVS=		6,
35 	NetWare=	7,
36 	OS½=		8,
37 	TSO=		9,
38 	NT=		10,
39 	Unknown=	11,
40 };
41 
42 struct OS
43 {
44 	int	os;
45 	char	*name;
46 };
47 extern OS oslist[];
48 
49 /* temporary files */
50 void	filefree(Node*);
51 int	fileread(Node*, char*, long, int);
52 int	filewrite(Node*, char*, long, int);
53 void	filedirty(Node*);
54 void	fileclean(Node*);
55 int	fileisdirty(Node*);
56 
57 /* ftp protocol */
58 void	hello(char*);
59 void	quit(void);
60 void	preamble(char*);
61 void	rlogin(char *, char *);
62 void	clogin(char *, char *);
63 void	nop(void);
64 int	readdir(Node*);
65 int	createdir(Node*);
66 int	readfile(Node*);
67 int	createfile(Node*);
68 int	changedir(Node*);
69 int	removefile(Node*);
70 int	removedir(Node*);
71 
72 /* misc */
73 void*	safecpy(void*, void*, int);
74 void	fatal(char*, ...);
75 int	seterr(char*, ...);
76 Node*	extendpath(Node*, String*);
77 Node*	newnode(Node*, String*);
78 void	uncache(Node*);
79 void	invalidate(Node*);
80 void	uncachedir(Node*, Node*);
81 Node*	newtopsdir(char*);
82 void	fixsymbolic(Node*);
83 Dir*	reallocdir(Dir *d, int dofree);
84 Dir*	dir_change_name(Dir *d, char *name);
85 Dir*	dir_change_uid(Dir *d, char *name);
86 Dir*	dir_change_gid(Dir *d, char *name);
87 Dir*	dir_change_muid(Dir *d, char *name);
88 
89 extern Node *remdir;	/* current directory on remote side */
90 extern Node *remroot;	/* root on remote side */
91 extern int os;		/* remote os */
92 extern int debug;	/* non-zero triggers debugging output */
93 extern int usenlst;
94 extern char *nosuchfile;
95 extern char *ext;	/* add to names of non-dir files */
96 extern int defos;
97 extern int quiet;
98 extern char *user;
99 
100 #define ISCACHED(x) ((x)->d->type)
101 #define UNCACHED(x) (x)->d->type = 0
102 #define CACHED(x) { (x)->d->type = 1; (x)->d->atime = time(0); }
103 #define ISOLD(x) (x)->d->atime + TIMEOUT < time(0)
104 #define ISVALID(x) ((x)->d->dev)
105 #define INVALID(x) (x)->d->dev = 0
106 #define VALID(x) (x)->d->dev = 1
107 #define TIMEOUT 5*60
108 #define DMSYML 0x10000000
109 
110 #define MAXFDATA 8192
111 
112 extern char	net[];		/* network for connections */
113