00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef _DUNDI_PARSER_H
00013 #define _DUNDI_PARSER_H
00014
00015 #include "asterisk/dundi.h"
00016 #include "asterisk/aes.h"
00017
00018 #define DUNDI_MAX_STACK 512
00019 #define DUNDI_MAX_ANSWERS 100
00020
00021 struct dundi_ies {
00022 dundi_eid *eids[DUNDI_MAX_STACK + 1];
00023 int eid_direct[DUNDI_MAX_STACK + 1];
00024 dundi_eid *reqeid;
00025 int eidcount;
00026 char *called_context;
00027 char *called_number;
00028 struct dundi_answer *answers[DUNDI_MAX_ANSWERS + 1];
00029 struct dundi_hint *hint;
00030 int anscount;
00031 int ttl;
00032 int version;
00033 int expiration;
00034 int unknowncmd;
00035 unsigned char *pubkey;
00036 int cause;
00037 char *q_dept;
00038 char *q_org;
00039 char *q_locality;
00040 char *q_stateprov;
00041 char *q_country;
00042 char *q_email;
00043 char *q_phone;
00044 char *q_ipaddr;
00045 char *causestr;
00046 unsigned char *encsharedkey;
00047 unsigned char *encsig;
00048 unsigned long keycrc32;
00049 struct dundi_encblock *encblock;
00050 int enclen;
00051 int cbypass;
00052 };
00053
00054 struct dundi_ie_data {
00055 int pos;
00056 unsigned char buf[8192];
00057 };
00058
00059
00060 extern void dundi_set_output(void (*output)(const char *data));
00061
00062 extern void dundi_set_error(void (*output)(const char *data));
00063 extern void dundi_showframe(struct dundi_hdr *fhi, int rx, struct sockaddr_in *sin, int datalen);
00064
00065 extern const char *dundi_ie2str(int ie);
00066
00067 extern int dundi_ie_append_raw(struct dundi_ie_data *ied, unsigned char ie, void *data, int datalen);
00068 extern int dundi_ie_append_addr(struct dundi_ie_data *ied, unsigned char ie, struct sockaddr_in *sin);
00069 extern int dundi_ie_append_int(struct dundi_ie_data *ied, unsigned char ie, unsigned int value);
00070 extern int dundi_ie_append_short(struct dundi_ie_data *ied, unsigned char ie, unsigned short value);
00071 extern int dundi_ie_append_str(struct dundi_ie_data *ied, unsigned char ie, char *str);
00072 extern int dundi_ie_append_eid(struct dundi_ie_data *ied, unsigned char ie, dundi_eid *eid);
00073 extern int dundi_ie_append_cause(struct dundi_ie_data *ied, unsigned char ie, unsigned char cause, char *desc);
00074 extern int dundi_ie_append_hint(struct dundi_ie_data *ied, unsigned char ie, unsigned short flags, char *data);
00075 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, char *desc);
00076 extern int dundi_ie_append_encdata(struct dundi_ie_data *ied, unsigned char ie, unsigned char *iv, void *data, int datalen);
00077 extern int dundi_ie_append_byte(struct dundi_ie_data *ied, unsigned char ie, unsigned char dat);
00078 extern int dundi_ie_append(struct dundi_ie_data *ied, unsigned char ie);
00079 extern int dundi_parse_ies(struct dundi_ies *ies, unsigned char *data, int datalen);
00080 extern char *dundi_eid_to_str(char *s, int maxlen, dundi_eid *eid);
00081 extern char *dundi_eid_to_str_short(char *s, int maxlen, dundi_eid *eid);
00082 extern int dundi_str_to_eid(dundi_eid *eid, char *s);
00083 extern int dundi_str_short_to_eid(dundi_eid *eid, char *s);
00084 extern int dundi_eid_zero(dundi_eid *eid);
00085 extern int dundi_eid_cmp(dundi_eid *eid1, dundi_eid *eid2);
00086 extern char *dundi_flags2str(char *s, int maxlen, int flags);
00087 extern char *dundi_hint2str(char *s, int maxlen, int flags);
00088 #endif