dns_set.idle_timeout_msecs = AUTH_DNS_IDLE_TIMEOUT_MSECS;
dns_set.cache_ttl_secs = AUTH_DNS_CACHE_TTL_SECS;
- auth->dns_client = dns_client_init(&dns_set);
+ auth->dns_client = dns_client_init(&dns_set, NULL);
}
static void auth_deinit(struct auth *auth)
}
int dns_lookup(const char *host, const struct dns_client_settings *set,
- dns_lookup_callback_t *callback, void *context,
- struct dns_lookup **lookup_r)
+ struct event *event_parent, dns_lookup_callback_t *callback,
+ void *context, struct dns_lookup **lookup_r)
{
struct dns_client *client;
i_assert(set->cache_ttl_secs == 0);
- client = dns_client_init(set);
+ client = dns_client_init(set, event_parent);
client->deinit_client_at_free = TRUE;
return dns_client_lookup(client, host, client->conn.event, callback,
context, lookup_r);
int dns_lookup_ptr(const struct ip_addr *ip,
const struct dns_client_settings *set,
+ struct event *event_parent,
dns_lookup_callback_t *callback, void *context,
struct dns_lookup **lookup_r)
{
struct dns_client *client;
i_assert(set->cache_ttl_secs == 0);
- client = dns_client_init(set);
+ client = dns_client_init(set, event_parent);
client->deinit_client_at_free = TRUE;
return dns_client_lookup_ptr(client, ip, client->conn.event,
callback, context, lookup_r);
.client = TRUE,
};
-struct dns_client *dns_client_init(const struct dns_client_settings *set)
+struct dns_client *dns_client_init(const struct dns_client_settings *set,
+ struct event *event_parent)
{
struct dns_client *client;
client->clist = connection_list_init(&dns_client_set, &dns_client_vfuncs);
client->ioloop = set->ioloop == NULL ? current_ioloop : set->ioloop;
client->path = i_strdup(set->dns_client_socket_path);
- client->conn.event_parent=set->event_parent;
+ client->conn.event_parent = event_parent;
connection_init_client_unix(client->clist, &client->conn, client->path);
event_add_category(client->conn.event, &event_category_dns);
if (set->cache_ttl_secs > 0) {
/* ioloop to run the lookup on (defaults to current_ioloop) */
struct ioloop *ioloop;
- struct event *event_parent;
};
struct dns_lookup_result {
When failing with -1, the callback is called before returning from the
function. */
int dns_lookup(const char *host, const struct dns_client_settings *set,
+ struct event *event_parent,
dns_lookup_callback_t *callback, void *context,
struct dns_lookup **lookup_r) ATTR_NULL(4);
-#define dns_lookup(host, set, callback, context, lookup_r) \
+#define dns_lookup(host, set, event_parent, callback, context, lookup_r) \
dns_lookup(host - \
CALLBACK_TYPECHECK(callback, void (*)( \
const struct dns_lookup_result *, typeof(context))), \
- set, (dns_lookup_callback_t *)callback, context, lookup_r)
+ set, event_parent, (dns_lookup_callback_t *)callback, context, lookup_r)
int dns_lookup_ptr(const struct ip_addr *ip,
const struct dns_client_settings *set,
+ struct event *event_parent,
dns_lookup_callback_t *callback, void *context,
struct dns_lookup **lookup_r) ATTR_NULL(4);
-#define dns_lookup_ptr(host, set, callback, context, lookup_r) \
+#define dns_lookup_ptr(host, set, event_parent, callback, context, lookup_r) \
dns_lookup_ptr(host - \
CALLBACK_TYPECHECK(callback, void (*)( \
const struct dns_lookup_result *, typeof(context))), \
- set, (dns_lookup_callback_t *)callback, context, lookup_r)
+ set, event_parent, \
+ (dns_lookup_callback_t *)callback, context, lookup_r)
/* Abort the DNS lookup without calling the callback. */
void dns_lookup_abort(struct dns_lookup **lookup);
void dns_lookup_switch_ioloop(struct dns_lookup *lookup);
/* Alternative API for clients that need to do multiple DNS lookups. */
-struct dns_client *dns_client_init(const struct dns_client_settings *set);
+struct dns_client *dns_client_init(const struct dns_client_settings *set,
+ struct event *event_parent);
void dns_client_deinit(struct dns_client **client);
/* Connect immediately to the dns-lookup socket. */
.ret = result == NULL ? -1 : 0,
.result = result
};
- test_assert(dns_lookup(name, &set, test_callback_ips, &ctx, &lookup) == 0);
+ test_assert(dns_lookup(name, &set, NULL, test_callback_ips, &ctx, &lookup) == 0);
io_loop_run(test_server.loop);
}
};
struct ip_addr addr;
i_assert(net_addr2ip(name, &addr) == 0);
- test_assert(dns_lookup_ptr(&addr, &set, test_callback_name, &ctx, &lookup) == 0);
+ test_assert(dns_lookup_ptr(&addr, &set, NULL, test_callback_name, &ctx, &lookup) == 0);
io_loop_run(test_server.loop);
}
.result = NULL,
};
- test_assert(dns_lookup("waitfor1500", &set, test_callback_ips, &ctx, &lookup) == 0);
+ test_assert(dns_lookup("waitfor1500", &set, NULL, test_callback_ips, &ctx, &lookup) == 0);
io_loop_run(current_ioloop);
destroy_dns_server(&test_server);
.result = NULL,
};
- test_assert(dns_lookup("waitfor1500", &set, test_callback_ips, &ctx, &lookup) == 0);
+ test_assert(dns_lookup("waitfor1500", &set, NULL, test_callback_ips, &ctx, &lookup) == 0);
struct timeout *to = timeout_add_short(100, io_loop_stop, current_ioloop);
io_loop_run(current_ioloop);
timeout_remove(&to);
.ioloop = test_server.loop,
.timeout_msecs = 1000,
.cache_ttl_secs = 4,
- .event_parent = event,
};
- struct dns_client *client = dns_client_init(&set);
+ struct dns_client *client = dns_client_init(&set, event);
/* lookup localhost */
ctx.result = "127.0.0.1\t::1";
i_zero(&dns_set);
dns_set.dns_client_socket_path = conn->set.dns_client_socket_path;
dns_set.timeout_msecs = DOVEADM_CLIENT_DNS_TIMEOUT_MSECS;
- dns_set.event_parent = conn->conn.event;
ctx->conn = conn;
- if (dns_lookup(conn->set.hostname, &dns_set,
+ if (dns_lookup(conn->set.hostname, &dns_set, conn->conn.event,
doveadm_client_dns_lookup_callback, ctx,
&conn->dns_lookup) != 0) {
*error_r = t_strdup(ctx->error);
dns_set.dns_client_socket_path = cctx->dns_client_socket_path;
dns_set.timeout_msecs = cctx->dns_lookup_timeout_msecs;
dns_set.ioloop = cctx->ioloop;
- dns_set.event_parent = hshared->event;
- (void)dns_lookup(hshared->name, &dns_set,
- http_client_host_shared_dns_callback, hshared,
- &hshared->dns_lookup);
+ (void)dns_lookup(hshared->name, &dns_set, hshared->event,
+ http_client_host_shared_dns_callback,
+ hshared, &hshared->dns_lookup);
} else {
struct ip_addr *ips;
unsigned int ips_count;
/* check if there is a DNS client */
if (access(dns_set.dns_client_socket_path, R_OK|W_OK) == 0) {
- dns_client = dns_client_init(&dns_set);
+ dns_client = dns_client_init(&dns_set, NULL);
if (dns_client_connect(dns_client, &error) < 0)
i_fatal("Couldn't initialize DNS client: %s", error);
i_zero(&dns_set);
dns_set.dns_client_socket_path = conn->client->dns_client_socket_path;
dns_set.timeout_msecs = conn->client->set->imapc_connection_timeout_interval_msecs;
- dns_set.event_parent = conn->event;
imapc_connection_set_state(conn, IMAPC_CONNECTION_STATE_CONNECTING);
if (conn->ips_count > 0) {
memcpy(conn->ips, ips, ips_count * sizeof(*ips));
} else {
(void)dns_lookup(conn->client->set->imapc_host, &dns_set,
- imapc_connection_dns_callback, conn,
- &conn->dns_lookup);
+ conn->event, imapc_connection_dns_callback,
+ conn, &conn->dns_lookup);
return;
}
imapc_connection_connect_next_ip(conn);
struct settings_simple test_set;
settings_simple_init(&test_set, NULL);
- struct dns_client *client = dns_client_init(&set);
+ struct dns_client *client = dns_client_init(&set, NULL);
struct dlua_script *script;
const char *error;
pclient->params.dns_client_socket_path;
prclient->dns_set.timeout_msecs =
pclient->params.client_connect_timeout_msecs;
- prclient->dns_set.event_parent = pclient->event;
(void)dns_lookup(prclient->address, &prclient->dns_set,
+ pclient->event,
program_client_net_connect_resolved,
prclient, &prclient->lookup);
return 0;
dns_set.dns_client_socket_path =
conn->set.dns_client_socket_path;
dns_set.timeout_msecs = conn->set.connect_timeout_msecs;
- dns_set.event_parent = conn->event;
e_debug(conn->event, "Performing asynchronous DNS lookup");
- (void)dns_lookup(conn->host, &dns_set,
+ (void)dns_lookup(conn->host, &dns_set, conn->event,
smtp_client_connection_dns_callback, conn,
&conn->dns_lookup);
} else {
dns_set.dns_client_socket_path =
client->set.dns_client_socket_path;
dns_set.timeout_msecs = POP3C_DNS_LOOKUP_TIMEOUT_MSECS;
- dns_set.event_parent = client->event;
- if (dns_lookup(client->set.host, &dns_set,
+ if (dns_lookup(client->set.host, &dns_set, client->event,
pop3c_dns_callback, client,
&client->dns_lookup) < 0)
return -1;