xref: /plan9/sys/src/cmd/webfs/dat.h (revision b8b257802f7f811fbf50141a6401409bebd29327)
19a747e4fSDavid du Colombier typedef struct Client Client;
29a747e4fSDavid du Colombier typedef struct Ctl Ctl;
39a747e4fSDavid du Colombier typedef struct Ibuf Ibuf;
49a747e4fSDavid du Colombier typedef struct Url Url;
59a747e4fSDavid du Colombier 
69a747e4fSDavid du Colombier /* simple buffered i/o for network connections; shared by http, ftp */
79a747e4fSDavid du Colombier struct Ibuf
89a747e4fSDavid du Colombier {
99a747e4fSDavid du Colombier 	int fd;
109a747e4fSDavid du Colombier 	Ioproc *io;
119a747e4fSDavid du Colombier 	char buf[4096];
129a747e4fSDavid du Colombier 	char *rp, *wp;
139a747e4fSDavid du Colombier };
149a747e4fSDavid du Colombier 
159a747e4fSDavid du Colombier struct Ctl
169a747e4fSDavid du Colombier {
179a747e4fSDavid du Colombier 	int	acceptcookies;
189a747e4fSDavid du Colombier 	int	sendcookies;
199a747e4fSDavid du Colombier 	int	redirectlimit;
209a747e4fSDavid du Colombier 	char	*useragent;
219a747e4fSDavid du Colombier };
229a747e4fSDavid du Colombier 
239a747e4fSDavid du Colombier struct Client
249a747e4fSDavid du Colombier {
259a747e4fSDavid du Colombier 	Url	*url;
269a747e4fSDavid du Colombier 	Url	*baseurl;
279a747e4fSDavid du Colombier 	Ctl ctl;
289a747e4fSDavid du Colombier 	Channel *creq;	/* chan(Req*) */
299a747e4fSDavid du Colombier 	int num;
309a747e4fSDavid du Colombier 	int plumbed;
319a747e4fSDavid du Colombier 	char *contenttype;
329a747e4fSDavid du Colombier 	char *postbody;
339a747e4fSDavid du Colombier 	char *redirect;
349dfc0cb2SDavid du Colombier 	char *authenticate;
359a747e4fSDavid du Colombier 	char *ext;
369a747e4fSDavid du Colombier 	int npostbody;
379a747e4fSDavid du Colombier 	int havepostbody;
389a747e4fSDavid du Colombier 	int iobusy;
399a747e4fSDavid du Colombier 	int bodyopened;
409a747e4fSDavid du Colombier 	Ioproc *io;
419a747e4fSDavid du Colombier 	int ref;
429a747e4fSDavid du Colombier 	void *aux;
439a747e4fSDavid du Colombier };
449a747e4fSDavid du Colombier 
459a747e4fSDavid du Colombier /*
469a747e4fSDavid du Colombier  * If ischeme is USunknown, then the given URL is a relative
479a747e4fSDavid du Colombier  * URL which references the "current document" in the context of the base.
489a747e4fSDavid du Colombier  * If this is the case, only the "fragment" and "url" members will have
499a747e4fSDavid du Colombier  * meaning, and the given URL structure may not be used as a base URL itself.
509a747e4fSDavid du Colombier  */
519a747e4fSDavid du Colombier enum
529a747e4fSDavid du Colombier {
539a747e4fSDavid du Colombier 	USunknown,
549a747e4fSDavid du Colombier 	UShttp,
559a747e4fSDavid du Colombier 	UShttps,
569a747e4fSDavid du Colombier 	USftp,
579a747e4fSDavid du Colombier 	USfile,
589a747e4fSDavid du Colombier 	UScurrent,
599a747e4fSDavid du Colombier };
609a747e4fSDavid du Colombier 
619a747e4fSDavid du Colombier struct Url
629a747e4fSDavid du Colombier {
639a747e4fSDavid du Colombier 	int		ischeme;
649a747e4fSDavid du Colombier 	char*	url;
659a747e4fSDavid du Colombier 	char*	scheme;
669a747e4fSDavid du Colombier 	int		(*open)(Client*, Url*);
679a747e4fSDavid du Colombier 	int		(*read)(Client*, Req*);
689a747e4fSDavid du Colombier 	void		(*close)(Client*);
699a747e4fSDavid du Colombier 	char*	schemedata;
709a747e4fSDavid du Colombier 	char*	authority;
719a747e4fSDavid du Colombier 	char*	user;
729a747e4fSDavid du Colombier 	char*	passwd;
739a747e4fSDavid du Colombier 	char*	host;
749a747e4fSDavid du Colombier 	char*	port;
759a747e4fSDavid du Colombier 	char*	path;
769a747e4fSDavid du Colombier 	char*	query;
779a747e4fSDavid du Colombier 	char*	fragment;
789a747e4fSDavid du Colombier 	union {
799a747e4fSDavid du Colombier 		struct {
809a747e4fSDavid du Colombier 			char *page_spec;
819a747e4fSDavid du Colombier 		} http;
829a747e4fSDavid du Colombier 		struct {
839a747e4fSDavid du Colombier 			char *path_spec;
849a747e4fSDavid du Colombier 			char *type;
859a747e4fSDavid du Colombier 		} ftp;
869a747e4fSDavid du Colombier 	};
879a747e4fSDavid du Colombier };
889a747e4fSDavid du Colombier 
899a747e4fSDavid du Colombier enum
909a747e4fSDavid du Colombier {
91*b8b25780SDavid du Colombier 	STACK = 32*1024,  /* was 16*1024; there are big arrays on the stack */
929a747e4fSDavid du Colombier };
939a747e4fSDavid du Colombier 
949a747e4fSDavid du Colombier extern	Client**	client;
959a747e4fSDavid du Colombier extern	int		cookiedebug;
969a747e4fSDavid du Colombier extern	Srv		fs;
979a747e4fSDavid du Colombier extern	int		fsdebug;
989a747e4fSDavid du Colombier extern	Ctl		globalctl;
999a747e4fSDavid du Colombier extern	int		nclient;
1009a747e4fSDavid du Colombier extern	int		urldebug;
1019a747e4fSDavid du Colombier extern	int		httpdebug;
1029a747e4fSDavid du Colombier extern	char*	status[];
1039a747e4fSDavid du Colombier 
104