#pragma D depends_on provider io
typedef struct request_rec {
    uintptr_t pool;
    uintptr_t connection;
    uintptr_t server;
    uintptr_t next;
    uintptr_t prev;
    uintptr_t main;
    char *the_request;
    int assbackwards;
    int proxyreq;
    int header_only;
    char *protocol;
    int proto_num;
    char *hostname;
    int64_t request_time;
    char *status_line;
    int status;
    const char *method;
    int method_number;
    int64_t allowed;
    uintptr_t allowed_xmethods;
    uintptr_t allowed_methods;
    offset_t sent_bodyct;
    offset_t bytes_sent;
    int64_t mtime;
    int chunked;
    char *range;
    offset_t clength;
    offset_t remaining;
    offset_t read_length;
    int read_body;
    int read_chunked;
    unsigned expecting_100;
    uintptr_t headers_in;
    uintptr_t headers_out;
    uintptr_t err_headers_out;
    uintptr_t subprocess_env;
    uintptr_t notes;
    char *content_type;   /* Break these out --- we dispatch on 'em */
    char *handler;        /* What we *really* dispatch on */
    char *content_encoding;
    uintptr_t content_languages;
    char *vlist_validator;
    char *user;
    char *ap_auth_type;
    int no_cache;
    int no_local_copy;
    char *unparsed_uri;
    char *uri;
    char *filename;
    char *canonical_filename;
    char *path_info;
    char *args;
    /* finfo */
    uintptr_t finfo_pool;
    int32_t finfo_valid;
    int32_t finfo_protection;
    int32_t finfo_filetype;
    int finfo_user;
    int finfo_group;
    uint64_t finfo_inode;
    uint64_t finfo_device;
    int32_t finfo_nlink;
    offset_t finfo_size;
    offset_t finfo_csize;
    int64_t finfo_atime;
    int64_t finfo_mtime;
    int64_t finfo_ctime;
    char *finfo_fname;
    char *finfo_name;
    uintptr_t finfo_ffilehand;
    /* parsed_uri */
    char *uri_scheme;
    char *uri_hostinfo;
    char *uri_user;
    char *uri_password;
    char *uri_hostname;
    char *uri_port_str;
    char *uri_path;
    char *uri_query;
    char *uri_fragment;
    uintptr_t uri_hostent;
    uint16_t uri_port;
    unsigned uri_is_initialized:1;
    unsigned uri_dns_looked_up:1;
    unsigned uri_dns_resolved:1;

    /* back to request_rec */
    int used_path_info;
    uintptr_t per_dir_config;
    uintptr_t request_config;
    uintptr_t htaccess;
    uintptr_t output_filters;
    uintptr_t input_filters;
    uintptr_t proto_output_filters;
    uintptr_t proto_input_filters;
    int eos_sent;
    uintptr_t kept_body;
    uintptr_t invoke_mtx;
} request_rec;

