src/stream/ngx_stream_upstream.h - nginx source code

Data types defined

Macros defined

Source code


  1. /*
  2. * Copyright (C) Igor Sysoev
  3. * Copyright (C) Nginx, Inc.
  4. */


  5. #ifndef _NGX_STREAM_UPSTREAM_H_INCLUDED_
  6. #define _NGX_STREAM_UPSTREAM_H_INCLUDED_


  7. #include <ngx_config.h>
  8. #include <ngx_core.h>
  9. #include <ngx_stream.h>
  10. #include <ngx_event_connect.h>


  11. #define NGX_STREAM_UPSTREAM_CREATE        0x0001
  12. #define NGX_STREAM_UPSTREAM_WEIGHT        0x0002
  13. #define NGX_STREAM_UPSTREAM_MAX_FAILS     0x0004
  14. #define NGX_STREAM_UPSTREAM_FAIL_TIMEOUT  0x0008
  15. #define NGX_STREAM_UPSTREAM_DOWN          0x0010
  16. #define NGX_STREAM_UPSTREAM_BACKUP        0x0020
  17. #define NGX_STREAM_UPSTREAM_MODIFY        0x0040
  18. #define NGX_STREAM_UPSTREAM_MAX_CONNS     0x0100


  19. #define NGX_STREAM_UPSTREAM_NOTIFY_CONNECT     0x1


  20. typedef struct {
  21.     ngx_array_t                        upstreams;
  22.                                            /* ngx_stream_upstream_srv_conf_t */
  23. } ngx_stream_upstream_main_conf_t;


  24. typedef struct ngx_stream_upstream_srv_conf_s  ngx_stream_upstream_srv_conf_t;


  25. typedef ngx_int_t (*ngx_stream_upstream_init_pt)(ngx_conf_t *cf,
  26.     ngx_stream_upstream_srv_conf_t *us);
  27. typedef ngx_int_t (*ngx_stream_upstream_init_peer_pt)(ngx_stream_session_t *s,
  28.     ngx_stream_upstream_srv_conf_t *us);


  29. typedef struct {
  30.     ngx_stream_upstream_init_pt        init_upstream;
  31.     ngx_stream_upstream_init_peer_pt   init;
  32.     void                              *data;
  33. } ngx_stream_upstream_peer_t;


  34. typedef struct {
  35.     ngx_str_t                          name;
  36.     ngx_addr_t                        *addrs;
  37.     ngx_uint_t                         naddrs;
  38.     ngx_uint_t                         weight;
  39.     ngx_uint_t                         max_conns;
  40.     ngx_uint_t                         max_fails;
  41.     time_t                             fail_timeout;
  42.     ngx_msec_t                         slow_start;
  43.     ngx_uint_t                         down;

  44.     unsigned                           backup:1;

  45. #if (NGX_STREAM_UPSTREAM_ZONE)
  46.     ngx_str_t                          host;
  47.     ngx_str_t                          service;
  48. #endif
  49. } ngx_stream_upstream_server_t;


  50. struct ngx_stream_upstream_srv_conf_s {
  51.     ngx_stream_upstream_peer_t         peer;
  52.     void                             **srv_conf;

  53.     ngx_array_t                       *servers;
  54.                                               /* ngx_stream_upstream_server_t */

  55.     ngx_uint_t                         flags;
  56.     ngx_str_t                          host;
  57.     u_char                            *file_name;
  58.     ngx_uint_t                         line;
  59.     in_port_t                          port;
  60.     ngx_uint_t                         no_port;  /* unsigned no_port:1 */

  61. #if (NGX_STREAM_UPSTREAM_ZONE)
  62.     ngx_shm_zone_t                    *shm_zone;
  63.     ngx_resolver_t                    *resolver;
  64.     ngx_msec_t                         resolver_timeout;
  65. #endif
  66. };


  67. typedef struct {
  68.     ngx_msec_t                         response_time;
  69.     ngx_msec_t                         connect_time;
  70.     ngx_msec_t                         first_byte_time;
  71.     off_t                              bytes_sent;
  72.     off_t                              bytes_received;

  73.     ngx_str_t                         *peer;
  74. } ngx_stream_upstream_state_t;


  75. typedef struct {
  76.     ngx_str_t                          host;
  77.     in_port_t                          port;
  78.     ngx_uint_t                         no_port; /* unsigned no_port:1 */

  79.     ngx_uint_t                         naddrs;
  80.     ngx_resolver_addr_t               *addrs;

  81.     struct sockaddr                   *sockaddr;
  82.     socklen_t                          socklen;
  83.     ngx_str_t                          name;

  84.     ngx_resolver_ctx_t                *ctx;
  85. } ngx_stream_upstream_resolved_t;


  86. typedef struct {
  87.     ngx_peer_connection_t              peer;

  88.     ngx_buf_t                          downstream_buf;
  89.     ngx_buf_t                          upstream_buf;

  90.     ngx_chain_t                       *free;
  91.     ngx_chain_t                       *upstream_out;
  92.     ngx_chain_t                       *upstream_busy;
  93.     ngx_chain_t                       *downstream_out;
  94.     ngx_chain_t                       *downstream_busy;

  95.     off_t                              received;
  96.     time_t                             start_sec;
  97.     ngx_uint_t                         requests;
  98.     ngx_uint_t                         responses;
  99.     ngx_msec_t                         start_time;

  100.     size_t                             upload_rate;
  101.     size_t                             download_rate;

  102.     ngx_str_t                          ssl_name;

  103.     ngx_stream_upstream_srv_conf_t    *upstream;
  104.     ngx_stream_upstream_resolved_t    *resolved;
  105.     ngx_stream_upstream_state_t       *state;
  106.     unsigned                           connected:1;
  107.     unsigned                           proxy_protocol:1;
  108.     unsigned                           half_closed:1;
  109. } ngx_stream_upstream_t;


  110. ngx_stream_upstream_srv_conf_t *ngx_stream_upstream_add(ngx_conf_t *cf,
  111.     ngx_url_t *u, ngx_uint_t flags);


  112. #define ngx_stream_conf_upstream_srv_conf(uscf, module)                       \
  113.     uscf->srv_conf[module.ctx_index]


  114. extern ngx_module_t  ngx_stream_upstream_module;


  115. #endif /* _NGX_STREAM_UPSTREAM_H_INCLUDED_ */