Add DUNDi.... (http://www.dundi.com)
[asterisk/asterisk.git] / pbx / dundi-parser.h
1 /*
2  * Distributed Universal Number Discovery (DUNDi)
3  *
4  * Copyright (C) 2004, Digium Inc.
5  *
6  * Written by Mark Spencer <markster@digium.com>
7  *
8  * This program is Free Software distributed under the terms of
9  * of the GNU General Public License.
10  */
11
12 #ifndef _DUNDI_PARSER_H
13 #define _DUNDI_PARSER_H
14
15 #include <asterisk/dundi.h>
16 #include <asterisk/aes.h>
17
18 #define DUNDI_MAX_STACK 512
19 #define DUNDI_MAX_ANSWERS       100
20
21 struct dundi_ies {
22         dundi_eid *eids[DUNDI_MAX_STACK + 1];
23         int eid_direct[DUNDI_MAX_STACK + 1];
24         dundi_eid *reqeid;
25         int eidcount;
26         char *called_context;
27         char *called_number;
28         struct dundi_answer *answers[DUNDI_MAX_ANSWERS + 1];
29         struct dundi_hint *hint;
30         int anscount;
31         int ttl;
32         int version;
33         int expiration;
34         int unknowncmd;
35         unsigned char *pubkey;
36         int cause;
37         unsigned char *q_dept;
38         unsigned char *q_org;
39         unsigned char *q_locality;
40         unsigned char *q_stateprov;
41         unsigned char *q_country;
42         unsigned char *q_email;
43         unsigned char *q_phone;
44         unsigned char *q_ipaddr;
45         unsigned char *causestr;
46         unsigned char *encsharedkey;
47         unsigned char *encsig;
48         unsigned long keycrc32;
49         struct dundi_encblock *encblock;
50         int enclen;
51 };
52
53 struct dundi_ie_data {
54         int pos;
55         unsigned char buf[8192];
56 };
57
58 /* Choose a different function for output */
59 extern void dundi_set_output(void (*output)(const char *data));
60 /* Choose a different function for errors */
61 extern void dundi_set_error(void (*output)(const char *data));
62 extern void dundi_showframe(struct dundi_hdr *fhi, int rx, struct sockaddr_in *sin, int datalen);
63
64 extern const char *dundi_ie2str(int ie);
65
66 extern int dundi_ie_append_raw(struct dundi_ie_data *ied, unsigned char ie, void *data, int datalen);
67 extern int dundi_ie_append_addr(struct dundi_ie_data *ied, unsigned char ie, struct sockaddr_in *sin);
68 extern int dundi_ie_append_int(struct dundi_ie_data *ied, unsigned char ie, unsigned int value);
69 extern int dundi_ie_append_short(struct dundi_ie_data *ied, unsigned char ie, unsigned short value);
70 extern int dundi_ie_append_str(struct dundi_ie_data *ied, unsigned char ie, unsigned char *str);
71 extern int dundi_ie_append_eid(struct dundi_ie_data *ied, unsigned char ie, dundi_eid *eid);
72 extern int dundi_ie_append_cause(struct dundi_ie_data *ied, unsigned char ie, unsigned char cause, unsigned char *desc);
73 extern int dundi_ie_append_hint(struct dundi_ie_data *ied, unsigned char ie, unsigned short flags, unsigned char *data);
74 extern int dundi_ie_append_answer(struct dundi_ie_data *ied, unsigned char ie, dundi_eid *eid, unsigned char protocol, unsigned short flags, unsigned short weight, unsigned char *desc);
75 extern int dundi_ie_append_encdata(struct dundi_ie_data *ied, unsigned char ie, unsigned char *iv, void *data, int datalen);
76 extern int dundi_ie_append_byte(struct dundi_ie_data *ied, unsigned char ie, unsigned char dat);
77 extern int dundi_ie_append(struct dundi_ie_data *ied, unsigned char ie);
78 extern int dundi_parse_ies(struct dundi_ies *ies, unsigned char *data, int datalen);
79 extern char *dundi_eid_to_str(char *s, int maxlen, dundi_eid *eid);
80 extern char *dundi_eid_to_str_short(char *s, int maxlen, dundi_eid *eid);
81 extern int dundi_str_to_eid(dundi_eid *eid, char *s);
82 extern int dundi_str_short_to_eid(dundi_eid *eid, char *s);
83 extern int dundi_eid_zero(dundi_eid *eid);
84 extern int dundi_eid_cmp(dundi_eid *eid1, dundi_eid *eid2);
85 extern char *dundi_flags2str(char *s, int maxlen, int flags);
86 extern char *dundi_hint2str(char *s, int maxlen, int flags);
87 #endif