xref: /plan9/sys/src/cmd/ip/ftpfs/ftpfs.h (revision 12fd1c83b21b4d1deeab2b58fe2c202d2038c714)
19a747e4fSDavid du Colombier typedef struct File	File;
29a747e4fSDavid du Colombier typedef struct Node	Node;
39a747e4fSDavid du Colombier typedef struct OS	OS;
49a747e4fSDavid du Colombier 
5*12fd1c83SDavid du Colombier #pragma incomplete File
6*12fd1c83SDavid du Colombier 
79a747e4fSDavid du Colombier enum
89a747e4fSDavid du Colombier {
99a747e4fSDavid du Colombier 	Maxpath=	512,
109a747e4fSDavid du Colombier };
119a747e4fSDavid du Colombier 
129a747e4fSDavid du Colombier /* a tree for file path's - this mirrors the directory structure */
139a747e4fSDavid du Colombier struct Node
149a747e4fSDavid du Colombier {
159a747e4fSDavid du Colombier 	String	*remname;
169a747e4fSDavid du Colombier 	Dir	*d;
179a747e4fSDavid du Colombier 	Node	*parent;
189a747e4fSDavid du Colombier 	Node	*sibs;
199a747e4fSDavid du Colombier 	Node	*children;
209a747e4fSDavid du Colombier 	File	*fp;
219a747e4fSDavid du Colombier 	short	depth;
229a747e4fSDavid du Colombier 	char	chdirunknown;	/* true if QTDIR bit of files in this dir is unknown */
239a747e4fSDavid du Colombier 	int	opens;
249a747e4fSDavid du Colombier };
259a747e4fSDavid du Colombier 
269a747e4fSDavid du Colombier /* OS types */
279a747e4fSDavid du Colombier enum
289a747e4fSDavid du Colombier {
299a747e4fSDavid du Colombier 	Unix=		1,
309a747e4fSDavid du Colombier 	Tops=		2,
319a747e4fSDavid du Colombier 	Plan9=		3,
329a747e4fSDavid du Colombier 	VM=		4,
339a747e4fSDavid du Colombier 	VMS=		5,
349a747e4fSDavid du Colombier 	MVS=		6,
359a747e4fSDavid du Colombier 	NetWare=	7,
369a747e4fSDavid du Colombier 	OS½=		8,
379a747e4fSDavid du Colombier 	TSO=		9,
389a747e4fSDavid du Colombier 	NT=		10,
399a747e4fSDavid du Colombier 	Unknown=	11,
409a747e4fSDavid du Colombier };
419a747e4fSDavid du Colombier 
429a747e4fSDavid du Colombier struct OS
439a747e4fSDavid du Colombier {
449a747e4fSDavid du Colombier 	int	os;
459a747e4fSDavid du Colombier 	char	*name;
469a747e4fSDavid du Colombier };
479a747e4fSDavid du Colombier extern OS oslist[];
489a747e4fSDavid du Colombier 
499a747e4fSDavid du Colombier /* temporary files */
509a747e4fSDavid du Colombier void	filefree(Node*);
519a747e4fSDavid du Colombier int	fileread(Node*, char*, long, int);
529a747e4fSDavid du Colombier int	filewrite(Node*, char*, long, int);
539a747e4fSDavid du Colombier void	filedirty(Node*);
549a747e4fSDavid du Colombier void	fileclean(Node*);
559a747e4fSDavid du Colombier int	fileisdirty(Node*);
569a747e4fSDavid du Colombier 
579a747e4fSDavid du Colombier /* ftp protocol */
589a747e4fSDavid du Colombier void	hello(char*);
599a747e4fSDavid du Colombier void	quit(void);
609a747e4fSDavid du Colombier void	preamble(char*);
61ca8cf635SDavid du Colombier void	rlogin(char *, char *);
629a747e4fSDavid du Colombier void	clogin(char *, char *);
639a747e4fSDavid du Colombier void	nop(void);
649a747e4fSDavid du Colombier int	readdir(Node*);
659a747e4fSDavid du Colombier int	createdir(Node*);
669a747e4fSDavid du Colombier int	readfile(Node*);
679a747e4fSDavid du Colombier int	createfile(Node*);
689a747e4fSDavid du Colombier int	changedir(Node*);
699a747e4fSDavid du Colombier int	removefile(Node*);
709a747e4fSDavid du Colombier int	removedir(Node*);
719a747e4fSDavid du Colombier 
729a747e4fSDavid du Colombier /* misc */
739a747e4fSDavid du Colombier void*	safecpy(void*, void*, int);
749a747e4fSDavid du Colombier void	fatal(char*, ...);
759a747e4fSDavid du Colombier int	seterr(char*, ...);
769a747e4fSDavid du Colombier Node*	extendpath(Node*, String*);
779a747e4fSDavid du Colombier Node*	newnode(Node*, String*);
789a747e4fSDavid du Colombier void	uncache(Node*);
799a747e4fSDavid du Colombier void	invalidate(Node*);
809a747e4fSDavid du Colombier void	uncachedir(Node*, Node*);
819a747e4fSDavid du Colombier Node*	newtopsdir(char*);
829a747e4fSDavid du Colombier void	fixsymbolic(Node*);
839a747e4fSDavid du Colombier Dir*	reallocdir(Dir *d, int dofree);
849a747e4fSDavid du Colombier Dir*	dir_change_name(Dir *d, char *name);
859a747e4fSDavid du Colombier Dir*	dir_change_uid(Dir *d, char *name);
869a747e4fSDavid du Colombier Dir*	dir_change_gid(Dir *d, char *name);
879a747e4fSDavid du Colombier Dir*	dir_change_muid(Dir *d, char *name);
889a747e4fSDavid du Colombier 
899a747e4fSDavid du Colombier extern Node *remdir;	/* current directory on remote side */
909a747e4fSDavid du Colombier extern Node *remroot;	/* root on remote side */
919a747e4fSDavid du Colombier extern int os;		/* remote os */
929a747e4fSDavid du Colombier extern int debug;	/* non-zero triggers debugging output */
939a747e4fSDavid du Colombier extern int usenlst;
949a747e4fSDavid du Colombier extern char *nosuchfile;
959a747e4fSDavid du Colombier extern char *ext;	/* add to names of non-dir files */
969a747e4fSDavid du Colombier extern int defos;
979a747e4fSDavid du Colombier extern int quiet;
989a747e4fSDavid du Colombier extern char *user;
999a747e4fSDavid du Colombier 
1009a747e4fSDavid du Colombier #define ISCACHED(x) ((x)->d->type)
1019a747e4fSDavid du Colombier #define UNCACHED(x) (x)->d->type = 0
1029a747e4fSDavid du Colombier #define CACHED(x) { (x)->d->type = 1; (x)->d->atime = time(0); }
1039a747e4fSDavid du Colombier #define ISOLD(x) (x)->d->atime + TIMEOUT < time(0)
1049a747e4fSDavid du Colombier #define ISVALID(x) ((x)->d->dev)
1059a747e4fSDavid du Colombier #define INVALID(x) (x)->d->dev = 0
1069a747e4fSDavid du Colombier #define VALID(x) (x)->d->dev = 1
1079a747e4fSDavid du Colombier #define TIMEOUT 5*60
1089a747e4fSDavid du Colombier #define DMSYML 0x10000000
1099a747e4fSDavid du Colombier 
1109a747e4fSDavid du Colombier #define MAXFDATA 8192
1119a747e4fSDavid du Colombier 
1129a747e4fSDavid du Colombier extern char	net[];		/* network for connections */
113