dom mar 16 23:37:23 CET 2003
[asterisk/asterisk.git] / channels / iax2-parser.h
1 /*
2  * Asterisk -- A telephony toolkit for Linux.
3  *
4  * Implementation of Inter-Asterisk eXchange
5  * 
6  * Copyright (C) 2003, Digium
7  *
8  * Mark Spencer <markster@linux-support.net>
9  *
10  * This program is free software, distributed under the terms of
11  * the GNU General Public License
12  */
13  
14 #ifndef _IAX2_PARSER_H
15 #define _IAX2_PARSER_H
16
17 struct iax_ies {
18         char *called_number;
19         char *calling_number;
20         char *calling_ani;
21         char *calling_name;
22         char *called_context;
23         char *username;
24         char *password;
25         unsigned int capability;
26         unsigned int format;
27         char *language;
28         int version;
29         unsigned short adsicpe;
30         char *dnid;
31         unsigned int authmethods;
32         char *challenge;
33         char *md5_result;
34         char *rsa_result;
35         struct sockaddr_in *apparent_addr;
36         unsigned short refresh;
37         unsigned short dpstatus;
38         unsigned short callno;
39         char *cause;
40         unsigned char iax_unknown;
41         int msgcount;
42         int autoanswer;
43         int musiconhold;
44 };
45
46 #define DIRECTION_INGRESS 1
47 #define DIRECTION_OUTGRESS 2
48
49 struct ast_iax2_frame {
50         /* /Our/ call number */
51         unsigned short callno;
52         /* /Their/ call number */
53         unsigned short dcallno;
54         /* Start of raw frame (outgoing only) */
55         void *data;
56         /* Length of frame (outgoing only) */
57         int datalen;
58         /* How many retries so far? */
59         int retries;
60         /* Outgoing relative timestamp (ms) */
61         unsigned int ts;
62         /* How long to wait before retrying */
63         int retrytime;
64         /* Are we received out of order?  */
65         int outoforder;
66         /* Have we been sent at all yet? */
67         int sentyet;
68         /* Outgoing Packet sequence number */
69         int oseqno;
70         /* Next expected incoming packet sequence number */
71         int iseqno;
72         /* Non-zero if should be sent to transfer peer */
73         int transfer;
74         /* Non-zero if this is the final message */
75         int final;
76         /* Ingress or outgres */
77         int direction;
78         /* Retransmission ID */
79         int retrans;
80         /* Easy linking */
81         struct ast_iax2_frame *next;
82         struct ast_iax2_frame *prev;
83         /* Actual, isolated frame header */
84         struct ast_frame af;
85         unsigned char unused[AST_FRIENDLY_OFFSET];
86         unsigned char afdata[0];        /* Data for frame */
87 };
88
89 struct iax_ie_data {
90         unsigned char buf[1024];
91         int pos;
92 };
93
94 /* Choose a different function for output */
95 extern void iax_set_output(void (*output)(const char *data));
96 /* Choose a different function for errors */
97 extern void iax_set_error(void (*output)(const char *data));
98 extern void iax_showframe(struct ast_iax2_frame *f, struct ast_iax2_full_hdr *fhi, int rx, struct sockaddr_in *sin, int datalen);
99
100 extern const char *iax_ie2str(int ie);
101
102 extern int iax_ie_append_raw(struct iax_ie_data *ied, unsigned char ie, void *data, int datalen);
103 extern int iax_ie_append_addr(struct iax_ie_data *ied, unsigned char ie, struct sockaddr_in *sin);
104 extern int iax_ie_append_int(struct iax_ie_data *ied, unsigned char ie, unsigned int value);
105 extern int iax_ie_append_short(struct iax_ie_data *ied, unsigned char ie, unsigned short value);
106 extern int iax_ie_append_str(struct iax_ie_data *ied, unsigned char ie, unsigned char *str);
107 extern int iax_ie_append_byte(struct iax_ie_data *ied, unsigned char ie, unsigned char dat);
108 extern int iax_ie_append(struct iax_ie_data *ied, unsigned char ie);
109
110 #endif