diff src/core/ngx_resolver.h @ 350:5a1bb0129dff NGINX_0_6_19

nginx 0.6.19 *) Bugfix: the 0.6.18 version could not be built.
author Igor Sysoev <http://sysoev.ru>
date Tue, 27 Nov 2007 00:00:00 +0300
parents
children 583decdb82a4
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/src/core/ngx_resolver.h
@@ -0,0 +1,142 @@
+
+/*
+ * Copyright (C) Igor Sysoev
+ */
+
+
+#include <ngx_config.h>
+#include <ngx_core.h>
+
+
+#ifndef _NGX_RESOLVER_H_INCLUDED_
+#define _NGX_RESOLVER_H_INCLUDED_
+
+
+#define NGX_RESOLVE_A         1
+#define NGX_RESOLVE_CNAME     5
+#define NGX_RESOLVE_PTR       12
+#define NGX_RESOLVE_MX        15
+#define NGX_RESOLVE_TXT       16
+
+#define NGX_RESOLVE_FORMERR   1
+#define NGX_RESOLVE_SERVFAIL  2
+#define NGX_RESOLVE_NXDOMAIN  3
+#define NGX_RESOLVE_NOTIMP    4
+#define NGX_RESOLVE_REFUSED   5
+#define NGX_RESOLVE_TIMEDOUT  NGX_ETIMEDOUT
+
+
+typedef struct {
+    ngx_connection_t         *connection;
+    struct sockaddr          *sockaddr;
+    socklen_t                 socklen;
+    ngx_str_t                 server;
+    ngx_log_t                *log;
+} ngx_udp_connection_t;
+
+
+typedef struct ngx_resolver_ctx_s  ngx_resolver_ctx_t;
+
+typedef void (*ngx_resolver_handler_pt)(ngx_resolver_ctx_t *ctx);
+
+
+typedef struct {
+    ngx_rbtree_node_t         node;
+    ngx_queue_t               queue;
+
+    /* PTR: resolved name, A: name to resolve */
+    u_char                   *name;
+
+    u_short                   nlen;
+    u_short                   qlen;
+
+    u_char                   *query;
+
+    union {
+        in_addr_t             addr;
+        in_addr_t            *addrs;
+        u_char               *cname;
+    } u;
+
+    u_short                   naddrs;
+    u_short                   cnlen;
+
+    time_t                    expire;
+    time_t                    valid;
+
+    ngx_resolver_ctx_t       *waiting;
+} ngx_resolver_node_t;
+
+
+typedef struct {
+    /* has to be pointer because of "incomplete type" */
+    ngx_event_t              *event;
+
+    /* TODO: DNS peers balancer */
+    /* STUB */
+    ngx_udp_connection_t     *udp_connection;
+
+    ngx_log_t                *log;
+
+    /* ident must be after 3 pointers */
+    ngx_int_t                 ident;
+
+    ngx_rbtree_t              name_rbtree;
+    ngx_rbtree_node_t         name_sentinel;
+
+    ngx_rbtree_t              addr_rbtree;
+    ngx_rbtree_node_t         addr_sentinel;
+
+    ngx_queue_t               name_resend_queue;
+    ngx_queue_t               addr_resend_queue;
+
+    ngx_queue_t               name_expire_queue;
+    ngx_queue_t               addr_expire_queue;
+
+    time_t                    resend_timeout;
+    time_t                    expire;
+    time_t                    valid;
+
+    ngx_uint_t                log_level;
+} ngx_resolver_t;
+
+
+struct ngx_resolver_ctx_s {
+    ngx_resolver_ctx_t       *next;
+    ngx_resolver_t           *resolver;
+    ngx_udp_connection_t     *udp_connection;
+
+    /* ident must be after 3 pointers */
+    ngx_int_t                 ident;
+
+    ngx_int_t                 state;
+    ngx_int_t                 type;
+    ngx_str_t                 name;
+
+    ngx_uint_t                naddrs;
+    in_addr_t                *addrs;
+    in_addr_t                 addr;
+
+    /* TODO: DNS peers balancer ctx */
+
+    ngx_resolver_handler_pt   handler;
+    void                     *data;
+    ngx_msec_t                timeout;
+
+    ngx_uint_t                quick;  /* unsigned  quick:1; */
+    ngx_event_t              *event;
+};
+
+
+ngx_resolver_t *ngx_resolver_create(ngx_peer_addr_t *addr, ngx_log_t *log);
+ngx_resolver_ctx_t *ngx_resolve_start(ngx_resolver_t *r,
+    ngx_resolver_ctx_t *temp);
+ngx_int_t ngx_resolve_name(ngx_resolver_ctx_t *ctx);
+void ngx_resolve_name_done(ngx_resolver_ctx_t *ctx);
+ngx_int_t ngx_resolve_addr(ngx_resolver_ctx_t *ctx);
+void ngx_resolve_addr_done(ngx_resolver_ctx_t *ctx);
+void *ngx_resolver_calloc(ngx_resolver_t *r, size_t size);
+char *ngx_resolver_strerror(ngx_int_t err);
+
+
+#endif /* _NGX_RESOLVER_H_INCLUDED_ */