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