gio mar 13 16:44:17 CET 2003
[asterisk/asterisk.git] / channels / iax2.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 _ASTERISK_IAX2_H
15 #define _ASTERISK_IAX2_H
16
17 /* Max version of IAX protocol we support */
18 #define AST_IAX2_PROTO_VERSION 2
19
20 #define AST_IAX2_MAX_CALLS 32768
21
22 #define AST_FLAG_FULL           0x8000
23
24 #define AST_FLAG_RETRANS        0x8000
25
26 #define AST_FLAG_SC_LOG         0x80
27
28 #define AST_MAX_SHIFT           0x1F
29
30 #define AST_IAX2_WINDOW         256
31
32 /* Subclass for AST_FRAME_IAX */
33 #define AST_IAX2_COMMAND_NEW            1
34 #define AST_IAX2_COMMAND_PING   2
35 #define AST_IAX2_COMMAND_PONG   3
36 #define AST_IAX2_COMMAND_ACK            4
37 #define AST_IAX2_COMMAND_HANGUP 5
38 #define AST_IAX2_COMMAND_REJECT 6
39 #define AST_IAX2_COMMAND_ACCEPT 7
40 #define AST_IAX2_COMMAND_AUTHREQ        8
41 #define AST_IAX2_COMMAND_AUTHREP        9
42 #define AST_IAX2_COMMAND_INVAL  10
43 #define AST_IAX2_COMMAND_LAGRQ  11
44 #define AST_IAX2_COMMAND_LAGRP  12
45 #define AST_IAX2_COMMAND_REGREQ 13      /* Registration request */
46 #define AST_IAX2_COMMAND_REGAUTH        14      /* Registration authentication required */
47 #define AST_IAX2_COMMAND_REGACK 15      /* Registration accepted */
48 #define AST_IAX2_COMMAND_REGREJ 16      /* Registration rejected */
49 #define AST_IAX2_COMMAND_REGREL 17      /* Force release of registration */
50 #define AST_IAX2_COMMAND_VNAK   18      /* If we receive voice before valid first voice frame, send this */
51 #define AST_IAX2_COMMAND_DPREQ  19      /* Request status of a dialplan entry */
52 #define AST_IAX2_COMMAND_DPREP  20      /* Request status of a dialplan entry */
53 #define AST_IAX2_COMMAND_DIAL   21      /* Request a dial on channel brought up TBD */
54 #define AST_IAX2_COMMAND_TXREQ  22      /* Transfer Request */
55 #define AST_IAX2_COMMAND_TXCNT  23      /* Transfer Connect */
56 #define AST_IAX2_COMMAND_TXACC  24      /* Transfer Accepted */
57 #define AST_IAX2_COMMAND_TXREADY        25      /* Transfer ready */
58 #define AST_IAX2_COMMAND_TXREL  26      /* Transfer release */
59 #define AST_IAX2_COMMAND_TXREJ  27      /* Transfer reject */
60 #define AST_IAX2_COMMAND_QUELCH 28      /* Stop audio/video transmission */
61 #define AST_IAX2_COMMAND_UNQUELCH 29    /* Resume audio/video transmission */
62 #define AST_IAX2_COMMAND_POKE    30  /* Like ping, but does not require an open connection */
63 #define AST_IAX2_COMMAND_PAGE   31      /* Paging description */
64 #define AST_IAX2_COMMAND_MWI    32      /* Stand-alone message waiting indicator */
65 #define AST_IAX2_COMMAND_UNSUPPORT      33      /* Unsupported message received */
66
67 #define AST_DEFAULT_REG_EXPIRE  60      /* By default require re-registration once per minute */
68
69 #define AST_DEFAULT_IAX_PORTNO  4569
70
71 /* IAX Information elements */
72 #define IAX_IE_CALLED_NUMBER            1               /* Number/extension being called - string */
73 #define IAX_IE_CALLING_NUMBER           2               /* Calling number - string */
74 #define IAX_IE_CALLING_ANI                      3               /* Calling number ANI for billing  - string */
75 #define IAX_IE_CALLING_NAME                     4               /* Name of caller - string */
76 #define IAX_IE_CALLED_CONTEXT           5               /* Context for number - string */
77 #define IAX_IE_USERNAME                         6               /* Username (peer or user) for authentication - string */
78 #define IAX_IE_PASSWORD                         7               /* Password for authentication - string */
79 #define IAX_IE_CAPABILITY                       8               /* Actual codec capability - unsigned int */
80 #define IAX_IE_FORMAT                           9               /* Desired codec format - unsigned int */
81 #define IAX_IE_LANGUAGE                         10              /* Desired language - string */
82 #define IAX_IE_VERSION                          11              /* Protocol version - short */
83 #define IAX_IE_ADSICPE                          12              /* CPE ADSI capability - int */
84 #define IAX_IE_DNID                                     13              /* Originally dialed DNID - string */
85 #define IAX_IE_AUTHMETHODS                      14              /* Authentication method(s) - short */
86 #define IAX_IE_CHALLENGE                        15              /* Challenge data for MD5/RSA - string */
87 #define IAX_IE_MD5_RESULT                       16              /* MD5 challenge result - string */
88 #define IAX_IE_RSA_RESULT                       17              /* RSA challenge result - string */
89 #define IAX_IE_APPARENT_ADDR            18              /* Apparent address of peer - struct sockaddr_in */
90 #define IAX_IE_REFRESH                          19              /* When to refresh registration - short */
91 #define IAX_IE_DPSTATUS                         20              /* Dialplan status - short */
92 #define IAX_IE_CALLNO                           21              /* Call number of peer - short */
93 #define IAX_IE_CAUSE                            22              /* Cause - string */
94
95 #define IAX_AUTH_PLAINTEXT                      (1 << 0)
96 #define IAX_AUTH_MD5                            (1 << 1)
97 #define IAX_AUTH_RSA                            (1 << 2)
98
99 #define IAX_META_TRUNK                          1               /* Trunk meta-message */
100 #define IAX_META_VIDEO                          2               /* Video frame */
101
102 #define IAX_DPSTATUS_EXISTS                     (1 << 0)
103 #define IAX_DPSTATUS_CANEXIST           (1 << 1)
104 #define IAX_DPSTATUS_NONEXISTANT        (1 << 2)
105 #define IAX_DPSTATUS_IGNOREPAT          (1 << 14)
106 #define IAX_DPSTATUS_MATCHMORE          (1 << 15)
107
108 /* Full frames are always delivered reliably */
109 struct ast_iax2_full_hdr {
110         unsigned short scallno; /* Source call number -- high bit must be 1 */
111         unsigned short dcallno; /* Destination call number -- high bit is 1 if retransmission */
112         unsigned int ts;                /* 32-bit timestamp in milliseconds (from 1st transmission) */
113         unsigned char oseqno;   /* Packet number (outgoing) */
114         unsigned char iseqno;   /* Packet number (next incoming expected) */
115         char type;                              /* Frame type */
116         unsigned char csub;             /* Compressed subclass */
117         unsigned char iedata[0];
118 } __attribute__ ((__packed__));
119
120 /* Mini header is used only for voice frames -- delivered unreliably */
121 struct ast_iax2_mini_hdr {
122         unsigned short callno;  /* Source call number -- high bit must be 0, rest must be non-zero */
123         unsigned short ts;              /* 16-bit Timestamp (high 16 bits from last ast_iax2_full_hdr) */
124                                                         /* Frametype implicitly VOICE_FRAME */
125                                                         /* subclass implicit from last ast_iax2_full_hdr */
126         unsigned char iedata[0];
127 } __attribute__ ((__packed__));
128
129 struct ast_iax2_meta_hdr {
130         unsigned short zeros;                   /* Zeros field -- must be zero */
131         unsigned char metacmd;                  /* Meta command */
132         unsigned char cmddata;                  /* Command Data */
133         unsigned char data[0];
134 } __attribute__ ((__packed__));
135
136 struct ast_iax2_meta_trunk_hdr {
137         unsigned int ts;                                /* 32-bit timestamp for all messages */
138         unsigned char data[0];
139 };
140
141 struct ast_iax2_meta_trunk_entry {
142         unsigned short callno;                  /* Call number */
143         unsigned short len;                             /* Length of data for this callno */
144 };
145
146 #endif