This source file includes following definitions.
- FTDM_STR2ENUM_P
- FTDM_STR2ENUM_P
- FTDM_STR2ENUM_P
- FTDM_STR2ENUM_P
- FTDM_STR2ENUM_P
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 #ifndef FTDM_TYPES_H
40 #define FTDM_TYPES_H
41
42 #include "freetdm.h"
43
44 #include "fsk.h"
45
46 #ifdef WIN32
47 typedef intptr_t ftdm_ssize_t;
48 typedef int ftdm_filehandle_t;
49 #else
50 #include <sys/types.h>
51 #include <sys/ioctl.h>
52 #include <stdarg.h>
53 typedef ssize_t ftdm_ssize_t;
54 typedef int ftdm_filehandle_t;
55 #endif
56
57 #ifdef __cplusplus
58 extern "C" {
59 #endif
60
61 #define FTDM_COMMAND_OBJ_INT *((int *)obj)
62 #define FTDM_COMMAND_OBJ_CHAR_P (char *)obj
63 #define FTDM_COMMAND_OBJ_FLOAT *(float *)obj
64 #define FTDM_FSK_MOD_FACTOR 0x10000
65 #define FTDM_DEFAULT_DTMF_ON 250
66 #define FTDM_DEFAULT_DTMF_OFF 50
67
68 #define FTDM_END -1
69 #define FTDM_ANY_STATE -1
70
71 typedef uint64_t ftdm_time_t;
72
73 typedef enum {
74 FTDM_ENDIAN_BIG = 1,
75 FTDM_ENDIAN_LITTLE = -1
76 } ftdm_endian_t;
77
78 typedef enum {
79 FTDM_CID_TYPE_SDMF = 0x04,
80 FTDM_CID_TYPE_MDMF = 0x80
81 } ftdm_cid_type_t;
82
83 typedef enum {
84 MDMF_DATETIME = 1,
85 MDMF_PHONE_NUM = 2,
86 MDMF_DDN = 3,
87 MDMF_NO_NUM = 4,
88 MDMF_PHONE_NAME = 7,
89 MDMF_NO_NAME = 8,
90 MDMF_ALT_ROUTE = 9,
91 MDMF_INVALID = 10
92 } ftdm_mdmf_type_t;
93 #define MDMF_STRINGS "X", "DATETIME", "PHONE_NUM", "DDN", "NO_NUM", "X", "X", "PHONE_NAME", "NO_NAME", "ALT_ROUTE", "INVALID"
94 FTDM_STR2ENUM_P(ftdm_str2ftdm_mdmf_type, ftdm_mdmf_type2str, ftdm_mdmf_type_t)
95
96 #define FTDM_TONEMAP_LEN 128
97 typedef enum {
98 FTDM_TONEMAP_NONE,
99 FTDM_TONEMAP_DIAL,
100 FTDM_TONEMAP_RING,
101 FTDM_TONEMAP_BUSY,
102 FTDM_TONEMAP_FAIL1,
103 FTDM_TONEMAP_FAIL2,
104 FTDM_TONEMAP_FAIL3,
105 FTDM_TONEMAP_ATTN,
106 FTDM_TONEMAP_CALLWAITING_CAS,
107 FTDM_TONEMAP_CALLWAITING_SAS,
108 FTDM_TONEMAP_CALLWAITING_ACK,
109 FTDM_TONEMAP_INVALID
110 } ftdm_tonemap_t;
111 #define TONEMAP_STRINGS "NONE", "DIAL", "RING", "BUSY", "FAIL1", "FAIL2", "FAIL3", "ATTN", "CALLWAITING-CAS", "CALLWAITING-SAS", "CALLWAITING-ACK", "INVALID"
112 FTDM_STR2ENUM_P(ftdm_str2ftdm_tonemap, ftdm_tonemap2str, ftdm_tonemap_t)
113
114 typedef enum {
115 FTDM_ANALOG_START_KEWL,
116 FTDM_ANALOG_START_LOOP,
117 FTDM_ANALOG_START_GROUND,
118 FTDM_ANALOG_START_WINK,
119 FTDM_ANALOG_START_NA
120 } ftdm_analog_start_type_t;
121 #define START_TYPE_STRINGS "KEWL", "LOOP", "GROUND", "WINK", "NA"
122 FTDM_STR2ENUM_P(ftdm_str2ftdm_analog_start_type, ftdm_analog_start_type2str, ftdm_analog_start_type_t)
123
124 typedef enum {
125 FTDM_OOB_ONHOOK,
126 FTDM_OOB_OFFHOOK,
127 FTDM_OOB_WINK,
128 FTDM_OOB_FLASH,
129 FTDM_OOB_RING_START,
130 FTDM_OOB_RING_STOP,
131 FTDM_OOB_ALARM_TRAP,
132 FTDM_OOB_ALARM_CLEAR,
133 FTDM_OOB_NOOP,
134 FTDM_OOB_CAS_BITS_CHANGE,
135 FTDM_OOB_INVALID
136 } ftdm_oob_event_t;
137 #define OOB_STRINGS "ONHOOK", "OFFHOOK", "WINK", "FLASH", "RING_START", "RING_STOP", "ALARM_TRAP", "ALARM_CLEAR", "NOOP", "CAS_BITS_CHANGE", "INVALID"
138 FTDM_STR2ENUM_P(ftdm_str2ftdm_oob_event, ftdm_oob_event2str, ftdm_oob_event_t)
139
140
141 typedef enum {
142 FTDM_EVENT_NONE,
143
144 FTDM_EVENT_DTMF,
145
146 FTDM_EVENT_OOB,
147 FTDM_EVENT_COUNT
148 } ftdm_event_type_t;
149
150
151 struct ftdm_event {
152 ftdm_event_type_t e_type;
153 uint32_t enum_id;
154 ftdm_channel_t *channel;
155 void *data;
156 };
157
158 typedef enum {
159 FTDM_SIGTYPE_NONE,
160 FTDM_SIGTYPE_ISDN,
161 FTDM_SIGTYPE_RBS,
162 FTDM_SIGTYPE_ANALOG,
163 FTDM_SIGTYPE_SANGOMABOOST,
164 FTDM_SIGTYPE_M3UA,
165 FTDM_SIGTYPE_R2,
166 FTDM_SIGTYPE_SS7
167 } ftdm_signal_type_t;
168
169 typedef enum {
170 FTDM_SPAN_CONFIGURED = (1 << 0),
171 FTDM_SPAN_READY = (1 << 1),
172 FTDM_SPAN_STATE_CHANGE = (1 << 2),
173 FTDM_SPAN_SUSPENDED = (1 << 3),
174 FTDM_SPAN_IN_THREAD = (1 << 4),
175 FTDM_SPAN_STOP_THREAD = (1 << 5),
176 FTDM_SPAN_USE_CHAN_QUEUE = (1 << 6),
177 FTDM_SPAN_SUGGEST_CHAN_ID = (1 << 7),
178 FTDM_SPAN_USE_AV_RATE = (1 << 8),
179
180
181
182 FTDM_SPAN_USE_SIGNALS_QUEUE = (1 << 9),
183 } ftdm_span_flag_t;
184
185
186 typedef enum {
187 FTDM_CHANNEL_FEATURE_DTMF_DETECT = (1 << 0),
188 FTDM_CHANNEL_FEATURE_DTMF_GENERATE = (1 << 1),
189 FTDM_CHANNEL_FEATURE_CODECS = (1 << 2),
190 FTDM_CHANNEL_FEATURE_INTERVAL = (1 << 3),
191 FTDM_CHANNEL_FEATURE_CALLERID = (1 << 4),
192 FTDM_CHANNEL_FEATURE_PROGRESS = (1 << 5),
193 FTDM_CHANNEL_FEATURE_CALLWAITING = (1 << 6),
194 FTDM_CHANNEL_FEATURE_HWEC = (1<<7),
195 FTDM_CHANNEL_FEATURE_HWEC_DISABLED_ON_IDLE = (1<<8),
196 } ftdm_channel_feature_t;
197
198 typedef enum {
199 FTDM_CHANNEL_STATE_DOWN,
200 FTDM_CHANNEL_STATE_HOLD,
201 FTDM_CHANNEL_STATE_SUSPENDED,
202 FTDM_CHANNEL_STATE_DIALTONE,
203 FTDM_CHANNEL_STATE_COLLECT,
204 FTDM_CHANNEL_STATE_RING,
205 FTDM_CHANNEL_STATE_BUSY,
206 FTDM_CHANNEL_STATE_ATTN,
207 FTDM_CHANNEL_STATE_GENRING,
208 FTDM_CHANNEL_STATE_DIALING,
209 FTDM_CHANNEL_STATE_GET_CALLERID,
210 FTDM_CHANNEL_STATE_CALLWAITING,
211 FTDM_CHANNEL_STATE_RESTART,
212 FTDM_CHANNEL_STATE_PROGRESS,
213 FTDM_CHANNEL_STATE_PROGRESS_MEDIA,
214 FTDM_CHANNEL_STATE_UP,
215 FTDM_CHANNEL_STATE_IDLE,
216 FTDM_CHANNEL_STATE_TERMINATING,
217 FTDM_CHANNEL_STATE_CANCEL,
218 FTDM_CHANNEL_STATE_HANGUP,
219 FTDM_CHANNEL_STATE_HANGUP_COMPLETE,
220 FTDM_CHANNEL_STATE_IN_LOOP,
221 FTDM_CHANNEL_STATE_INVALID
222 } ftdm_channel_state_t;
223 #define CHANNEL_STATE_STRINGS "DOWN", "HOLD", "SUSPENDED", "DIALTONE", "COLLECT", \
224 "RING", "BUSY", "ATTN", "GENRING", "DIALING", "GET_CALLERID", "CALLWAITING", \
225 "RESTART", "PROGRESS", "PROGRESS_MEDIA", "UP", "IDLE", "TERMINATING", "CANCEL", \
226 "HANGUP", "HANGUP_COMPLETE", "IN_LOOP", "INVALID"
227 FTDM_STR2ENUM_P(ftdm_str2ftdm_channel_state, ftdm_channel_state2str, ftdm_channel_state_t)
228
229 typedef enum {
230 FTDM_CHANNEL_CONFIGURED = (1 << 0),
231 FTDM_CHANNEL_READY = (1 << 1),
232 FTDM_CHANNEL_OPEN = (1 << 2),
233 FTDM_CHANNEL_DTMF_DETECT = (1 << 3),
234 FTDM_CHANNEL_SUPRESS_DTMF = (1 << 4),
235 FTDM_CHANNEL_TRANSCODE = (1 << 5),
236 FTDM_CHANNEL_BUFFER = (1 << 6),
237 FTDM_CHANNEL_EVENT = (1 << 7),
238 FTDM_CHANNEL_INTHREAD = (1 << 8),
239 FTDM_CHANNEL_WINK = (1 << 9),
240 FTDM_CHANNEL_FLASH = (1 << 10),
241 FTDM_CHANNEL_STATE_CHANGE = (1 << 11),
242 FTDM_CHANNEL_HOLD = (1 << 12),
243 FTDM_CHANNEL_INUSE = (1 << 13),
244 FTDM_CHANNEL_OFFHOOK = (1 << 14),
245 FTDM_CHANNEL_RINGING = (1 << 15),
246 FTDM_CHANNEL_PROGRESS_DETECT = (1 << 16),
247 FTDM_CHANNEL_CALLERID_DETECT = (1 << 17),
248 FTDM_CHANNEL_OUTBOUND = (1 << 18),
249 FTDM_CHANNEL_SUSPENDED = (1 << 19),
250 FTDM_CHANNEL_3WAY = (1 << 20),
251 FTDM_CHANNEL_PROGRESS = (1 << 21),
252 FTDM_CHANNEL_MEDIA = (1 << 22),
253 FTDM_CHANNEL_ANSWERED = (1 << 23),
254 FTDM_CHANNEL_MUTE = (1 << 24),
255 FTDM_CHANNEL_USE_RX_GAIN = (1 << 25),
256 FTDM_CHANNEL_USE_TX_GAIN = (1 << 26),
257 FTDM_CHANNEL_IN_ALARM = (1 << 27),
258 FTDM_CHANNEL_SIG_UP = (1 << 28),
259 FTDM_CHANNEL_USER_HANGUP = (1 << 29),
260 } ftdm_channel_flag_t;
261 #if defined(__cplusplus) && defined(WIN32)
262
263 __inline__ ftdm_channel_flag_t operator|=(ftdm_channel_flag_t a, int32_t b) {
264 a = (ftdm_channel_flag_t)(a | b);
265 return a;
266 }
267 __inline__ ftdm_channel_flag_t operator&=(ftdm_channel_flag_t a, int32_t b) {
268 a = (ftdm_channel_flag_t)(a & b);
269 return a;
270 }
271 #endif
272
273 typedef enum {
274 ZSM_NONE,
275 ZSM_UNACCEPTABLE,
276 ZSM_ACCEPTABLE
277 } ftdm_state_map_type_t;
278
279 typedef enum {
280 ZSD_INBOUND,
281 ZSD_OUTBOUND,
282 } ftdm_state_direction_t;
283
284 #define FTDM_MAP_NODE_SIZE 512
285 #define FTDM_MAP_MAX FTDM_CHANNEL_STATE_INVALID+2
286
287 struct ftdm_state_map_node {
288 ftdm_state_direction_t direction;
289 ftdm_state_map_type_t type;
290 ftdm_channel_state_t check_states[FTDM_MAP_MAX];
291 ftdm_channel_state_t states[FTDM_MAP_MAX];
292 };
293 typedef struct ftdm_state_map_node ftdm_state_map_node_t;
294
295 struct ftdm_state_map {
296 ftdm_state_map_node_t nodes[FTDM_MAP_NODE_SIZE];
297 };
298 typedef struct ftdm_state_map ftdm_state_map_t;
299
300 typedef enum ftdm_channel_hw_link_status {
301 FTDM_HW_LINK_DISCONNECTED = 0,
302 FTDM_HW_LINK_CONNECTED
303 } ftdm_channel_hw_link_status_t;
304
305 typedef ftdm_status_t (*ftdm_stream_handle_raw_write_function_t) (ftdm_stream_handle_t *handle, uint8_t *data, ftdm_size_t datalen);
306 typedef ftdm_status_t (*ftdm_stream_handle_write_function_t) (ftdm_stream_handle_t *handle, const char *fmt, ...);
307
308 #include "ftdm_dso.h"
309
310 #define FTDM_NODE_NAME_SIZE 50
311 struct ftdm_conf_node {
312
313 char name[FTDM_NODE_NAME_SIZE];
314
315
316 unsigned int t_parameters;
317
318
319 unsigned int n_parameters;
320
321
322 ftdm_conf_parameter_t *parameters;
323
324
325 struct ftdm_conf_node *child;
326
327
328 struct ftdm_conf_node *last;
329
330
331 struct ftdm_conf_node *next;
332
333
334 struct ftdm_conf_node *prev;
335
336
337 struct ftdm_conf_node *parent;
338 };
339
340 typedef struct ftdm_module {
341 char name[256];
342 fio_io_load_t io_load;
343 fio_io_unload_t io_unload;
344 fio_sig_load_t sig_load;
345 fio_sig_configure_t sig_configure;
346 fio_sig_unload_t sig_unload;
347
348
349
350
351
352
353
354
355 fio_configure_span_signaling_t configure_span_signaling;
356 ftdm_dso_lib_t lib;
357 char path[256];
358 } ftdm_module_t;
359
360 #ifndef __FUNCTION__
361 #define __FUNCTION__ (const char *)__func__
362 #endif
363
364 typedef struct ftdm_fsk_data_state ftdm_fsk_data_state_t;
365 typedef int (*ftdm_fsk_data_decoder_t)(ftdm_fsk_data_state_t *state);
366 typedef ftdm_status_t (*ftdm_fsk_write_sample_t)(int16_t *buf, ftdm_size_t buflen, void *user_data);
367 typedef struct hashtable ftdm_hash_t;
368 typedef struct hashtable_iterator ftdm_hash_iterator_t;
369 typedef struct key ftdm_hash_key_t;
370 typedef struct value ftdm_hash_val_t;
371 typedef struct ftdm_bitstream ftdm_bitstream_t;
372 typedef struct ftdm_fsk_modulator ftdm_fsk_modulator_t;
373 typedef ftdm_status_t (*ftdm_span_start_t)(ftdm_span_t *span);
374 typedef ftdm_status_t (*ftdm_span_stop_t)(ftdm_span_t *span);
375 typedef ftdm_status_t (*ftdm_channel_sig_read_t)(ftdm_channel_t *ftdmchan, void *data, ftdm_size_t size);
376
377 typedef enum {
378 FTDM_ITERATOR_VARS = 1,
379 FTDM_ITERATOR_CHANS,
380 } ftdm_iterator_type_t;
381
382 struct ftdm_iterator {
383 ftdm_iterator_type_t type;
384 unsigned int allocated:1;
385 union {
386 struct {
387 uint32_t index;
388 const ftdm_span_t *span;
389 } chaniter;
390 ftdm_hash_iterator_t *hashiter;
391 } pvt;
392 };
393
394 #ifdef __cplusplus
395 }
396 #endif
397
398 #endif
399
400
401
402
403
404
405
406
407
408
409
410