Fixup: tvb_get_string(z) -> tvb_get_string(z)_enc
[metze/wireshark/wip.git] / epan / dissectors / packet-iax2.h
1 /* packet-iax2.h
2  *
3  * Copyright (C) 2003, Digium
4  * Mark Spencer <markster@digium.com>
5  *
6  * Wireshark - Network traffic analyzer
7  * By Gerald Combs <gerald@wireshark.org>
8  * Copyright 1998 Gerald Combs
9  *
10  * This program is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU General Public License
12  * as published by the Free Software Foundation; either version 2
13  * of the License, or (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23  */
24
25 #ifndef _PACKET_IAX2_H
26 #define _PACKET_IAX2_H
27
28 #include <epan/tap-voip.h>
29
30 /* Max version of IAX protocol we support */
31 #define IAX_PROTO_VERSION       2
32
33 #define IAX_MAX_CALLS           32768
34
35 #define IAX_FLAG_FULL           0x8000
36
37 #define IAX_FLAG_RETRANS        0x8000
38
39 #define IAX_FLAG_SC_LOG         0x80
40
41 #define IAX_MAX_SHIFT           0x1F
42
43 #define IAX_WINDOW              64
44
45 #define AST_FRAME_DTMF_END  1       /* A DTMF end event, subclass is the digit */
46 #define AST_FRAME_VOICE     2       /* Voice data, subclass is AST_FORMAT_* */
47 #define AST_FRAME_VIDEO     3       /* Video frame, maybe?? :) */
48 #define AST_FRAME_CONTROL   4       /* A control frame, subclass is AST_CONTROL_* */
49 #define AST_FRAME_NULL      5       /* An empty, useless frame */
50 #define AST_FRAME_IAX       6       /* Inter Aterisk Exchange private frame type */
51 #define AST_FRAME_TEXT      7       /* Text messages */
52 #define AST_FRAME_IMAGE     8       /* Image Frames */
53 #define AST_FRAME_HTML      9       /* HTML Frames */
54 #define AST_FRAME_CNG      10       /* Confort Noise Generation */
55 #define AST_FRAME_MODEM    11       /* Modem-over-IP datastream */
56 #define AST_FRAME_DTMF_BEGIN 12     /* A DTMF begin event, subclass is the digit */
57
58
59
60 /* Subclass for AST_FRAME_IAX */
61 #define IAX_COMMAND_NEW         1
62 #define IAX_COMMAND_PING        2
63 #define IAX_COMMAND_PONG        3
64 #define IAX_COMMAND_ACK         4
65 #define IAX_COMMAND_HANGUP      5
66 #define IAX_COMMAND_REJECT      6
67 #define IAX_COMMAND_ACCEPT      7
68 #define IAX_COMMAND_AUTHREQ     8
69 #define IAX_COMMAND_AUTHREP     9
70 #define IAX_COMMAND_INVAL       10
71 #define IAX_COMMAND_LAGRQ       11
72 #define IAX_COMMAND_LAGRP       12
73 #define IAX_COMMAND_REGREQ      13      /* Registration request */
74 #define IAX_COMMAND_REGAUTH     14      /* Registration authentication required */
75 #define IAX_COMMAND_REGACK      15      /* Registration accepted */
76 #define IAX_COMMAND_REGREJ      16      /* Registration rejected */
77 #define IAX_COMMAND_REGREL      17      /* Force release of registration */
78 #define IAX_COMMAND_VNAK        18      /* If we receive voice before valid first voice frame, send this */
79 #define IAX_COMMAND_DPREQ       19      /* Request status of a dialplan entry */
80 #define IAX_COMMAND_DPREP       20      /* Request status of a dialplan entry */
81 #define IAX_COMMAND_DIAL        21      /* Request a dial on channel brought up TBD */
82 #define IAX_COMMAND_TXREQ       22      /* Transfer Request */
83 #define IAX_COMMAND_TXCNT       23      /* Transfer Connect */
84 #define IAX_COMMAND_TXACC       24      /* Transfer Accepted */
85 #define IAX_COMMAND_TXREADY     25      /* Transfer ready */
86 #define IAX_COMMAND_TXREL       26      /* Transfer release */
87 #define IAX_COMMAND_TXREJ       27      /* Transfer reject */
88 #define IAX_COMMAND_QUELCH      28      /* Stop audio/video transmission */
89 #define IAX_COMMAND_UNQUELCH    29      /* Resume audio/video transmission */
90 #define IAX_COMMAND_POKE        30      /* Like ping, but does not require an open connection */
91 #define IAX_COMMAND_PAGE        31      /* Paging description */
92 #define IAX_COMMAND_MWI         32      /* Stand-alone message waiting indicator */
93 #define IAX_COMMAND_UNSUPPORT   33      /* Unsupported message received */
94 #define IAX_COMMAND_TRANSFER    34      /* Request remote transfer */
95 #define IAX_COMMAND_PROVISION   35      /* Provision device */
96 #define IAX_COMMAND_FWDOWNL     36      /* Download firmware */
97 #define IAX_COMMAND_FWDATA      37      /* Firmware Data */
98 #define IAX_COMMAND_TXMEDIA     38      /* Transfer Media */
99 #define IAX_COMMAND_RTKEY       39      /* Rotate key */
100 #define IAX_COMMAND_CALLTOKEN   40      /* Call token */
101
102 #define IAX_DEFAULT_REG_EXPIRE  60      /* By default require re-registration once per minute */
103
104 #define IAX_LINGER_TIMEOUT      10      /* How long to wait before closing bridged call */
105
106 #define IAX_DEFAULT_PORTNO      4569
107
108 /* IAX Information elements */
109 #define IAX_IE_CALLED_NUMBER            1               /* Number/extension being called - string */
110 #define IAX_IE_CALLING_NUMBER           2               /* Calling number - string */
111 #define IAX_IE_CALLING_ANI              3               /* Calling number ANI for billing  - string */
112 #define IAX_IE_CALLING_NAME             4               /* Name of caller - string */
113 #define IAX_IE_CALLED_CONTEXT           5               /* Context for number - string */
114 #define IAX_IE_USERNAME                 6               /* Username (peer or user) for authentication - string */
115 #define IAX_IE_PASSWORD                 7               /* Password for authentication - string */
116 #define IAX_IE_CAPABILITY               8               /* Actual codec capability - unsigned int */
117 #define IAX_IE_FORMAT                   9               /* Desired codec format - unsigned int */
118 #define IAX_IE_LANGUAGE                 10              /* Desired language - string */
119 #define IAX_IE_VERSION                  11              /* Protocol version - short */
120 #define IAX_IE_ADSICPE                  12              /* CPE ADSI capability - short */
121 #define IAX_IE_DNID                     13              /* Originally dialed DNID - string */
122 #define IAX_IE_AUTHMETHODS              14              /* Authentication method(s) - short */
123 #define IAX_IE_CHALLENGE                15              /* Challenge data for MD5/RSA - string */
124 #define IAX_IE_MD5_RESULT               16              /* MD5 challenge result - string */
125 #define IAX_IE_RSA_RESULT               17              /* RSA challenge result - string */
126 #define IAX_IE_APPARENT_ADDR            18              /* Apparent address of peer - struct sockaddr_in */
127 #define IAX_IE_REFRESH                  19              /* When to refresh registration - short */
128 #define IAX_IE_DPSTATUS                 20              /* Dialplan status - short */
129 #define IAX_IE_CALLNO                   21              /* Call number of peer - short */
130 #define IAX_IE_CAUSE                    22              /* Cause - string */
131 #define IAX_IE_IAX_UNKNOWN              23              /* Unknown IAX command - byte */
132 #define IAX_IE_MSGCOUNT                 24              /* How many messages waiting - short */
133 #define IAX_IE_AUTOANSWER               25              /* Request auto-answering -- none */
134 #define IAX_IE_MUSICONHOLD              26              /* Request musiconhold with QUELCH -- none or string */
135 #define IAX_IE_TRANSFERID               27              /* Transfer Request Identifier -- int */
136 #define IAX_IE_RDNIS                    28              /* Referring DNIS -- string */
137 #define IAX_IE_PROVISIONING             29              /* Provisioning info */
138 #define IAX_IE_AESPROVISIONING          30              /* AES Provisioning info */
139 #define IAX_IE_DATETIME                 31              /* Date/Time -- unsigned int */
140 #define IAX_IE_DEVICETYPE               32              /* Device Type -- string */
141 #define IAX_IE_SERVICEIDENT             33              /* Service Identifier -- string */
142 #define IAX_IE_FIRMWAREVER              34              /* Firmware revision -- u16 */
143 #define IAX_IE_FWBLOCKDESC              35              /* Firmware block description -- u32 */
144 #define IAX_IE_FWBLOCKDATA              36              /* Firmware block of data -- raw */
145 #define IAX_IE_PROVVER                  37              /* Provisioning Version (u32) */
146 #define IAX_IE_CALLINGPRES              38              /* Calling presentation (u8) */
147 #define IAX_IE_CALLINGTON               39              /* Calling type of number (u8) */
148 #define IAX_IE_CALLINGTNS               40              /* Calling transit network select (u16) */
149 #define IAX_IE_SAMPLINGRATE             41              /* Supported sampling rates (u16) */
150 #define IAX_IE_CAUSECODE                42              /* Hangup cause (u8) */
151 #define IAX_IE_ENCRYPTION               43              /* Encryption format (u16) */
152 #define IAX_IE_ENCKEY                   44              /* Encryption key (raw) */
153 #define IAX_IE_CODEC_PREFS              45              /* Codec Negotiation */
154 #define IAX_IE_RR_JITTER                46              /* Received jitter (as in RFC1889) u32 */
155 #define IAX_IE_RR_LOSS                  47              /* Received loss (high byte loss pct, low 24 bits loss count, as in rfc1889 */
156 #define IAX_IE_RR_PKTS                  48              /* Received frames (total frames received) u32 */
157 #define IAX_IE_RR_DELAY                 49              /* Max playout delay for received frames (in ms) u16 */
158 #define IAX_IE_RR_DROPPED               50              /* Dropped frames (presumably by jitterbuf) u32 */
159 #define IAX_IE_RR_OOO                   51              /* Frames received Out of Order u32 */
160 #define IAX_IE_VARIABLE                 52              /* IAX variable transmission */
161 #define IAX_IE_OSPTOKEN                 53              /* OSP Token */
162 #define IAX_IE_CALLTOKEN                54              /* Call Token */
163 #define IAX_IE_CAPABILITY2              55              /* Codec capability */
164 #define IAX_IE_FORMAT2                  56              /* Desired codec capability */
165 #define IAX_IE_DATAFORMAT               255             /* Data call format -- iax_dataformat_t */
166
167 /* hangup cause codes */
168 #define AST_CAUSE_UNALLOCATED                           1
169 #define AST_CAUSE_NO_ROUTE_TRANSIT_NET                  2
170 #define AST_CAUSE_NO_ROUTE_DESTINATION                  3
171 #define AST_CAUSE_MISDIALLED_TRUNK_PREFIX               5
172 #define AST_CAUSE_CHANNEL_UNACCEPTABLE                  6
173 #define AST_CAUSE_CALL_AWARDED_DELIVERED                7
174 #define AST_CAUSE_PRE_EMPTED                            8
175 #define AST_CAUSE_NUMBER_PORTED_NOT_HERE                14
176 #define AST_CAUSE_NORMAL_CLEARING                       16
177 #define AST_CAUSE_USER_BUSY                             17
178 #define AST_CAUSE_NO_USER_RESPONSE                      18
179 #define AST_CAUSE_NO_ANSWER                             19
180 #define AST_CAUSE_SUBSCRIBER_ABSENT                     20
181 #define AST_CAUSE_CALL_REJECTED                         21
182 #define AST_CAUSE_NUMBER_CHANGED                        22
183 #define AST_CAUSE_REDIRECTED_TO_NEW_DESTINATION 23
184 #define AST_CAUSE_ANSWERED_ELSEWHERE                    26
185 #define AST_CAUSE_DESTINATION_OUT_OF_ORDER              27
186 #define AST_CAUSE_INVALID_NUMBER_FORMAT                 28
187 #define AST_CAUSE_FACILITY_REJECTED                     29
188 #define AST_CAUSE_RESPONSE_TO_STATUS_ENQUIRY            30
189 #define AST_CAUSE_NORMAL_UNSPECIFIED                    31
190 #define AST_CAUSE_NORMAL_CIRCUIT_CONGESTION             34
191 #define AST_CAUSE_NETWORK_OUT_OF_ORDER                  38
192 #define AST_CAUSE_NORMAL_TEMPORARY_FAILURE              41
193 #define AST_CAUSE_SWITCH_CONGESTION                     42
194 #define AST_CAUSE_ACCESS_INFO_DISCARDED                 43
195 #define AST_CAUSE_REQUESTED_CHAN_UNAVAIL                44
196 #define AST_CAUSE_FACILITY_NOT_SUBSCRIBED               50
197 #define AST_CAUSE_OUTGOING_CALL_BARRED                  52
198 #define AST_CAUSE_INCOMING_CALL_BARRED                  54
199 #define AST_CAUSE_BEARERCAPABILITY_NOTAUTH              57
200 #define AST_CAUSE_BEARERCAPABILITY_NOTAVAIL             58
201 #define AST_CAUSE_BEARERCAPABILITY_NOTIMPL              65
202 #define AST_CAUSE_CHAN_NOT_IMPLEMENTED                  66
203 #define AST_CAUSE_FACILITY_NOT_IMPLEMENTED              69
204 #define AST_CAUSE_INVALID_CALL_REFERENCE                81
205 #define AST_CAUSE_INCOMPATIBLE_DESTINATION              88
206 #define AST_CAUSE_INVALID_MSG_UNSPECIFIED               95
207 #define AST_CAUSE_MANDATORY_IE_MISSING                  96
208 #define AST_CAUSE_MESSAGE_TYPE_NONEXIST                 97
209 #define AST_CAUSE_WRONG_MESSAGE                         98
210 #define AST_CAUSE_IE_NONEXIST                           99
211 #define AST_CAUSE_INVALID_IE_CONTENTS                   100
212 #define AST_CAUSE_WRONG_CALL_STATE                      101
213 #define AST_CAUSE_RECOVERY_ON_TIMER_EXPIRE              102
214 #define AST_CAUSE_MANDATORY_IE_LENGTH_ERROR             103
215 #define AST_CAUSE_PROTOCOL_ERROR                        111
216 #define AST_CAUSE_INTERWORKING                          127
217
218 #define IAX_AUTH_PLAINTEXT                      (1 << 0)
219 #define IAX_AUTH_MD5                            (1 << 1)
220 #define IAX_AUTH_RSA                            (1 << 2)
221
222 #define IAX_META_TRUNK                          1               /* Trunk meta-message */
223 #define IAX_META_VIDEO                          2               /* Video frame */
224
225 #define IAX_DPSTATUS_EXISTS             (1 << 0)
226 #define IAX_DPSTATUS_CANEXIST           (1 << 1)
227 #define IAX_DPSTATUS_NONEXISTANT        (1 << 2)
228 #define IAX_DPSTATUS_IGNOREPAT          (1 << 14)
229 #define IAX_DPSTATUS_MATCHMORE          (1 << 15)
230
231 typedef enum {
232   IAX2_MINI_VOICE_PACKET,
233   IAX2_FULL_PACKET,
234   IAX2_MINI_VIDEO_PACKET,
235   IAX2_TRUNK_PACKET
236 } packet_type;
237
238 /* Container for tapping relevant data */
239 typedef struct _iax2_info_t
240 {
241         packet_type ptype;
242         guint16 scallno;
243         guint16 dcallno;
244         guint8 ftype;
245         guint8 csub;
246         guint32 timestamp;
247         guint payload_len;
248         voip_call_state callState;
249         const gchar *messageName;
250         const gchar *callingParty;
251         const gchar *calledParty;
252         const guint8 *payload_data;
253 } iax2_info_t;
254
255 #endif