xref: /unit/src/nxt_upstream.h (revision 1394:20b41ebfff79)
10Sigor@sysoev.ru 
20Sigor@sysoev.ru /*
30Sigor@sysoev.ru  * Copyright (C) Igor Sysoev
40Sigor@sysoev.ru  * Copyright (C) NGINX, Inc.
50Sigor@sysoev.ru  */
60Sigor@sysoev.ru 
70Sigor@sysoev.ru #ifndef _NXT_UPSTREAM_H_INCLUDED_
80Sigor@sysoev.ru #define _NXT_UPSTREAM_H_INCLUDED_
90Sigor@sysoev.ru 
100Sigor@sysoev.ru 
11*1394Sigor@sysoev.ru typedef struct nxt_upstream_proxy_s            nxt_upstream_proxy_t;
12*1394Sigor@sysoev.ru typedef struct nxt_upstream_round_robin_s      nxt_upstream_round_robin_t;
13*1394Sigor@sysoev.ru typedef struct nxt_upstream_round_robin_server_s
14*1394Sigor@sysoev.ru     nxt_upstream_round_robin_server_t;
15*1394Sigor@sysoev.ru 
16*1394Sigor@sysoev.ru 
17*1394Sigor@sysoev.ru typedef void (*nxt_upstream_peer_ready_t)(nxt_task_t *task,
18*1394Sigor@sysoev.ru     nxt_upstream_server_t *us);
19*1394Sigor@sysoev.ru typedef void (*nxt_upstream_peer_error_t)(nxt_task_t *task,
20*1394Sigor@sysoev.ru     nxt_upstream_server_t *us);
21*1394Sigor@sysoev.ru 
22*1394Sigor@sysoev.ru 
23*1394Sigor@sysoev.ru typedef struct {
24*1394Sigor@sysoev.ru     nxt_upstream_peer_ready_t                  ready;
25*1394Sigor@sysoev.ru     nxt_upstream_peer_error_t                  error;
26*1394Sigor@sysoev.ru } nxt_upstream_peer_state_t;
27*1394Sigor@sysoev.ru 
28*1394Sigor@sysoev.ru 
29*1394Sigor@sysoev.ru typedef nxt_upstream_t *(*nxt_upstream_joint_create_t)(
30*1394Sigor@sysoev.ru     nxt_router_temp_conf_t *tmcf, nxt_upstream_t *upstream);
31*1394Sigor@sysoev.ru typedef void (*nxt_upstream_server_get_t)(nxt_task_t *task,
32*1394Sigor@sysoev.ru     nxt_upstream_server_t *us);
33*1394Sigor@sysoev.ru 
34*1394Sigor@sysoev.ru 
35*1394Sigor@sysoev.ru typedef struct {
36*1394Sigor@sysoev.ru     nxt_upstream_joint_create_t                joint_create;
37*1394Sigor@sysoev.ru     nxt_upstream_server_get_t                  get;
38*1394Sigor@sysoev.ru } nxt_upstream_server_proto_t;
39*1394Sigor@sysoev.ru 
40*1394Sigor@sysoev.ru 
41*1394Sigor@sysoev.ru struct nxt_upstream_s {
42*1394Sigor@sysoev.ru     const nxt_upstream_server_proto_t          *proto;
43*1394Sigor@sysoev.ru 
44*1394Sigor@sysoev.ru     union {
45*1394Sigor@sysoev.ru         nxt_upstream_proxy_t                   *proxy;
46*1394Sigor@sysoev.ru         nxt_upstream_round_robin_t             *round_robin;
47*1394Sigor@sysoev.ru     } type;
48*1394Sigor@sysoev.ru 
49*1394Sigor@sysoev.ru     nxt_str_t                                  name;
50*1394Sigor@sysoev.ru };
51*1394Sigor@sysoev.ru 
52*1394Sigor@sysoev.ru 
53*1394Sigor@sysoev.ru struct nxt_upstreams_s {
54*1394Sigor@sysoev.ru     uint32_t                                   items;
55*1394Sigor@sysoev.ru     nxt_upstream_t                             upstream[0];
56*1394Sigor@sysoev.ru };
57*1394Sigor@sysoev.ru 
58*1394Sigor@sysoev.ru 
59*1394Sigor@sysoev.ru struct nxt_upstream_server_s {
60*1394Sigor@sysoev.ru     nxt_sockaddr_t                             *sockaddr;
61*1394Sigor@sysoev.ru     const nxt_upstream_peer_state_t            *state;
62*1394Sigor@sysoev.ru     nxt_upstream_t                             *upstream;
63*1394Sigor@sysoev.ru 
64*1394Sigor@sysoev.ru     uint8_t                                    protocol;
65*1394Sigor@sysoev.ru 
66*1394Sigor@sysoev.ru     union {
67*1394Sigor@sysoev.ru         nxt_upstream_round_robin_server_t      *round_robin;
68*1394Sigor@sysoev.ru     } server;
69*1394Sigor@sysoev.ru 
70*1394Sigor@sysoev.ru     union {
71*1394Sigor@sysoev.ru         nxt_http_peer_t                        *http;
72*1394Sigor@sysoev.ru     } peer;
73*1394Sigor@sysoev.ru };
74*1394Sigor@sysoev.ru 
75*1394Sigor@sysoev.ru 
76*1394Sigor@sysoev.ru nxt_int_t nxt_upstream_round_robin_create(nxt_task_t *task,
77*1394Sigor@sysoev.ru     nxt_router_temp_conf_t *tmcf, nxt_conf_value_t *upstream_conf,
78*1394Sigor@sysoev.ru     nxt_upstream_t *upstream);
79*1394Sigor@sysoev.ru 
80*1394Sigor@sysoev.ru 
810Sigor@sysoev.ru #endif /* _NXT_UPSTREAM_H_INCLUDED_ */
82