![]() |
Home page |
Mailing list |
Docs
Asterisk developer's documentation :: Codename Pineapple
iax2-parser.h
Go to the documentation of this file.
00001 /* 00002 * Asterisk -- A telephony toolkit for Linux. 00003 * 00004 * Implementation of Inter-Asterisk eXchange 00005 * 00006 * Copyright (C) 2003, Digium 00007 * 00008 * Mark Spencer <markster@digium.com> 00009 * 00010 * This program is free software, distributed under the terms of 00011 * the GNU General Public License 00012 */ 00013 00014 /*!\file 00015 * \brief Implementation of the IAX2 protocol 00016 */ 00017 00018 #ifndef _IAX2_PARSER_H 00019 #define _IAX2_PARSER_H 00020 00021 #include "asterisk/linkedlists.h" 00022 00023 struct iax_ies { 00024 char *called_number; 00025 char *calling_number; 00026 char *calling_ani; 00027 char *calling_name; 00028 int calling_ton; 00029 int calling_tns; 00030 int calling_pres; 00031 char *called_context; 00032 char *username; 00033 char *password; 00034 unsigned int capability; 00035 unsigned int format; 00036 char *codec_prefs; 00037 char *language; 00038 int version; 00039 unsigned short adsicpe; 00040 char *dnid; 00041 char *rdnis; 00042 unsigned int authmethods; 00043 unsigned int encmethods; 00044 char *challenge; 00045 char *md5_result; 00046 char *rsa_result; 00047 struct sockaddr_in *apparent_addr; 00048 unsigned short refresh; 00049 unsigned short dpstatus; 00050 unsigned short callno; 00051 char *cause; 00052 unsigned char causecode; 00053 unsigned char iax_unknown; 00054 int msgcount; 00055 int autoanswer; 00056 int musiconhold; 00057 unsigned int transferid; 00058 unsigned int datetime; 00059 char *devicetype; 00060 char *serviceident; 00061 int firmwarever; 00062 unsigned int fwdesc; 00063 unsigned char *fwdata; 00064 unsigned char fwdatalen; 00065 unsigned char *enckey; 00066 unsigned char enckeylen; 00067 unsigned int provver; 00068 unsigned short samprate; 00069 int provverpres; 00070 unsigned int rr_jitter; 00071 unsigned int rr_loss; 00072 unsigned int rr_pkts; 00073 unsigned short rr_delay; 00074 unsigned int rr_dropped; 00075 unsigned int rr_ooo; 00076 struct ast_variable *vars; 00077 }; 00078 00079 #define DIRECTION_INGRESS 1 00080 #define DIRECTION_OUTGRESS 2 00081 00082 struct iax_frame { 00083 #ifdef LIBIAX 00084 struct iax_session *session; 00085 struct iax_event *event; 00086 #else 00087 int sockfd; 00088 #endif 00089 00090 /* /Our/ call number */ 00091 unsigned short callno; 00092 /* /Their/ call number */ 00093 unsigned short dcallno; 00094 /* Start of raw frame (outgoing only) */ 00095 void *data; 00096 /* Length of frame (outgoing only) */ 00097 int datalen; 00098 /* How many retries so far? */ 00099 int retries; 00100 /* Outgoing relative timestamp (ms) */ 00101 unsigned int ts; 00102 /* How long to wait before retrying */ 00103 int retrytime; 00104 /* Are we received out of order? */ 00105 unsigned int outoforder:1; 00106 /* Have we been sent at all yet? */ 00107 unsigned int sentyet:1; 00108 /* Non-zero if should be sent to transfer peer */ 00109 unsigned int transfer:1; 00110 /* Non-zero if this is the final message */ 00111 unsigned int final:1; 00112 /* Ingress or outgres */ 00113 unsigned int direction:2; 00114 /* Can this frame be cached? */ 00115 unsigned int cacheable:1; 00116 /* Outgoing Packet sequence number */ 00117 int oseqno; 00118 /* Next expected incoming packet sequence number */ 00119 int iseqno; 00120 /* Retransmission ID */ 00121 int retrans; 00122 /* Easy linking */ 00123 AST_LIST_ENTRY(iax_frame) list; 00124 /* Actual, isolated frame header */ 00125 struct ast_frame af; 00126 /*! Amount of space _allocated_ for data */ 00127 size_t mallocd_datalen; 00128 unsigned char unused[AST_FRIENDLY_OFFSET]; 00129 unsigned char afdata[0]; /* Data for frame */ 00130 }; 00131 00132 struct iax_ie_data { 00133 unsigned char buf[1024]; 00134 int pos; 00135 }; 00136 00137 /* Choose a different function for output */ 00138 void iax_set_output(void (*output)(const char *data)); 00139 /* Choose a different function for errors */ 00140 void iax_set_error(void (*output)(const char *data)); 00141 void iax_showframe(struct iax_frame *f, struct ast_iax2_full_hdr *fhi, int rx, struct sockaddr_in *sin, int datalen); 00142 00143 const char *iax_ie2str(int ie); 00144 00145 int iax_ie_append_raw(struct iax_ie_data *ied, unsigned char ie, const void *data, int datalen); 00146 int iax_ie_append_addr(struct iax_ie_data *ied, unsigned char ie, const struct sockaddr_in *sin); 00147 int iax_ie_append_int(struct iax_ie_data *ied, unsigned char ie, unsigned int value); 00148 int iax_ie_append_short(struct iax_ie_data *ied, unsigned char ie, unsigned short value); 00149 int iax_ie_append_str(struct iax_ie_data *ied, unsigned char ie, const char *str); 00150 int iax_ie_append_byte(struct iax_ie_data *ied, unsigned char ie, unsigned char dat); 00151 int iax_ie_append(struct iax_ie_data *ied, unsigned char ie); 00152 int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen); 00153 00154 int iax_get_frames(void); 00155 int iax_get_iframes(void); 00156 int iax_get_oframes(void); 00157 00158 void iax_frame_wrap(struct iax_frame *fr, struct ast_frame *f); 00159 struct iax_frame *iax_frame_new(int direction, int datalen, unsigned int cacheable); 00160 void iax_frame_free(struct iax_frame *fr); 00161 #endif