Wed Jan 8 2020 09:49:48

Asterisk developer's documentation


iax2-parser.h
Go to the documentation of this file.
1 /*
2  * Asterisk -- A telephony toolkit for Linux.
3  *
4  * Implementation of Inter-Asterisk eXchange
5  *
6  * Copyright (C) 2003, Digium
7  *
8  * Mark Spencer <markster@digium.com>
9  *
10  * This program is free software, distributed under the terms of
11  * the GNU General Public License
12  */
13 
14 /*!\file
15  * \brief Implementation of the IAX2 protocol
16  */
17 
18 #ifndef _IAX2_PARSER_H
19 #define _IAX2_PARSER_H
20 
21 #include "asterisk/linkedlists.h"
22 #include "asterisk/crypto.h"
23 #include "asterisk/frame_defs.h"
24 
25 struct iax_ies {
28  char *calling_ani;
29  char *calling_name;
34  char *username;
35  char *password;
38  char *codec_prefs;
39  char *language;
40  int version;
41  unsigned short adsicpe;
42  char *dnid;
43  char *rdnis;
44  unsigned int authmethods;
45  unsigned int encmethods;
46  char *challenge;
47  char *md5_result;
48  char *rsa_result;
49  struct sockaddr_in *apparent_addr;
50  unsigned short refresh;
51  unsigned short dpstatus;
52  unsigned short callno;
53  char *cause;
54  unsigned char causecode;
55  unsigned char iax_unknown;
56  int msgcount;
59  unsigned int transferid;
60  unsigned int datetime;
61  char *devicetype;
62  char *serviceident;
64  unsigned int fwdesc;
65  unsigned char *fwdata;
66  unsigned char fwdatalen;
67  unsigned char *enckey;
68  unsigned char enckeylen;
69  unsigned int provver;
70  unsigned short samprate;
72  unsigned int rr_jitter;
73  unsigned int rr_loss;
74  unsigned int rr_pkts;
75  unsigned short rr_delay;
76  unsigned int rr_dropped;
77  unsigned int rr_ooo;
78  struct ast_variable *vars;
81  unsigned char calltoken;
82  unsigned char *calltokendata;
83 };
84 
85 #define DIRECTION_INGRESS 1
86 #define DIRECTION_OUTGRESS 2
87 
88 struct iax_frame {
89 #ifdef LIBIAX
90  struct iax_session *session;
91  struct iax_event *event;
92 #else
93  int sockfd;
94 #endif
95 
96  /*! /Our/ call number */
97  unsigned short callno;
98  /*! /Their/ call number */
99  unsigned short dcallno;
100  /*! Start of raw frame (outgoing only) */
101  void *data;
102  /*! Length of frame (outgoing only) */
103  int datalen;
104  /*! How many retries so far? */
105  int retries;
106  /*! Outgoing relative timestamp (ms) */
107  unsigned int ts;
108  /*! How long to wait before retrying */
110  /*! Are we received out of order? */
111  unsigned int outoforder:1;
112  /*! Have we been sent at all yet? */
113  unsigned int sentyet:1;
114  /*! Non-zero if should be sent to transfer peer */
115  unsigned int transfer:1;
116  /*! Non-zero if this is the final message */
117  unsigned int final:1;
118  /*! Ingress or outgres */
119  unsigned int direction:2;
120  /*! Can this frame be cached? */
121  unsigned int cacheable:1;
122  /*! Outgoing Packet sequence number */
123  int oseqno;
124  /*! Next expected incoming packet sequence number */
125  int iseqno;
126  /*! Retransmission ID */
127  int retrans;
128  /*! is this packet encrypted or not. if set this varible holds encryption methods*/
130  /*! store encrypt key */
132  /*! store decrypt key which corresponds to ecx */
134  /*! random data for encryption pad */
135  unsigned char semirand[32];
136  /*! Easy linking */
138  /*! Actual, isolated frame header */
139  struct ast_frame af;
140  /*! Amount of space _allocated_ for data */
141  size_t afdatalen;
142  unsigned char unused[AST_FRIENDLY_OFFSET];
143  unsigned char afdata[0]; /* Data for frame */
144 };
145 
146 struct iax_ie_data {
147  unsigned char buf[1024];
148  int pos;
149 };
150 
151 /* Choose a different function for output */
152 void iax_set_output(void (*output)(const char *data));
153 /* Choose a different function for errors */
154 void iax_set_error(void (*output)(const char *data));
155 void iax_showframe(struct iax_frame *f, struct ast_iax2_full_hdr *fhi, int rx, struct sockaddr_in *sin, int datalen);
156 void iax_frame_subclass2str(enum iax_frame_subclass subclass, char *str, size_t len);
157 
158 const char *iax_ie2str(int ie);
159 
160 int iax_ie_append_raw(struct iax_ie_data *ied, unsigned char ie, const void *data, int datalen);
161 int iax_ie_append_addr(struct iax_ie_data *ied, unsigned char ie, const struct sockaddr_in *sin);
162 int iax_ie_append_versioned_uint64(struct iax_ie_data *ied, unsigned char ie, unsigned char version, uint64_t value);
163 int iax_ie_append_int(struct iax_ie_data *ied, unsigned char ie, unsigned int value);
164 int iax_ie_append_short(struct iax_ie_data *ied, unsigned char ie, unsigned short value);
165 int iax_ie_append_str(struct iax_ie_data *ied, unsigned char ie, const char *str);
166 int iax_ie_append_byte(struct iax_ie_data *ied, unsigned char ie, unsigned char dat);
167 int iax_ie_append(struct iax_ie_data *ied, unsigned char ie);
168 int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen);
169 
170 int iax_get_frames(void);
171 int iax_get_iframes(void);
172 int iax_get_oframes(void);
173 
174 void iax_frame_wrap(struct iax_frame *fr, struct ast_frame *f);
175 struct iax_frame *iax_frame_new(int direction, int datalen, unsigned int cacheable);
176 void iax_frame_free(struct iax_frame *fr);
177 #endif
struct ast_frame af
Definition: iax2-parser.h:139
unsigned int fwdesc
Definition: iax2-parser.h:64
void iax_frame_subclass2str(enum iax_frame_subclass subclass, char *str, size_t len)
Definition: iax2-parser.c:435
uint32_t version
int calling_tns
Definition: iax2-parser.h:31
int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen)
Definition: iax2-parser.c:762
void iax_showframe(struct iax_frame *f, struct ast_iax2_full_hdr *fhi, int rx, struct sockaddr_in *sin, int datalen)
Definition: iax2-parser.c:567
char * serviceident
Definition: iax2-parser.h:62
void iax_set_output(void(*func)(const char *))
Definition: iax2-parser.c:752
char * rsa_result
Definition: iax2-parser.h:48
unsigned char unused[AST_FRIENDLY_OFFSET]
Definition: iax2-parser.h:142
char * md5_result
Definition: iax2-parser.h:47
int sockfd
Definition: iax2-parser.h:93
void iax_frame_wrap(struct iax_frame *fr, struct ast_frame *f)
Definition: iax2-parser.c:1152
size_t afdatalen
Definition: iax2-parser.h:141
iax_frame_subclass
Definition: iax2.h:51
unsigned int transferid
Definition: iax2-parser.h:59
struct iax_frame * iax_frame_new(int direction, int datalen, unsigned int cacheable)
Definition: iax2-parser.c:1183
struct sockaddr_in * apparent_addr
Definition: iax2-parser.h:49
unsigned char * fwdata
Definition: iax2-parser.h:65
char * username
Definition: iax2-parser.h:34
unsigned int rr_dropped
Definition: iax2-parser.h:76
Provide cryptographic signature routines.
int calling_ton
Definition: iax2-parser.h:30
Structure for variables, used for configurations and for channel variables.
Definition: config.h:75
unsigned char * enckey
Definition: iax2-parser.h:67
format_t capability
Definition: iax2-parser.h:36
int firmwarever
Definition: iax2-parser.h:63
unsigned char afdata[0]
Definition: iax2-parser.h:143
unsigned char semirand[32]
Definition: iax2-parser.h:135
unsigned int rr_loss
Definition: iax2-parser.h:73
unsigned int datetime
Definition: iax2-parser.h:60
const char * str
Definition: app_jack.c:144
int iax_get_iframes(void)
Definition: iax2-parser.c:1294
unsigned int provver
Definition: iax2-parser.h:69
unsigned short dpstatus
Definition: iax2-parser.h:51
unsigned char fwdatalen
Definition: iax2-parser.h:66
int value
Definition: syslog.c:39
char * devicetype
Definition: iax2-parser.h:61
char * calling_number
Definition: iax2-parser.h:27
int iax_ie_append_versioned_uint64(struct iax_ie_data *ied, unsigned char ie, unsigned char version, uint64_t value)
Definition: iax2-parser.c:713
format_t format
Definition: iax2-parser.h:37
ast_aes_decrypt_key mydcx
Definition: iax2-parser.h:133
int iax_get_oframes(void)
Definition: iax2-parser.c:1295
int msgcount
Definition: iax2-parser.h:56
char * called_context
Definition: iax2-parser.h:33
AES_KEY ast_aes_encrypt_key
Definition: crypto.h:35
char * codec_prefs
Definition: iax2-parser.h:38
char * challenge
Definition: iax2-parser.h:46
unsigned int sentyet
Definition: iax2-parser.h:113
#define IAX_MAX_OSPBLOCK_NUM
Definition: iax2.h:191
unsigned int encmethods
Definition: iax2-parser.h:45
unsigned short callno
Definition: iax2-parser.h:52
int provverpres
Definition: iax2-parser.h:71
int iax_ie_append_addr(struct iax_ie_data *ied, unsigned char ie, const struct sockaddr_in *sin)
Definition: iax2-parser.c:708
unsigned char * calltokendata
Definition: iax2-parser.h:82
unsigned char causecode
Definition: iax2-parser.h:54
#define AST_FRIENDLY_OFFSET
Offset into a frame&#39;s data buffer.
Definition: frame.h:204
unsigned int cacheable
Definition: iax2-parser.h:121
unsigned int rr_jitter
Definition: iax2-parser.h:72
unsigned char iax_unknown
Definition: iax2-parser.h:55
char * osptokenblock[IAX_MAX_OSPBLOCK_NUM]
Definition: iax2-parser.h:79
int iax_ie_append_short(struct iax_ie_data *ied, unsigned char ie, unsigned short value)
Definition: iax2-parser.c:730
A set of macros to manage forward-linked lists.
unsigned short adsicpe
Definition: iax2-parser.h:41
int iax_get_frames(void)
Definition: iax2-parser.c:1293
int version
Definition: iax2-parser.h:40
unsigned int direction
Definition: iax2-parser.h:119
unsigned int rr_ooo
Definition: iax2-parser.h:77
int64_t format_t
Definition: frame_defs.h:32
unsigned int transfer
Definition: iax2-parser.h:115
void * data
Definition: iax2-parser.h:101
int calling_pres
Definition: iax2-parser.h:32
unsigned short callno
Definition: iax2-parser.h:97
static int len(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t buflen)
char * language
Definition: iax2-parser.h:39
ast_aes_encrypt_key ecx
Definition: iax2-parser.h:131
unsigned int ts
Definition: iax2-parser.h:107
char * rdnis
Definition: iax2-parser.h:43
void iax_set_error(void(*func)(const char *))
Definition: iax2-parser.c:757
#define AST_LIST_ENTRY(type)
Declare a forward link structure inside a list entry.
Definition: linkedlists.h:409
char * calling_name
Definition: iax2-parser.h:29
unsigned int authmethods
Definition: iax2-parser.h:44
unsigned char calltoken
Definition: iax2-parser.h:81
AES_KEY ast_aes_decrypt_key
Definition: crypto.h:36
int autoanswer
Definition: iax2-parser.h:57
int retrytime
Definition: iax2-parser.h:109
static struct ast_format f[]
Definition: format_g726.c:181
char * called_number
Definition: iax2-parser.h:26
int iax_ie_append_raw(struct iax_ie_data *ied, unsigned char ie, const void *data, int datalen)
Definition: iax2-parser.c:693
int encmethods
Definition: iax2-parser.h:129
unsigned char enckeylen
Definition: iax2-parser.h:68
unsigned short rr_delay
Definition: iax2-parser.h:75
int iax_ie_append(struct iax_ie_data *ied, unsigned char ie)
Definition: iax2-parser.c:747
struct ast_variable * vars
Definition: iax2-parser.h:78
int musiconhold
Definition: iax2-parser.h:58
int iax_ie_append_int(struct iax_ie_data *ied, unsigned char ie, unsigned int value)
Definition: iax2-parser.c:723
unsigned int rr_pkts
Definition: iax2-parser.h:74
Data structure associated with a single frame of data.
Definition: frame.h:142
unsigned int ospblocklength[IAX_MAX_OSPBLOCK_NUM]
Definition: iax2-parser.h:80
char * password
Definition: iax2-parser.h:35
char * calling_ani
Definition: iax2-parser.h:28
void iax_frame_free(struct iax_frame *fr)
Definition: iax2-parser.c:1241
struct iax_frame::@116 list
int iax_ie_append_byte(struct iax_ie_data *ied, unsigned char ie, unsigned char dat)
Definition: iax2-parser.c:742
unsigned short refresh
Definition: iax2-parser.h:50
char * cause
Definition: iax2-parser.h:53
const char * iax_ie2str(int ie)
Definition: iax2-parser.c:325
unsigned short dcallno
Definition: iax2-parser.h:99
int iax_ie_append_str(struct iax_ie_data *ied, unsigned char ie, const char *str)
Definition: iax2-parser.c:737
Asterisk internal frame definitions.
char * dnid
Definition: iax2-parser.h:42
unsigned short samprate
Definition: iax2-parser.h:70
unsigned int outoforder
Definition: iax2-parser.h:111