Annotation of embedaddon/nginx/src/core/ngx_resolver.h, revision 1.1.1.1

1.1       misho       1: 
                      2: /*
                      3:  * Copyright (C) Igor Sysoev
                      4:  * Copyright (C) Nginx, Inc.
                      5:  */
                      6: 
                      7: 
                      8: #include <ngx_config.h>
                      9: #include <ngx_core.h>
                     10: 
                     11: 
                     12: #ifndef _NGX_RESOLVER_H_INCLUDED_
                     13: #define _NGX_RESOLVER_H_INCLUDED_
                     14: 
                     15: 
                     16: #define NGX_RESOLVE_A         1
                     17: #define NGX_RESOLVE_CNAME     5
                     18: #define NGX_RESOLVE_PTR       12
                     19: #define NGX_RESOLVE_MX        15
                     20: #define NGX_RESOLVE_TXT       16
                     21: #define NGX_RESOLVE_DNAME     39
                     22: 
                     23: #define NGX_RESOLVE_FORMERR   1
                     24: #define NGX_RESOLVE_SERVFAIL  2
                     25: #define NGX_RESOLVE_NXDOMAIN  3
                     26: #define NGX_RESOLVE_NOTIMP    4
                     27: #define NGX_RESOLVE_REFUSED   5
                     28: #define NGX_RESOLVE_TIMEDOUT  NGX_ETIMEDOUT
                     29: 
                     30: 
                     31: #define NGX_NO_RESOLVER       (void *) -1
                     32: 
                     33: #define NGX_RESOLVER_MAX_RECURSION    50
                     34: 
                     35: 
                     36: typedef struct {
                     37:     ngx_connection_t         *connection;
                     38:     struct sockaddr          *sockaddr;
                     39:     socklen_t                 socklen;
                     40:     ngx_str_t                 server;
                     41:     ngx_log_t                 log;
                     42: } ngx_udp_connection_t;
                     43: 
                     44: 
                     45: typedef struct ngx_resolver_ctx_s  ngx_resolver_ctx_t;
                     46: 
                     47: typedef void (*ngx_resolver_handler_pt)(ngx_resolver_ctx_t *ctx);
                     48: 
                     49: 
                     50: typedef struct {
                     51:     ngx_rbtree_node_t         node;
                     52:     ngx_queue_t               queue;
                     53: 
                     54:     /* PTR: resolved name, A: name to resolve */
                     55:     u_char                   *name;
                     56: 
                     57:     u_short                   nlen;
                     58:     u_short                   qlen;
                     59: 
                     60:     u_char                   *query;
                     61: 
                     62:     union {
                     63:         in_addr_t             addr;
                     64:         in_addr_t            *addrs;
                     65:         u_char               *cname;
                     66:     } u;
                     67: 
                     68:     u_short                   naddrs;
                     69:     u_short                   cnlen;
                     70: 
                     71:     time_t                    expire;
                     72:     time_t                    valid;
                     73: 
                     74:     ngx_resolver_ctx_t       *waiting;
                     75: } ngx_resolver_node_t;
                     76: 
                     77: 
                     78: typedef struct {
                     79:     /* has to be pointer because of "incomplete type" */
                     80:     ngx_event_t              *event;
                     81:     void                     *dummy;
                     82:     ngx_log_t                *log;
                     83: 
                     84:     /* ident must be after 3 pointers */
                     85:     ngx_int_t                 ident;
                     86: 
                     87:     /* simple round robin DNS peers balancer */
                     88:     ngx_array_t               udp_connections;
                     89:     ngx_uint_t                last_connection;
                     90: 
                     91:     ngx_rbtree_t              name_rbtree;
                     92:     ngx_rbtree_node_t         name_sentinel;
                     93: 
                     94:     ngx_rbtree_t              addr_rbtree;
                     95:     ngx_rbtree_node_t         addr_sentinel;
                     96: 
                     97:     ngx_queue_t               name_resend_queue;
                     98:     ngx_queue_t               addr_resend_queue;
                     99: 
                    100:     ngx_queue_t               name_expire_queue;
                    101:     ngx_queue_t               addr_expire_queue;
                    102: 
                    103:     time_t                    resend_timeout;
                    104:     time_t                    expire;
                    105:     time_t                    valid;
                    106: 
                    107:     ngx_uint_t                log_level;
                    108: } ngx_resolver_t;
                    109: 
                    110: 
                    111: struct ngx_resolver_ctx_s {
                    112:     ngx_resolver_ctx_t       *next;
                    113:     ngx_resolver_t           *resolver;
                    114:     ngx_udp_connection_t     *udp_connection;
                    115: 
                    116:     /* ident must be after 3 pointers */
                    117:     ngx_int_t                 ident;
                    118: 
                    119:     ngx_int_t                 state;
                    120:     ngx_int_t                 type;
                    121:     ngx_str_t                 name;
                    122: 
                    123:     ngx_uint_t                naddrs;
                    124:     in_addr_t                *addrs;
                    125:     in_addr_t                 addr;
                    126: 
                    127:     ngx_resolver_handler_pt   handler;
                    128:     void                     *data;
                    129:     ngx_msec_t                timeout;
                    130: 
                    131:     ngx_uint_t                quick;  /* unsigned  quick:1; */
                    132:     ngx_uint_t                recursion;
                    133:     ngx_event_t              *event;
                    134: };
                    135: 
                    136: 
                    137: ngx_resolver_t *ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names,
                    138:     ngx_uint_t n);
                    139: ngx_resolver_ctx_t *ngx_resolve_start(ngx_resolver_t *r,
                    140:     ngx_resolver_ctx_t *temp);
                    141: ngx_int_t ngx_resolve_name(ngx_resolver_ctx_t *ctx);
                    142: void ngx_resolve_name_done(ngx_resolver_ctx_t *ctx);
                    143: ngx_int_t ngx_resolve_addr(ngx_resolver_ctx_t *ctx);
                    144: void ngx_resolve_addr_done(ngx_resolver_ctx_t *ctx);
                    145: char *ngx_resolver_strerror(ngx_int_t err);
                    146: 
                    147: 
                    148: #endif /* _NGX_RESOLVER_H_INCLUDED_ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>