author | Tero Marttila <terom@fixme.fi> |
Wed, 27 May 2009 23:07:00 +0300 | |
branch | new-lib-errors |
changeset 216 | a10ba529ae39 |
parent 173 | 1a7afcd2dd1a |
permissions | -rw-r--r-- |
173
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
1 |
#ifndef RESOLVE_H |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
2 |
#define RESOLVE_H |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
3 |
|
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
4 |
/** |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
5 |
* @file |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
6 |
* |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
7 |
* DNS resolver interface |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
8 |
*/ |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
9 |
#include "error.h" |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
10 |
#include <netdb.h> |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
11 |
|
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
12 |
/** |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
13 |
* Lookup result state |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
14 |
*/ |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
15 |
struct resolve_result { |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
16 |
/** Head of the addrinfo list */ |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
17 |
struct addrinfo *list; |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
18 |
|
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
19 |
/** Current addrinfo item */ |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
20 |
struct addrinfo *item; |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
21 |
}; |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
22 |
|
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
23 |
/** |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
24 |
* Resolve the given node/service tuple as a series of addrinfos for the given socktype. |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
25 |
* |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
26 |
* This will never return an empty result. |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
27 |
* |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
28 |
* XXX: blocking DNS stuff |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
29 |
* |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
30 |
* @param res where to store the result state |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
31 |
* @param node hostname/address to look up |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
32 |
* @param service service/port to look up |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
33 |
* @param socktype a SOCK_* value to return addrinfo's for that socktype |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
34 |
* @param ai_flags optional bitmask of AI_* flags to use |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
35 |
* @param err returned error info |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
36 |
*/ |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
37 |
err_t resolve_addr (struct resolve_result *res, const char *node, const char *service, int socktype, int ai_flags, error_t *err); |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
38 |
|
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
39 |
/** |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
40 |
* Initialize the given result to zero |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
41 |
*/ |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
42 |
void resolve_result_init (struct resolve_result *res); |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
43 |
|
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
44 |
/** |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
45 |
* Get the next address from a result, if any left |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
46 |
*/ |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
47 |
struct addrinfo* resolve_result_next (struct resolve_result *res); |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
48 |
|
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
49 |
/** |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
50 |
* Release the addrinfo resources associated with the given result |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
51 |
*/ |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
52 |
void resolve_result_deinit (struct resolve_result *res); |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
53 |
|
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
54 |
/** |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
55 |
* Returns a pointer to a static buffer containing a string description of the given addrinfo |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
56 |
*/ |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
57 |
const char * resolve_addr_text (const struct addrinfo *addr); |
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
58 |
|
1a7afcd2dd1a
implement a separate resolver module
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
59 |
#endif /* RESOLVE_H */ |