pval.c should not be in svn, in the utils dir
[asterisk/asterisk.git] / channels / iax2-parser.h
old mode 100755 (executable)
new mode 100644 (file)
index 70bbdc7..e40669d
  * 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;
@@ -27,12 +33,14 @@ struct iax_ies {
        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;
@@ -41,6 +49,7 @@ struct iax_ies {
        unsigned short dpstatus;
        unsigned short callno;
        char *cause;
+       unsigned char causecode;
        unsigned char iax_unknown;
        int msgcount;
        int autoanswer;
@@ -53,8 +62,20 @@ struct iax_ies {
        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;
+       struct ast_variable *vars;
+       char *osptokenblock[IAX_MAX_OSPBLOCK_NUM];
+       unsigned int ospblocklength[IAX_MAX_OSPBLOCK_NUM];
 };
 
 #define DIRECTION_INGRESS 1
@@ -64,6 +85,8 @@ struct iax_frame {
 #ifdef LIBIAX
        struct iax_session *session;
        struct iax_event *event;
+#else
+       int sockfd;
 #endif
 
        /* /Our/ call number */
@@ -81,26 +104,29 @@ struct iax_frame {
        /* How long to wait before retrying */
        int retrytime;
        /* Are we received out of order?  */
-       int outoforder;
+       unsigned int outoforder:1;
        /* Have we been sent at all yet? */
-       int sentyet;
+       unsigned int sentyet:1;
+       /* Non-zero if should be sent to transfer peer */
+       unsigned int transfer:1;
+       /* Non-zero if this is the final message */
+       unsigned int final:1;
+       /* Ingress or outgres */
+       unsigned int direction:2;
+       /* Can this frame be cached? */
+       unsigned int cacheable:1;
        /* Outgoing Packet sequence number */
        int oseqno;
        /* Next expected incoming packet sequence number */
        int iseqno;
-       /* Non-zero if should be sent to transfer peer */
-       int transfer;
-       /* Non-zero if this is the final message */
-       int final;
-       /* Ingress or outgres */
-       int direction;
        /* 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 afdatalen;
        unsigned char unused[AST_FRIENDLY_OFFSET];
        unsigned char afdata[0];        /* Data for frame */
 };
@@ -111,27 +137,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, unsigned int cacheable);
+void iax_frame_free(struct iax_frame *fr);
 #endif