Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added ability to use custom resolver #91

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions libopenarc/arc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1015,6 +1015,60 @@ arc_options(ARC_LIB *lib, int op, int arg, void *val, size_t valsz)
}
}

/*
**
** ARC_INIT_DNS -- override and initialize library DNS resolver
**
** Parameters:
** lib -- library to set DNS for
** srv -- resolver handle to use
** arc_dns_close -- terminates a resolver
** arc_dns_start -- starts a DNS query
** arc_dns_cancel -- cancels a DNS query
** arc_dns_waitreply -- synchronously waits on a DNS response
**
** Return value:
** An ARC_STAT_* constant.
*/

ARC_STAT
arc_init_dns(ARC_LIB *lib, void* srv,
void (*arc_dns_close) (void *srv),
int (*arc_dns_start) (void *srv, int type,
unsigned char *query,
unsigned char *buf,
size_t buflen,
void **qh),
int (*arc_dns_cancel) (void *srv, void *qh),
int (*arc_dns_waitreply) (void *srv,
void *qh,
struct timeval *to,
size_t *bytes,
int *error,
int *dnssec))
{
assert(lib != NULL);
assert(srv != 0);
assert(arc_dns_close != 0);
assert(arc_dns_start != 0);
assert(arc_dns_cancel != 0);
assert(arc_dns_waitreply != 0);

/* "illegal state" would be better */
if (lib->arcl_dnsinit_done)
return ARC_STAT_INTERNAL;

lib->arcl_dnsinit_done = TRUE;
lib->arcl_dns_service = srv;
lib->arcl_dns_init = 0;
lib->arcl_dns_close = arc_dns_close;
lib->arcl_dns_start = arc_dns_start;
lib->arcl_dns_cancel = arc_dns_cancel;
lib->arcl_dns_waitreply = arc_dns_waitreply;

return ARC_STAT_OK;
}

/*
** ARC_GETSSLBUF -- retrieve SSL error buffer
**
Expand Down
31 changes: 31 additions & 0 deletions libopenarc/arc.h
Original file line number Diff line number Diff line change
Expand Up @@ -360,6 +360,37 @@ extern const char *arc_geterror __P((ARC_MESSAGE *));

extern ARC_STAT arc_options __P((ARC_LIB *, int, int, void *, size_t));

/*
**
** ARC_INIT_DNS -- override and initialize library DNS resolver
**
** Parameters:
** lib -- library to set DNS for
** srv -- resolver handle to use
** arc_dns_close -- terminates a resolver
** arc_dns_start -- starts a DNS query
** arc_dns_cancel -- cancels a DNS query
** arc_dns_waitreply -- synchronously waits on a DNS response
**
** Return value:
** An ARC_STAT_* constant.
*/

extern ARC_STAT arc_init_dns __P((ARC_LIB *, void* srv,
void (*arc_dns_close) (void *srv),
int (*arc_dns_start) (void *srv, int type,
unsigned char *query,
unsigned char *buf,
size_t buflen,
void **qh),
int (*arc_dns_cancel) (void *srv, void *qh),
int (*arc_dns_waitreply) (void *srv,
void *qh,
struct timeval *to,
size_t *bytes,
int *error,
int *dnssec)));

/*
** ARC_GETSSLBUF -- retrieve SSL error buffer
**
Expand Down