Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nginx/nginx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2007-11-23 20:13:26 +0300
committerIgor Sysoev <igor@sysoev.ru>2007-11-23 20:13:26 +0300
commitcb4d53861c0722ee6dc7da0753c90a41152260ab (patch)
treef98075d0b59f9e99f6c6276fd117c03e3244b7c1 /src/core/ngx_resolver.h
parent2e8f0d0b302758ebb08961d0ad632fdd4e35e837 (diff)
resolver
Diffstat (limited to 'src/core/ngx_resolver.h')
-rw-r--r--src/core/ngx_resolver.h142
1 files changed, 142 insertions, 0 deletions
diff --git a/src/core/ngx_resolver.h b/src/core/ngx_resolver.h
new file mode 100644
index 000000000..e69f42087
--- /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_ */