Standardized routines for forking processes (keeps all the specialized code in one...
[asterisk/asterisk.git] / include / asterisk / enum.h
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 1999 - 2005, Digium, Inc.
5  *
6  * Mark Spencer <markster@digium.com>
7  *
8  * See http://www.asterisk.org for more information about
9  * the Asterisk project. Please do not directly contact
10  * any of the maintainers of this project for assistance;
11  * the project provides a web site, mailing lists and IRC
12  * channels for your use.
13  *
14  * This program is free software, distributed under the terms of
15  * the GNU General Public License Version 2. See the LICENSE file
16  * at the top of the source tree.
17  */
18
19 /*!     \file enum.h
20         \brief DNS and ENUM functions
21 */
22
23 #ifndef _ASTERISK_ENUM_H
24 #define _ASTERISK_ENUM_H
25
26 #include "asterisk/channel.h"
27
28 struct naptr {
29         unsigned short order;
30         unsigned short pref;
31 } __attribute__ ((__packed__));
32
33 struct enum_naptr_rr {
34         struct naptr naptr; /*!< order and preference of RR */
35         char *result;       /*!< result of naptr parsing,e.g.: tel:+5553 */
36         char *tech;         /*!< Technology (from URL scheme) */
37         int sort_pos;       /*!< sort position */
38 };
39
40 struct enum_context {
41         char *dst;                       /*!< Destination part of URL from ENUM */
42         int dstlen;                      /*!< Length */
43         char *tech;                      /*!< Technology (from URL scheme) */
44         int techlen;                     /*!< Length */
45         char *txt;                       /*!< TXT record in TXT lookup */
46         int txtlen;                      /*!< Length */
47         char *naptrinput;                /*!< The number to lookup */
48         int position;                    /*!< used as counter for RRs or specifies position of required RR */
49         int options;                     /*!< options , see ENUMLOOKUP_OPTIONS_* defined above */
50         struct enum_naptr_rr *naptr_rrs; /*!< array of parsed NAPTR RRs */
51         int naptr_rrs_count;             /*!< Size of array naptr_rrs */
52 };
53
54
55 /*! \brief Lookup entry in ENUM 
56         \param chan     Channel
57         \param number   E164 number with or without the leading +
58         \param location Number returned (or SIP uri)
59         \param maxloc   Max length
60         \param technology     Technology (from url scheme in response)
61                        You can set it to get particular answer RR, if there are many techs in DNS response, example: "sip"
62                        If you need any record, then set it to empty string
63         \param maxtech  Max length
64         \param suffix   Zone suffix (if is NULL then use enum.conf 'search' variable)
65         \param options  Options ('c' to count number of NAPTR RR)
66         \param record   The position of required RR in the answer list
67         \param argcontext   Argument for caching results into an enum_context pointer (NULL is used for not caching)
68         \retval 1 if found
69         \retval 0 if not found
70         \retval -1 on hangup
71 */
72 int ast_get_enum(struct ast_channel *chan, const char *number, char *location, int maxloc, char *technology, 
73                 int maxtech, char* suffix, char* options, unsigned int record, struct enum_context **argcontext);
74
75 /*!     \brief Lookup DNS TXT record (used by app TXTCIDnum
76         \param chan     Channel
77         \param number   E164 number with or without the leading +
78         \param location Number returned (or SIP uri)
79         \param maxloc   Max length of number
80         \param technology       Technology (not used in TXT records)
81         \param maxtech  Max length
82         \param txt      Text string (return value)
83         \param maxtxt   Max length of "txt"
84 */
85 int ast_get_txt(struct ast_channel *chan, const char *number, char *location, int maxloc, char *technology, int maxtech, char *txt, int maxtxt);
86
87 int ast_enum_init(void);
88 int ast_enum_reload(void);
89
90 #endif /* _ASTERISK_ENUM_H */