#ifndef _NGX_EVENT_PIPE_H_INCLUDED_
#define _NGX_EVENT_PIPE_H_INCLUDED_


#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>


typedef struct ngx_event_pipe_s  ngx_event_pipe_t;

typedef int (*ngx_event_pipe_input_filter_pt)(ngx_event_pipe_t *p,
                                              ngx_hunk_t *hunk);
typedef int (*ngx_event_pipe_output_filter_pt)(void *data, ngx_chain_t *chain);


struct ngx_event_pipe_s {
    ngx_chain_t       *free_raw_hunks;
    ngx_chain_t       *in;
    ngx_chain_t      **last_in;

    ngx_chain_t       *out;
    ngx_chain_t      **last_out;

    ngx_chain_t       *free;
    ngx_chain_t       *busy;

    /*
     * the input filter i.e. that moves HTTP/1.1 chunks
     * from the raw hunks to an incoming chain
     */

    ngx_event_pipe_input_filter_pt    input_filter;
    void                              *input_ctx;

    ngx_event_pipe_output_filter_pt   output_filter;
    void                              *output_ctx;

    unsigned           read:1;
    unsigned           cachable:1;
    unsigned           upstream_done:1;
    unsigned           upstream_error:1;
    unsigned           upstream_eof:1;
    unsigned           upstream_blocked:1;
    unsigned           downstream_done:1;
    unsigned           downstream_error:1;
    unsigned           cyclic_temp_file:1;

    int                hunks;
    ngx_bufs_t         bufs;
    ngx_hunk_tag_t     tag;

    size_t             busy_size;

    off_t              temp_offset;
    off_t              max_temp_file_size;
    int                temp_file_write_size;

    ngx_connection_t  *upstream;
    ngx_connection_t  *downstream;

    ngx_msec_t         read_timeout;
    ngx_msec_t         send_timeout;
    ssize_t            send_lowat;

    ngx_pool_t        *pool;
    ngx_log_t         *log;

    ngx_chain_t       *preread_hunks;
    int                preread_size;

    ngx_file_t        *temp_file;
    ngx_path_t        *temp_path;
    char              *temp_file_warn;
    /* STUB */ int     num;
};


int ngx_event_pipe(ngx_event_pipe_t *p, int do_write);
int ngx_event_pipe_copy_input_filter(ngx_event_pipe_t *p, ngx_hunk_t *hunk);


#endif /* _NGX_EVENT_PIPE_H_INCLUDED_ */
