dom mar 16 23:37:23 CET 2003
[asterisk/asterisk.git] / channels / iax2.h
index da8acad..e42591c 100755 (executable)
  * the GNU General Public License
  */
  
-#ifndef _ASTERISK_IAX2_H
-#define _ASTERISK_IAX2_H
+#ifndef _IAX2_H
+#define _IAX2_H
 
 /* Max version of IAX protocol we support */
-#define AST_IAX2_PROTO_VERSION 2
+#define IAX_PROTO_VERSION 2
 
-#define AST_IAX2_MAX_CALLS 32768
+#define IAX_MAX_CALLS 32768
 
-#define AST_FLAG_FULL          0x8000
+#define IAX_FLAG_FULL          0x8000
 
-#define AST_FLAG_RETRANS       0x8000
+#define IAX_FLAG_RETRANS       0x8000
 
-#define AST_FLAG_SC_LOG                0x80
+#define IAX_FLAG_SC_LOG                0x80
 
-#define AST_MAX_SHIFT          0x1F
+#define IAX_MAX_SHIFT          0x1F
 
-#define AST_IAX2_WINDOW                256
+#define IAX_WINDOW                     64
 
 /* Subclass for AST_FRAME_IAX */
-#define AST_IAX2_COMMAND_NEW           1
-#define AST_IAX2_COMMAND_PING  2
-#define AST_IAX2_COMMAND_PONG  3
-#define AST_IAX2_COMMAND_ACK           4
-#define AST_IAX2_COMMAND_HANGUP        5
-#define AST_IAX2_COMMAND_REJECT        6
-#define AST_IAX2_COMMAND_ACCEPT        7
-#define AST_IAX2_COMMAND_AUTHREQ       8
-#define AST_IAX2_COMMAND_AUTHREP       9
-#define AST_IAX2_COMMAND_INVAL 10
-#define AST_IAX2_COMMAND_LAGRQ 11
-#define AST_IAX2_COMMAND_LAGRP 12
-#define AST_IAX2_COMMAND_REGREQ        13      /* Registration request */
-#define AST_IAX2_COMMAND_REGAUTH       14      /* Registration authentication required */
-#define AST_IAX2_COMMAND_REGACK        15      /* Registration accepted */
-#define AST_IAX2_COMMAND_REGREJ        16      /* Registration rejected */
-#define AST_IAX2_COMMAND_REGREL        17      /* Force release of registration */
-#define AST_IAX2_COMMAND_VNAK  18      /* If we receive voice before valid first voice frame, send this */
-#define AST_IAX2_COMMAND_DPREQ 19      /* Request status of a dialplan entry */
-#define AST_IAX2_COMMAND_DPREP 20      /* Request status of a dialplan entry */
-#define AST_IAX2_COMMAND_DIAL  21      /* Request a dial on channel brought up TBD */
-#define AST_IAX2_COMMAND_TXREQ 22      /* Transfer Request */
-#define AST_IAX2_COMMAND_TXCNT 23      /* Transfer Connect */
-#define AST_IAX2_COMMAND_TXACC 24      /* Transfer Accepted */
-#define AST_IAX2_COMMAND_TXREADY       25      /* Transfer ready */
-#define AST_IAX2_COMMAND_TXREL 26      /* Transfer release */
-#define AST_IAX2_COMMAND_TXREJ 27      /* Transfer reject */
-#define AST_IAX2_COMMAND_QUELCH        28      /* Stop audio/video transmission */
-#define AST_IAX2_COMMAND_UNQUELCH 29   /* Resume audio/video transmission */
-#define AST_IAX2_COMMAND_POKE    30  /* Like ping, but does not require an open connection */
-#define AST_IAX2_COMMAND_PAGE  31      /* Paging description */
-#define AST_IAX2_COMMAND_MWI   32      /* Stand-alone message waiting indicator */
-#define AST_IAX2_COMMAND_UNSUPPORT     33      /* Unsupported message received */
-
-#define AST_DEFAULT_REG_EXPIRE  60     /* By default require re-registration once per minute */
-
-#define AST_DEFAULT_IAX_PORTNO 4569
+#define IAX_COMMAND_NEW                1
+#define IAX_COMMAND_PING       2
+#define IAX_COMMAND_PONG       3
+#define IAX_COMMAND_ACK                4
+#define IAX_COMMAND_HANGUP     5
+#define IAX_COMMAND_REJECT     6
+#define IAX_COMMAND_ACCEPT     7
+#define IAX_COMMAND_AUTHREQ    8
+#define IAX_COMMAND_AUTHREP    9
+#define IAX_COMMAND_INVAL      10
+#define IAX_COMMAND_LAGRQ      11
+#define IAX_COMMAND_LAGRP      12
+#define IAX_COMMAND_REGREQ     13      /* Registration request */
+#define IAX_COMMAND_REGAUTH    14      /* Registration authentication required */
+#define IAX_COMMAND_REGACK     15      /* Registration accepted */
+#define IAX_COMMAND_REGREJ     16      /* Registration rejected */
+#define IAX_COMMAND_REGREL     17      /* Force release of registration */
+#define IAX_COMMAND_VNAK       18      /* If we receive voice before valid first voice frame, send this */
+#define IAX_COMMAND_DPREQ      19      /* Request status of a dialplan entry */
+#define IAX_COMMAND_DPREP      20      /* Request status of a dialplan entry */
+#define IAX_COMMAND_DIAL       21      /* Request a dial on channel brought up TBD */
+#define IAX_COMMAND_TXREQ      22      /* Transfer Request */
+#define IAX_COMMAND_TXCNT      23      /* Transfer Connect */
+#define IAX_COMMAND_TXACC      24      /* Transfer Accepted */
+#define IAX_COMMAND_TXREADY    25      /* Transfer ready */
+#define IAX_COMMAND_TXREL      26      /* Transfer release */
+#define IAX_COMMAND_TXREJ      27      /* Transfer reject */
+#define IAX_COMMAND_QUELCH     28      /* Stop audio/video transmission */
+#define IAX_COMMAND_UNQUELCH 29        /* Resume audio/video transmission */
+#define IAX_COMMAND_POKE    30  /* Like ping, but does not require an open connection */
+#define IAX_COMMAND_PAGE       31      /* Paging description */
+#define IAX_COMMAND_MWI        32      /* Stand-alone message waiting indicator */
+#define IAX_COMMAND_UNSUPPORT  33      /* Unsupported message received */
+
+#define IAX_DEFAULT_REG_EXPIRE  60     /* By default require re-registration once per minute */
+
+#define IAX_DEFAULT_PORTNO             4569
 
 /* IAX Information elements */
 #define IAX_IE_CALLED_NUMBER           1               /* Number/extension being called - string */
@@ -80,7 +80,7 @@
 #define IAX_IE_FORMAT                          9               /* Desired codec format - unsigned int */
 #define IAX_IE_LANGUAGE                                10              /* Desired language - string */
 #define IAX_IE_VERSION                         11              /* Protocol version - short */
-#define IAX_IE_ADSICPE                         12              /* CPE ADSI capability - int */
+#define IAX_IE_ADSICPE                         12              /* CPE ADSI capability - short */
 #define IAX_IE_DNID                                    13              /* Originally dialed DNID - string */
 #define IAX_IE_AUTHMETHODS                     14              /* Authentication method(s) - short */
 #define IAX_IE_CHALLENGE                       15              /* Challenge data for MD5/RSA - string */
 #define IAX_IE_DPSTATUS                                20              /* Dialplan status - short */
 #define IAX_IE_CALLNO                          21              /* Call number of peer - short */
 #define IAX_IE_CAUSE                           22              /* Cause - string */
+#define IAX_IE_IAX_UNKNOWN                     23              /* Unknown IAX command - byte */
+#define IAX_IE_MSGCOUNT                                24              /* How many messages waiting - short */
+#define IAX_IE_AUTOANSWER                      25              /* Request auto-answering -- none */
+#define IAX_IE_MUSICONHOLD                     26              /* Request musiconhold with QUELCH -- none or string */
 
 #define IAX_AUTH_PLAINTEXT                     (1 << 0)
 #define IAX_AUTH_MD5                           (1 << 1)
 #define IAX_AUTH_RSA                           (1 << 2)
 
+#define IAX_META_TRUNK                         1               /* Trunk meta-message */
+#define IAX_META_VIDEO                         2               /* Video frame */
+
 #define IAX_DPSTATUS_EXISTS                    (1 << 0)
 #define IAX_DPSTATUS_CANEXIST          (1 << 1)
 #define IAX_DPSTATUS_NONEXISTANT       (1 << 2)
@@ -116,11 +123,28 @@ struct ast_iax2_full_hdr {
 
 /* Mini header is used only for voice frames -- delivered unreliably */
 struct ast_iax2_mini_hdr {
-       short callno;                   /* Source call number -- high bit must be 0 */
+       unsigned short callno;  /* Source call number -- high bit must be 0, rest must be non-zero */
        unsigned short ts;              /* 16-bit Timestamp (high 16 bits from last ast_iax2_full_hdr) */
                                                        /* Frametype implicitly VOICE_FRAME */
                                                        /* subclass implicit from last ast_iax2_full_hdr */
-       unsigned char iedata[0];
+       unsigned char data[0];
+} __attribute__ ((__packed__));
+
+struct ast_iax2_meta_hdr {
+       unsigned short zeros;                   /* Zeros field -- must be zero */
+       unsigned char metacmd;                  /* Meta command */
+       unsigned char cmddata;                  /* Command Data */
+       unsigned char data[0];
+} __attribute__ ((__packed__));
+
+struct ast_iax2_meta_trunk_hdr {
+       unsigned int ts;                                /* 32-bit timestamp for all messages */
+       unsigned char data[0];
+} __attribute__ ((__packed__));
+
+struct ast_iax2_meta_trunk_entry {
+       unsigned short callno;                  /* Call number */
+       unsigned short len;                             /* Length of data for this callno */
 } __attribute__ ((__packed__));
 
 #endif