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