mowgli_dns_t * mowgli_dns_create(mowgli_eventloop_t *eventloop, int implementation)
{
mowgli_dns_t *dns = mowgli_alloc(sizeof(mowgli_dns_t));
- mowgli_dns_ops_t *ops;
+ const mowgli_dns_ops_t *ops;
switch (implementation)
{
break;
}
- dns->dns_ops = ops;
-
- if (mowgli_dns_init(dns, eventloop) != 0)
+ if (mowgli_dns_init(dns, eventloop, ops) != 0)
{
mowgli_free(dns);
return NULL;
return dns;
}
-int mowgli_dns_init(mowgli_dns_t *dns, mowgli_eventloop_t *eventloop)
+int mowgli_dns_init(mowgli_dns_t *dns, mowgli_eventloop_t *eventloop, const mowgli_dns_ops_t *ops)
{
return_val_if_fail(dns != NULL, -1);
- return_val_if_fail(dns->dns_ops != NULL, -1);
+
+ dns->dns_ops = ops;
return dns->dns_ops->mowgli_dns_init_func_t(dns, eventloop);
}
#include "mowgli.h"
+/* Longest hostname we're willing to work with */
+#define MOWGLI_DNS_RES_HOSTLEN 512
+
+/* Resolver types */
#define MOWGLI_DNS_TYPE_CUSTOM 0
#define MOWGLI_DNS_TYPE_ASYNC 1
#define MOWGLI_DNS_TYPE_HELPER 2
+/* Lookup types */
#define MOWGLI_DNS_T_A 1
#define MOWGLI_DNS_T_AAAA 28
#define MOWGLI_DNS_T_PTR 12
#define MOWGLI_DNS_T_SSHFP 44
#define MOWGLI_DNS_T_NULL 10
+/* Return codes */
#define MOWGLI_DNS_RES_SUCCESS 0
#define MOWGLI_DNS_RES_NXDOMAIN 1
#define MOWGLI_DNS_RES_INVALID 2
struct _mowgli_dns_t
{
int dns_type;
- mowgli_dns_ops_t *dns_ops;
+ const mowgli_dns_ops_t *dns_ops;
void *dns_state;
};
};
extern mowgli_dns_t * mowgli_dns_create(mowgli_eventloop_t *eventloop, int implementation);
-extern int mowgli_dns_init(mowgli_dns_t *dns, mowgli_eventloop_t *eventloop);
+extern int mowgli_dns_init(mowgli_dns_t *dns, mowgli_eventloop_t *eventloop, const mowgli_dns_ops_t *ops);
extern void mowgli_dns_destroy(mowgli_dns_t *dns);
extern int mowgli_dns_restart(mowgli_dns_t *dns);
extern void mowgli_dns_delete_query(mowgli_dns_t *dns, const mowgli_dns_query_t *query);
}
/* DNS ops for this resolver */
-mowgli_dns_ops_t mowgli_dns_evloop_resolver = {
+const mowgli_dns_ops_t mowgli_dns_evloop_resolver = {
.mowgli_dns_init_func_t = mowgli_dns_evloop_init,
.mowgli_dns_fini_func_t = mowgli_dns_evloop_destroy,
.mowgli_dns_restart_func_t = mowgli_dns_evloop_restart,
/* Maximum number of nameservers we track */
#define MOWGLI_DNS_MAXNS 10
-/* Longest hostname we're willing to work with */
-#define MOWGLI_DNS_RES_HOSTLEN 512
-
typedef struct
{
mowgli_vio_sockaddr_t nsaddr_list[MOWGLI_DNS_MAXNS];
extern void mowgli_dns_evloop_gethost_byaddr(mowgli_dns_t *dns, const struct sockaddr_storage *, mowgli_dns_query_t *);
extern void mowgli_dns_evloop_add_local_domain(mowgli_dns_t *dns, char *, size_t);
-extern mowgli_dns_ops_t mowgli_dns_evloop_resolver;
+extern const mowgli_dns_ops_t mowgli_dns_evloop_resolver;
#endif