1
2/*
3 * Copyright (C) Igor Sysoev
4 * Copyright (C) Nginx, Inc.
5 */
6
7
8#ifndef _NGX_EVENT_CONNECT_H_INCLUDED_
9#define _NGX_EVENT_CONNECT_H_INCLUDED_
10
11
12#include <ngx_config.h>
13#include <ngx_core.h>
14#include <ngx_event.h>
15
16
17#define NGX_PEER_KEEPALIVE           1
18#define NGX_PEER_NEXT                2
19#define NGX_PEER_FAILED              4
20
21
22typedef struct ngx_peer_connection_s  ngx_peer_connection_t;
23
24typedef ngx_int_t (*ngx_event_get_peer_pt)(ngx_peer_connection_t *pc,
25    void *data);
26typedef void (*ngx_event_free_peer_pt)(ngx_peer_connection_t *pc, void *data,
27    ngx_uint_t state);
28typedef void (*ngx_event_notify_peer_pt)(ngx_peer_connection_t *pc,
29    void *data, ngx_uint_t type);
30typedef ngx_int_t (*ngx_event_set_peer_session_pt)(ngx_peer_connection_t *pc,
31    void *data);
32typedef void (*ngx_event_save_peer_session_pt)(ngx_peer_connection_t *pc,
33    void *data);
34
35
36struct ngx_peer_connection_s {
37    ngx_connection_t                *connection;
38
39    struct sockaddr                 *sockaddr;
40    socklen_t                        socklen;
41    ngx_str_t                       *name;
42
43    ngx_uint_t                       tries;
44    ngx_msec_t                       start_time;
45
46    ngx_event_get_peer_pt            get;
47    ngx_event_free_peer_pt           free;
48    ngx_event_notify_peer_pt         notify;
49    void                            *data;
50
51#if (NGX_SSL || NGX_COMPAT)
52    ngx_event_set_peer_session_pt    set_session;
53    ngx_event_save_peer_session_pt   save_session;
54#endif
55
56    ngx_addr_t                      *local;
57
58    int                              type;
59    int                              rcvbuf;
60
61    ngx_log_t                       *log;
62
63    unsigned                         cached:1;
64    unsigned                         transparent:1;
65
66                                     /* ngx_connection_log_error_e */
67    unsigned                         log_error:2;
68
69    NGX_COMPAT_BEGIN(2)
70    NGX_COMPAT_END
71};
72
73
74ngx_int_t ngx_event_connect_peer(ngx_peer_connection_t *pc);
75ngx_int_t ngx_event_get_peer(ngx_peer_connection_t *pc, void *data);
76
77
78#endif /* _NGX_EVENT_CONNECT_H_INCLUDED_ */
79