Return to ngx_resolver.h CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / nginx / src / core |
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_ */