diff src/http/modules/proxy/ngx_http_proxy_handler.h @ 170:c42be4185301

nginx-0.0.1-2003-11-03-01:56:18 import
author Igor Sysoev <igor@sysoev.ru>
date Sun, 02 Nov 2003 22:56:18 +0000
parents edf29bb717da
children aff0e5d32af8
line wrap: on
line diff
--- a/src/http/modules/proxy/ngx_http_proxy_handler.h
+++ b/src/http/modules/proxy/ngx_http_proxy_handler.h
@@ -5,10 +5,13 @@
 #include <ngx_config.h>
 #include <ngx_core.h>
 #include <ngx_event.h>
+#include <ngx_event_connect.h>
+#include <ngx_event_pipe.h>
 #include <ngx_http.h>
 
 
 typedef struct {
+    ngx_str_t   url;
     ngx_str_t   host;
     ngx_str_t   uri;
     ngx_str_t   host_header;
@@ -19,49 +22,60 @@ typedef struct {
 
 
 typedef struct {
-    ssize_t                     request_buffer_size;
-    ngx_msec_t                  connect_timeout;
-    ngx_msec_t                  send_timeout;
-    ssize_t                     header_buffer_size;
-    ngx_msec_t                  read_timeout;
+    ssize_t                       request_buffer_size;
+    ngx_msec_t                    connect_timeout;
+    ngx_msec_t                    send_timeout;
+    ssize_t                       header_buffer_size;
+    ngx_msec_t                    read_timeout;
 
-    ngx_bufs_t                  bufs;
-    ssize_t                     busy_buffers_size;
+    ngx_bufs_t                    bufs;
+    ssize_t                       busy_buffers_size;
 
-    ssize_t                     max_temp_file_size;
-    ssize_t                     temp_file_write_size;
-    int                         cyclic_temp_file;
+    ssize_t                       max_temp_file_size;
+    ssize_t                       temp_file_write_size;
+    int                           cyclic_temp_file;
 
-    int                         pass_server;
+    int                           cache;
+    int                           pass_server;
 
-    int                         next_upstream;
+    int                           next_upstream;
+    int                           use_stale;
 
-    ngx_path_t                 *temp_path;
+    ngx_path_t                   *cache_path;
+    ngx_path_t                   *temp_path;
 
-    ngx_http_proxy_upstream_t  *upstream;
-    ngx_peers_t                *peers;
+    ngx_http_proxy_upstream_t    *upstream;
+    ngx_peers_t                  *peers;
 } ngx_http_proxy_loc_conf_t;
 
 
 typedef struct {
-    int         status;
-    ngx_str_t  *peer;
+    int                           status;
+    ngx_str_t                    *peer;
 } ngx_http_proxy_state_t;
 
 
 typedef struct {
-    ngx_table_t      *headers;   /* it must be first field */
+    ngx_table_t                  *headers;   /* it must be first field */
+
+    ngx_table_elt_t              *date;
+    ngx_table_elt_t              *server;
+    ngx_table_elt_t              *connection;
+    ngx_table_elt_t              *content_type;
+    ngx_table_elt_t              *content_length;
+    ngx_table_elt_t              *last_modified;
+    ngx_table_elt_t              *accept_ranges;
 
-    ngx_table_elt_t  *date;
-    ngx_table_elt_t  *server;
-    ngx_table_elt_t  *connection;
-    ngx_table_elt_t  *content_type;
-    ngx_table_elt_t  *content_length;
-    ngx_table_elt_t  *last_modified;
-    ngx_table_elt_t  *accept_ranges;
+    off_t                         content_length_n;
+} ngx_http_proxy_headers_in_t;
+
 
-    off_t             content_length_n;
-} ngx_http_proxy_headers_in_t;
+typedef struct {
+    ngx_http_cache_ctx_t          ctx;
+    int                           status;
+    ngx_str_t                     status_line;
+    ngx_http_proxy_headers_in_t   headers_in;
+} ngx_http_proxy_cache_t;
 
 
 typedef struct ngx_http_proxy_ctx_s  ngx_http_proxy_ctx_t;
@@ -72,45 +86,69 @@ struct ngx_http_proxy_ctx_s {
 
     ngx_http_request_t           *request;
     ngx_http_proxy_loc_conf_t    *lcf;
+    ngx_http_proxy_cache_t       *cache;
     ngx_http_proxy_headers_in_t   headers_in;
 
-    ngx_hunk_t                 *header_in;
-    int                         status;
-    ngx_str_t                   status_line;
+    ngx_hunk_t                   *header_in;
+    int                           status;
+    ngx_str_t                     status_line;
 
-    ngx_output_chain_ctx_t     *output_chain_ctx;
+    ngx_output_chain_ctx_t       *output_chain_ctx;
 
-    int                         method;
+    int                           method;
 
-    ngx_event_pipe_t           *event_pipe;
+    ngx_event_pipe_t             *event_pipe;
+
+    unsigned                      accel:1;
 
-    unsigned                    accel:1;
-    unsigned                    cachable:1;
-    unsigned                    fatal_error:1;
-    unsigned                    request_sent:1;
-    unsigned                    timedout:1;
-    unsigned                    header_sent:1;
+    unsigned                      cachable:1;
+    unsigned                      stale:1;
+
+    unsigned                      request_sent:1;
+    unsigned                      header_sent:1;
 
     /* used to parse an upstream HTTP header */
-    char                       *status_start;
-    char                       *status_end;
-    int                         status_count;
-    int                         state;
+    char                         *status_start;
+    char                         *status_end;
+    int                           status_count;
+    int                           state;
 
-    ngx_array_t                 states;    /* of ngx_http_proxy_state_t */
+    ngx_array_t                   states;    /* of ngx_http_proxy_state_t */
 
-    char                       *action;
-    ngx_http_log_ctx_t         *saved_ctx;
-    ngx_log_handler_pt          saved_handler;
+    char                         *action;
+    ngx_http_log_ctx_t           *saved_ctx;
+    ngx_log_handler_pt            saved_handler;
 };
 
 
-#define NGX_HTTP_PROXY_PARSE_NO_HEADER  20
+#define NGX_STALE                            1
+
+#define NGX_HTTP_PROXY_PARSE_NO_HEADER       20
+
+#define NGX_HTTP_PROXY_FT_ERROR              2
+#define NGX_HTTP_PROXY_FT_TIMEOUT            4
+#define NGX_HTTP_PROXY_FT_INVALID_HEADER     8
+#define NGX_HTTP_PROXY_FT_HTTP_500           16
+#define NGX_HTTP_PROXY_FT_HTTP_404           32
+#define NGX_HTTP_PROXY_FT_BUSY_LOCK          64
+#define NGX_HTTP_PROXY_FT_MAX_WAITING        128
+
 
-#define NGX_HTTP_PROXY_FT_ERROR         1
-#define NGX_HTTP_PROXY_FT_TIMEOUT       2
-#define NGX_HTTP_PROXY_FT_HTTP_HEADER   4
-#define NGX_HTTP_PROXY_FT_HTTP_500      8
+void ngx_http_proxy_reinit_upstream(ngx_http_proxy_ctx_t *p);
+
+int ngx_http_proxy_get_cached_response(ngx_http_proxy_ctx_t *p);
+int ngx_http_proxy_process_cached_response(ngx_http_proxy_ctx_t *p);
+int ngx_http_proxy_send_cached_response(ngx_http_proxy_ctx_t *p);
+
+int ngx_http_proxy_parse_status_line(ngx_http_proxy_ctx_t *p);
+int ngx_http_proxy_copy_header(ngx_http_proxy_ctx_t *p,
+                               ngx_http_proxy_headers_in_t *headers_in);
+
+
+
+extern ngx_module_t  ngx_http_proxy_module;
+extern ngx_http_header_t ngx_http_proxy_headers_in[];
+
 
 
 #endif /* _NGX_HTTP_PROXY_HANDLER_H_INCLUDED_ */