Merged revisions 47436 via svnmerge from
[asterisk/asterisk.git] / channels / iax2.h
old mode 100755 (executable)
new mode 100644 (file)
index d694599..2b0c8bb
 #define IAX_COMMAND_MWI        32      /* Stand-alone message waiting indicator */
 #define IAX_COMMAND_UNSUPPORT  33      /* Unsupported message received */
 #define IAX_COMMAND_TRANSFER   34      /* Request remote transfer */
 #define IAX_COMMAND_MWI        32      /* Stand-alone message waiting indicator */
 #define IAX_COMMAND_UNSUPPORT  33      /* Unsupported message received */
 #define IAX_COMMAND_TRANSFER   34      /* Request remote transfer */
+#define IAX_COMMAND_PROVISION  35      /* Provision device */
+#define IAX_COMMAND_FWDOWNL    36      /* Download firmware */
+#define IAX_COMMAND_FWDATA     37      /* Firmware Data */
+#define IAX_COMMAND_TXMEDIA 38  /* Transfer media only */
 
 #define IAX_DEFAULT_REG_EXPIRE  60     /* By default require re-registration once per minute */
 
 
 #define IAX_DEFAULT_REG_EXPIRE  60     /* By default require re-registration once per minute */
 
 #define IAX_IE_MUSICONHOLD                     26              /* Request musiconhold with QUELCH -- none or string */
 #define IAX_IE_TRANSFERID                      27              /* Transfer Request Identifier -- int */
 #define IAX_IE_RDNIS                           28              /* Referring DNIS -- string */
 #define IAX_IE_MUSICONHOLD                     26              /* Request musiconhold with QUELCH -- none or string */
 #define IAX_IE_TRANSFERID                      27              /* Transfer Request Identifier -- int */
 #define IAX_IE_RDNIS                           28              /* Referring DNIS -- string */
+#define IAX_IE_PROVISIONING                    29              /* Provisioning info */
+#define IAX_IE_AESPROVISIONING         30              /* AES Provisioning info */
+#define IAX_IE_DATETIME                                31              /* Date/Time */
+#define IAX_IE_DEVICETYPE                      32              /* Device Type -- string */
+#define IAX_IE_SERVICEIDENT                    33              /* Service Identifier -- string */
+#define IAX_IE_FIRMWAREVER                     34              /* Firmware revision -- u16 */
+#define IAX_IE_FWBLOCKDESC                     35              /* Firmware block description -- u32 */
+#define IAX_IE_FWBLOCKDATA                     36              /* Firmware block of data -- raw */
+#define IAX_IE_PROVVER                         37              /* Provisioning Version (u32) */
+#define IAX_IE_CALLINGPRES                     38              /* Calling presentation (u8) */
+#define IAX_IE_CALLINGTON                      39              /* Calling type of number (u8) */
+#define IAX_IE_CALLINGTNS                      40              /* Calling transit network select (u16) */
+#define IAX_IE_SAMPLINGRATE                    41              /* Supported sampling rates (u16) */
+#define IAX_IE_CAUSECODE                       42              /* Hangup cause (u8) */
+#define IAX_IE_ENCRYPTION                      43              /* Encryption format (u16) */
+#define IAX_IE_ENCKEY                          44              /* Encryption key (raw) */
+#define IAX_IE_CODEC_PREFS          45      /* Codec Negotiation */
+
+#define IAX_IE_RR_JITTER                       46              /* Received jitter (as in RFC1889) u32 */
+#define IAX_IE_RR_LOSS                         47              /* Received loss (high byte loss pct, low 24 bits loss count, as in rfc1889 */
+#define IAX_IE_RR_PKTS                         48              /* Received frames (total frames received) u32 */
+#define IAX_IE_RR_DELAY                                49              /* Max playout delay for received frames (in ms) u16 */
+#define IAX_IE_RR_DROPPED                      50              /* Dropped frames (presumably by jitterbuf) u32 */
+#define IAX_IE_RR_OOO                          51              /* Frames received Out of Order u32 */
+
 
 #define IAX_AUTH_PLAINTEXT                     (1 << 0)
 #define IAX_AUTH_MD5                           (1 << 1)
 #define IAX_AUTH_RSA                           (1 << 2)
 
 
 #define IAX_AUTH_PLAINTEXT                     (1 << 0)
 #define IAX_AUTH_MD5                           (1 << 1)
 #define IAX_AUTH_RSA                           (1 << 2)
 
+#define IAX_ENCRYPT_AES128                     (1 << 0)
+
 #define IAX_META_TRUNK                         1               /* Trunk meta-message */
 #define IAX_META_VIDEO                         2               /* Video frame */
 
 #define IAX_META_TRUNK                         1               /* Trunk meta-message */
 #define IAX_META_VIDEO                         2               /* Video frame */
 
+#define IAX_META_TRUNK_SUPERMINI               0       /* This trunk frame contains classic supermini frames */
+#define IAX_META_TRUNK_MINI                    1       /* This trunk frame contains trunked mini frames */
+
+#define IAX_RATE_8KHZ                          (1 << 0) /* 8khz sampling (default if absent) */
+#define IAX_RATE_11KHZ                         (1 << 1) /* 11.025khz sampling */
+#define IAX_RATE_16KHZ                         (1 << 2) /* 16khz sampling */
+#define IAX_RATE_22KHZ                         (1 << 3) /* 22.05khz sampling */
+#define IAX_RATE_44KHZ                         (1 << 4) /* 44.1khz sampling */
+#define IAX_RATE_48KHZ                         (1 << 5) /* 48khz sampling */
+
 #define IAX_DPSTATUS_EXISTS                    (1 << 0)
 #define IAX_DPSTATUS_CANEXIST          (1 << 1)
 #define IAX_DPSTATUS_EXISTS                    (1 << 0)
 #define IAX_DPSTATUS_CANEXIST          (1 << 1)
-#define IAX_DPSTATUS_NONEXISTANT       (1 << 2)
+#define IAX_DPSTATUS_NONEXISTENT       (1 << 2)
 #define IAX_DPSTATUS_IGNOREPAT         (1 << 14)
 #define IAX_DPSTATUS_MATCHMORE         (1 << 15)
 
 #define IAX_DPSTATUS_IGNOREPAT         (1 << 14)
 #define IAX_DPSTATUS_MATCHMORE         (1 << 15)
 
@@ -121,11 +162,18 @@ struct ast_iax2_full_hdr {
        unsigned int ts;                /* 32-bit timestamp in milliseconds (from 1st transmission) */
        unsigned char oseqno;   /* Packet number (outgoing) */
        unsigned char iseqno;   /* Packet number (next incoming expected) */
        unsigned int ts;                /* 32-bit timestamp in milliseconds (from 1st transmission) */
        unsigned char oseqno;   /* Packet number (outgoing) */
        unsigned char iseqno;   /* Packet number (next incoming expected) */
-       char type;                              /* Frame type */
+       unsigned char type;             /* Frame type */
        unsigned char csub;             /* Compressed subclass */
        unsigned char iedata[0];
 } __attribute__ ((__packed__));
 
        unsigned char csub;             /* Compressed subclass */
        unsigned char iedata[0];
 } __attribute__ ((__packed__));
 
+/* Full frames are always delivered reliably */
+struct ast_iax2_full_enc_hdr {
+       unsigned short scallno; /* Source call number -- high bit must be 1 */
+       unsigned short dcallno; /* Destination call number -- high bit is 1 if retransmission */
+       unsigned char encdata[0];
+} __attribute__ ((__packed__));
+
 /* Mini header is used only for voice frames -- delivered unreliably */
 struct ast_iax2_mini_hdr {
        unsigned short callno;  /* Source call number -- high bit must be 0, rest must be non-zero */
 /* Mini header is used only for voice frames -- delivered unreliably */
 struct ast_iax2_mini_hdr {
        unsigned short callno;  /* Source call number -- high bit must be 0, rest must be non-zero */
@@ -135,6 +183,12 @@ struct ast_iax2_mini_hdr {
        unsigned char data[0];
 } __attribute__ ((__packed__));
 
        unsigned char data[0];
 } __attribute__ ((__packed__));
 
+/* Mini header is used only for voice frames -- delivered unreliably */
+struct ast_iax2_mini_enc_hdr {
+       unsigned short callno;  /* Source call number -- high bit must be 0, rest must be non-zero */
+       unsigned char encdata[0];
+} __attribute__ ((__packed__));
+
 struct ast_iax2_meta_hdr {
        unsigned short zeros;                   /* Zeros field -- must be zero */
        unsigned char metacmd;                  /* Meta command */
 struct ast_iax2_meta_hdr {
        unsigned short zeros;                   /* Zeros field -- must be zero */
        unsigned char metacmd;                  /* Meta command */
@@ -142,6 +196,13 @@ struct ast_iax2_meta_hdr {
        unsigned char data[0];
 } __attribute__ ((__packed__));
 
        unsigned char data[0];
 } __attribute__ ((__packed__));
 
+struct ast_iax2_video_hdr {
+       unsigned short zeros;                   /* Zeros field -- must be zero */
+       unsigned short callno;                  /* Video call number */
+       unsigned short ts;                              /* Timestamp and mark if present */
+       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];
 struct ast_iax2_meta_trunk_hdr {
        unsigned int ts;                                /* 32-bit timestamp for all messages */
        unsigned char data[0];
@@ -152,4 +213,20 @@ struct ast_iax2_meta_trunk_entry {
        unsigned short len;                             /* Length of data for this callno */
 } __attribute__ ((__packed__));
 
        unsigned short len;                             /* Length of data for this callno */
 } __attribute__ ((__packed__));
 
+/* When trunktimestamps are used, we use this format instead */
+struct ast_iax2_meta_trunk_mini {
+       unsigned short len;
+       struct ast_iax2_mini_hdr mini;          /* this is an actual miniframe */
+} __attribute__ ((__packed__));
+
+#define IAX_FIRMWARE_MAGIC 0x69617879
+
+struct ast_iax2_firmware_header {
+       unsigned int magic;             /* Magic number */
+       unsigned short version;         /* Software version */
+       unsigned char devname[16];      /* Device */
+       unsigned int datalen;           /* Data length of file beyond header */
+       unsigned char chksum[16];       /* Checksum of all data */
+       unsigned char data[0];
+} __attribute__ ((__packed__));
 #endif
 #endif