Subversion Repositories planix.SVN

Rev

Blame | Last modification | View Log | RSS feed

typedef struct Client Client;
typedef struct Ctl Ctl;
typedef struct Ibuf Ibuf;
typedef struct Url Url;

/* simple buffered i/o for network connections; shared by http, ftp */
struct Ibuf
{
        int fd;
        Ioproc *io;
        char buf[4096];
        char *rp, *wp;
};

struct Ctl
{
        int     acceptcookies;
        int     sendcookies;
        int     redirectlimit;
        char    *useragent;
};

struct Client
{
        Url     *url;
        Url     *baseurl;
        Ctl ctl;
        Channel *creq;  /* chan(Req*) */
        int num;
        int plumbed;
        char *contenttype;
        char *postbody;
        char *redirect;
        char *authenticate;
        char *ext;
        int npostbody;
        int havepostbody;
        int iobusy;
        int bodyopened;
        Ioproc *io;
        int ref;
        void *aux;
};

/*
 * If ischeme is USunknown, then the given URL is a relative
 * URL which references the "current document" in the context of the base.
 * If this is the case, only the "fragment" and "url" members will have
 * meaning, and the given URL structure may not be used as a base URL itself.
 */
enum
{
        USunknown,
        UShttp,
        UShttps,
        USftp,
        USfile,
        UScurrent,
};

struct Url
{
        int             ischeme;
        char*   url;
        char*   scheme;
        int             (*open)(Client*, Url*);
        int             (*read)(Client*, Req*);
        void            (*close)(Client*);
        char*   schemedata;
        char*   authority;
        char*   user;
        char*   passwd;
        char*   host;
        char*   port;
        char*   path;
        char*   query;
        char*   fragment;
        union {
                struct {
                        char *page_spec;
                } http;
                struct {
                        char *path_spec;
                        char *type;
                } ftp;
        };
};

enum
{
        STACK = 32*1024,  /* was 16*1024; there are big arrays on the stack */
};

extern  Client**        client;
extern  int             cookiedebug;
extern  Srv             fs;
extern  int             fsdebug;
extern  Ctl             globalctl;
extern  int             nclient;
extern  int             urldebug;
extern  int             httpdebug;
extern  char*   status[];