2 * Asterisk -- A telephony toolkit for Linux.
4 * Implementation of Inter-Asterisk eXchange
6 * Copyright (C) 2003, Digium
8 * Mark Spencer <markster@digium.com>
10 * This program is free software, distributed under the terms of
11 * the GNU Lesser (Library) General Public License
14 #ifndef _IAX2_PARSER_H
15 #define _IAX2_PARSER_H
28 unsigned int capability;
33 unsigned short adsicpe;
36 unsigned int authmethods;
40 struct sockaddr_in *apparent_addr;
41 unsigned short refresh;
42 unsigned short dpstatus;
43 unsigned short callno;
45 unsigned char causecode;
46 unsigned char iax_unknown;
50 unsigned int transferid;
51 unsigned int datetime;
56 unsigned char *fwdata;
57 unsigned char fwdatalen;
59 unsigned short samprate;
60 unsigned int provverpres;
61 unsigned int rr_jitter;
64 unsigned short rr_delay;
65 unsigned int rr_dropped;
69 #define DIRECTION_INGRESS 1
70 #define DIRECTION_OUTGRESS 2
74 struct iax_session *session;
75 struct iax_event *event;
78 /* /Our/ call number */
79 unsigned short callno;
80 /* /Their/ call number */
81 unsigned short dcallno;
82 /* Start of raw frame (outgoing only) */
84 /* Length of frame (outgoing only) */
86 /* How many retries so far? */
88 /* Outgoing relative timestamp (ms) */
90 /* How long to wait before retrying */
92 /* Are we received out of order? */
94 /* Have we been sent at all yet? */
96 /* Outgoing Packet sequence number */
98 /* Next expected incoming packet sequence number */
100 /* Non-zero if should be sent to transfer peer */
102 /* Non-zero if this is the final message */
104 /* Ingress or outgres */
106 /* Retransmission ID */
109 struct iax_frame *next;
110 struct iax_frame *prev;
111 /* Actual, isolated frame header */
113 unsigned char unused[AST_FRIENDLY_OFFSET];
114 unsigned char afdata[0]; /* Data for frame */
118 unsigned char buf[1024];
122 /* Choose a different function for output */
123 extern void iax_set_output(void (*output)(const char *data));
124 /* Choose a different function for errors */
125 extern void iax_set_error(void (*output)(const char *data));
126 extern void iax_showframe(struct iax_frame *f, struct ast_iax2_full_hdr *fhi, int rx, struct sockaddr_in *sin, int datalen);
128 extern const char *iax_ie2str(int ie);
130 extern int iax_ie_append_raw(struct iax_ie_data *ied, unsigned char ie, const void *data, int datalen);
131 extern int iax_ie_append_addr(struct iax_ie_data *ied, unsigned char ie, struct sockaddr_in *sin);
132 extern int iax_ie_append_int(struct iax_ie_data *ied, unsigned char ie, unsigned int value);
133 extern int iax_ie_append_short(struct iax_ie_data *ied, unsigned char ie, unsigned short value);
134 extern int iax_ie_append_str(struct iax_ie_data *ied, unsigned char ie, const char *str);
135 extern int iax_ie_append_byte(struct iax_ie_data *ied, unsigned char ie, unsigned char dat);
136 extern int iax_ie_append(struct iax_ie_data *ied, unsigned char ie);
137 extern int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen);
139 extern int iax_get_frames(void);
140 extern int iax_get_iframes(void);
141 extern int iax_get_oframes(void);
143 extern void iax_frame_wrap(struct iax_frame *fr, struct ast_frame *f);
144 extern struct iax_frame *iax_frame_new(int direction, int datalen);
145 extern void iax_frame_free(struct iax_frame *fr);