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