Merge team/russell/frame_caching
[asterisk/asterisk.git] / channels / iax2-parser.h
old mode 100755 (executable)
new mode 100644 (file)
index 0e74df3..2970c9f
@@ -5,31 +5,42 @@
  * 
  * Copyright (C) 2003, Digium
  *
- * Mark Spencer <markster@linux-support.net>
+ * Mark Spencer <markster@digium.com>
  *
  * This program is free software, distributed under the terms of
  * the GNU General Public License
  */
+
+/*!\file
+ * \brief Implementation of the IAX2 protocol
+ */
  
 #ifndef _IAX2_PARSER_H
 #define _IAX2_PARSER_H
 
+#include "asterisk/linkedlists.h"
+
 struct iax_ies {
        char *called_number;
        char *calling_number;
        char *calling_ani;
        char *calling_name;
+       int calling_ton;
+       int calling_tns;
+       int calling_pres;
        char *called_context;
        char *username;
        char *password;
        unsigned int capability;
        unsigned int format;
+       char *codec_prefs;
        char *language;
        int version;
        unsigned short adsicpe;
        char *dnid;
        char *rdnis;
        unsigned int authmethods;
+       unsigned int encmethods;
        char *challenge;
        char *md5_result;
        char *rsa_result;
@@ -38,12 +49,30 @@ struct iax_ies {
        unsigned short dpstatus;
        unsigned short callno;
        char *cause;
+       unsigned char causecode;
        unsigned char iax_unknown;
        int msgcount;
        int autoanswer;
        int musiconhold;
        unsigned int transferid;
        unsigned int datetime;
+       char *devicetype;
+       char *serviceident;
+       int firmwarever;
+       unsigned int fwdesc;
+       unsigned char *fwdata;
+       unsigned char fwdatalen;
+       unsigned char *enckey;
+       unsigned char enckeylen;
+       unsigned int provver;
+       unsigned short samprate;
+       int provverpres;
+       unsigned int rr_jitter;
+       unsigned int rr_loss;
+       unsigned int rr_pkts;
+       unsigned short rr_delay;
+       unsigned int rr_dropped;
+       unsigned int rr_ooo;
 };
 
 #define DIRECTION_INGRESS 1
@@ -53,6 +82,8 @@ struct iax_frame {
 #ifdef LIBIAX
        struct iax_session *session;
        struct iax_event *event;
+#else
+       int sockfd;
 #endif
 
        /* /Our/ call number */
@@ -86,10 +117,11 @@ struct iax_frame {
        /* Retransmission ID */
        int retrans;
        /* Easy linking */
-       struct iax_frame *next;
-       struct iax_frame *prev;
+       AST_LIST_ENTRY(iax_frame) list;
        /* Actual, isolated frame header */
        struct ast_frame af;
+       /*! Amount of space _allocated_ for data */
+       size_t mallocd_datalen;
        unsigned char unused[AST_FRIENDLY_OFFSET];
        unsigned char afdata[0];        /* Data for frame */
 };
@@ -100,27 +132,27 @@ struct iax_ie_data {
 };
 
 /* Choose a different function for output */
-extern void iax_set_output(void (*output)(const char *data));
+void iax_set_output(void (*output)(const char *data));
 /* Choose a different function for errors */
-extern void iax_set_error(void (*output)(const char *data));
-extern void iax_showframe(struct iax_frame *f, struct ast_iax2_full_hdr *fhi, int rx, struct sockaddr_in *sin, int datalen);
+void iax_set_error(void (*output)(const char *data));
+void iax_showframe(struct iax_frame *f, struct ast_iax2_full_hdr *fhi, int rx, struct sockaddr_in *sin, int datalen);
 
-extern const char *iax_ie2str(int ie);
+const char *iax_ie2str(int ie);
 
-extern int iax_ie_append_raw(struct iax_ie_data *ied, unsigned char ie, void *data, int datalen);
-extern int iax_ie_append_addr(struct iax_ie_data *ied, unsigned char ie, struct sockaddr_in *sin);
-extern int iax_ie_append_int(struct iax_ie_data *ied, unsigned char ie, unsigned int value);
-extern int iax_ie_append_short(struct iax_ie_data *ied, unsigned char ie, unsigned short value);
-extern int iax_ie_append_str(struct iax_ie_data *ied, unsigned char ie, unsigned char *str);
-extern int iax_ie_append_byte(struct iax_ie_data *ied, unsigned char ie, unsigned char dat);
-extern int iax_ie_append(struct iax_ie_data *ied, unsigned char ie);
-extern int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen);
+int iax_ie_append_raw(struct iax_ie_data *ied, unsigned char ie, const void *data, int datalen);
+int iax_ie_append_addr(struct iax_ie_data *ied, unsigned char ie, const struct sockaddr_in *sin);
+int iax_ie_append_int(struct iax_ie_data *ied, unsigned char ie, unsigned int value);
+int iax_ie_append_short(struct iax_ie_data *ied, unsigned char ie, unsigned short value);
+int iax_ie_append_str(struct iax_ie_data *ied, unsigned char ie, const char *str);
+int iax_ie_append_byte(struct iax_ie_data *ied, unsigned char ie, unsigned char dat);
+int iax_ie_append(struct iax_ie_data *ied, unsigned char ie);
+int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen);
 
-extern int iax_get_frames(void);
-extern int iax_get_iframes(void);
-extern int iax_get_oframes(void);
+int iax_get_frames(void);
+int iax_get_iframes(void);
+int iax_get_oframes(void);
 
-extern void iax_frame_wrap(struct iax_frame *fr, struct ast_frame *f);
-extern struct iax_frame *iax_frame_new(int direction, int datalen);
-extern void iax_frame_free(struct iax_frame *fr);
+void iax_frame_wrap(struct iax_frame *fr, struct ast_frame *f);
+struct iax_frame *iax_frame_new(int direction, int datalen);
+void iax_frame_free(struct iax_frame *fr);
 #endif