00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _IAX2_PARSER_H
00019 #define _IAX2_PARSER_H
00020
00021 struct iax_ies {
00022 char *called_number;
00023 char *calling_number;
00024 char *calling_ani;
00025 char *calling_name;
00026 int calling_ton;
00027 int calling_tns;
00028 int calling_pres;
00029 char *called_context;
00030 char *username;
00031 char *password;
00032 unsigned int capability;
00033 unsigned int format;
00034 char *codec_prefs;
00035 char *language;
00036 int version;
00037 unsigned short adsicpe;
00038 char *dnid;
00039 char *rdnis;
00040 unsigned int authmethods;
00041 unsigned int encmethods;
00042 char *challenge;
00043 char *md5_result;
00044 char *rsa_result;
00045 struct sockaddr_in *apparent_addr;
00046 unsigned short refresh;
00047 unsigned short dpstatus;
00048 unsigned short callno;
00049 char *cause;
00050 unsigned char causecode;
00051 unsigned char iax_unknown;
00052 int msgcount;
00053 int autoanswer;
00054 int musiconhold;
00055 unsigned int transferid;
00056 unsigned int datetime;
00057 char *devicetype;
00058 char *serviceident;
00059 int firmwarever;
00060 unsigned int fwdesc;
00061 unsigned char *fwdata;
00062 unsigned char fwdatalen;
00063 unsigned char *enckey;
00064 unsigned char enckeylen;
00065 unsigned int provver;
00066 unsigned short samprate;
00067 int provverpres;
00068 unsigned int rr_jitter;
00069 unsigned int rr_loss;
00070 unsigned int rr_pkts;
00071 unsigned short rr_delay;
00072 unsigned int rr_dropped;
00073 unsigned int rr_ooo;
00074 };
00075
00076 #define DIRECTION_INGRESS 1
00077 #define DIRECTION_OUTGRESS 2
00078
00079 struct iax_frame {
00080 #ifdef LIBIAX
00081 struct iax_session *session;
00082 struct iax_event *event;
00083 #else
00084 int sockfd;
00085 #endif
00086
00087
00088 unsigned short callno;
00089
00090 unsigned short dcallno;
00091
00092 void *data;
00093
00094 int datalen;
00095
00096 int retries;
00097
00098 unsigned int ts;
00099
00100 int retrytime;
00101
00102 int outoforder;
00103
00104 int sentyet;
00105
00106 int oseqno;
00107
00108 int iseqno;
00109
00110 int transfer;
00111
00112 int final;
00113
00114 int direction;
00115
00116 int retrans;
00117
00118 struct iax_frame *next;
00119 struct iax_frame *prev;
00120
00121 struct ast_frame af;
00122 unsigned char unused[AST_FRIENDLY_OFFSET];
00123 unsigned char afdata[0];
00124 };
00125
00126 struct iax_ie_data {
00127 unsigned char buf[1024];
00128 int pos;
00129 };
00130
00131
00132 extern void iax_set_output(void (*output)(const char *data));
00133
00134 extern void iax_set_error(void (*output)(const char *data));
00135 extern void iax_showframe(struct iax_frame *f, struct ast_iax2_full_hdr *fhi, int rx, struct sockaddr_in *sin, int datalen);
00136
00137 extern const char *iax_ie2str(int ie);
00138
00139 extern int iax_ie_append_raw(struct iax_ie_data *ied, unsigned char ie, void *data, int datalen);
00140 extern int iax_ie_append_addr(struct iax_ie_data *ied, unsigned char ie, struct sockaddr_in *sin);
00141 extern int iax_ie_append_int(struct iax_ie_data *ied, unsigned char ie, unsigned int value);
00142 extern int iax_ie_append_short(struct iax_ie_data *ied, unsigned char ie, unsigned short value);
00143 extern int iax_ie_append_str(struct iax_ie_data *ied, unsigned char ie, char *str);
00144 extern int iax_ie_append_byte(struct iax_ie_data *ied, unsigned char ie, unsigned char dat);
00145 extern int iax_ie_append(struct iax_ie_data *ied, unsigned char ie);
00146 extern int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen);
00147
00148 extern int iax_get_frames(void);
00149 extern int iax_get_iframes(void);
00150 extern int iax_get_oframes(void);
00151
00152 extern void iax_frame_wrap(struct iax_frame *fr, struct ast_frame *f);
00153 extern struct iax_frame *iax_frame_new(int direction, int datalen);
00154 extern void iax_frame_free(struct iax_frame *fr);
00155 #endif