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