src/resolve.h
author Tero Marttila <terom@fixme.fi>
Wed, 27 May 2009 23:07:00 +0300
branchnew-lib-errors
changeset 216 a10ba529ae39
parent 173 1a7afcd2dd1a
permissions -rw-r--r--
initial error code
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 */