This source file includes following definitions.
- FTDM_STR2ENUM_P
- FTDM_STR2ENUM_P
- FTDM_STR2ENUM_P
- FTDM_STR2ENUM_P
- FTDM_STR2ENUM_P
- FTDM_STR2ENUM_P
- FTDM_STR2ENUM_P
- FTDM_STR2ENUM_P
- 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 FREETDM_H
40 #define FREETDM_H
41
42
43 #include "ftdm_declare.h"
44 #include "ftdm_call_utils.h"
45
46
47 #define FTDM_MAX_CHANNELS_PHYSICAL_SPAN 32
48
49
50 #define FTDM_MAX_PHYSICAL_SPANS_PER_LOGICAL_SPAN 32
51
52
53 #define FTDM_MAX_CHANNELS_SPAN FTDM_MAX_CHANNELS_PHYSICAL_SPAN * FTDM_MAX_PHYSICAL_SPANS_PER_LOGICAL_SPAN
54
55
56 #define FTDM_MAX_SPANS_INTERFACE 128
57
58
59 #define FTDM_MAX_CHANNELS_GROUP 1024
60
61
62 #define FTDM_MAX_GROUPS_INTERFACE FTDM_MAX_SPANS_INTERFACE
63
64 #define FTDM_INVALID_INT_PARM 0xFF
65
66
67 #include "ftdm_os.h"
68
69 #ifdef __cplusplus
70 extern "C" {
71 #endif
72
73
74 #define FTDM_MAX_NAME_STR_SZ 80
75
76
77 #define FTDM_MAX_NUMBER_STR_SZ 20
78
79
80 typedef enum {
81 FTDM_CAUSE_NONE = 0,
82 FTDM_CAUSE_UNALLOCATED = 1,
83 FTDM_CAUSE_NO_ROUTE_TRANSIT_NET = 2,
84 FTDM_CAUSE_NO_ROUTE_DESTINATION = 3,
85 FTDM_CAUSE_CHANNEL_UNACCEPTABLE = 6,
86 FTDM_CAUSE_CALL_AWARDED_DELIVERED = 7,
87 FTDM_CAUSE_NORMAL_CLEARING = 16,
88 FTDM_CAUSE_USER_BUSY = 17,
89 FTDM_CAUSE_NO_USER_RESPONSE = 18,
90 FTDM_CAUSE_NO_ANSWER = 19,
91 FTDM_CAUSE_SUBSCRIBER_ABSENT = 20,
92 FTDM_CAUSE_CALL_REJECTED = 21,
93 FTDM_CAUSE_NUMBER_CHANGED = 22,
94 FTDM_CAUSE_REDIRECTION_TO_NEW_DESTINATION = 23,
95 FTDM_CAUSE_EXCHANGE_ROUTING_ERROR = 25,
96 FTDM_CAUSE_DESTINATION_OUT_OF_ORDER = 27,
97 FTDM_CAUSE_INVALID_NUMBER_FORMAT = 28,
98 FTDM_CAUSE_FACILITY_REJECTED = 29,
99 FTDM_CAUSE_RESPONSE_TO_STATUS_ENQUIRY = 30,
100 FTDM_CAUSE_NORMAL_UNSPECIFIED = 31,
101 FTDM_CAUSE_NORMAL_CIRCUIT_CONGESTION = 34,
102 FTDM_CAUSE_NETWORK_OUT_OF_ORDER = 38,
103 FTDM_CAUSE_NORMAL_TEMPORARY_FAILURE = 41,
104 FTDM_CAUSE_SWITCH_CONGESTION = 42,
105 FTDM_CAUSE_ACCESS_INFO_DISCARDED = 43,
106 FTDM_CAUSE_REQUESTED_CHAN_UNAVAIL = 44,
107 FTDM_CAUSE_PRE_EMPTED = 45,
108 FTDM_CAUSE_FACILITY_NOT_SUBSCRIBED = 50,
109 FTDM_CAUSE_OUTGOING_CALL_BARRED = 52,
110 FTDM_CAUSE_INCOMING_CALL_BARRED = 54,
111 FTDM_CAUSE_BEARERCAPABILITY_NOTAUTH = 57,
112 FTDM_CAUSE_BEARERCAPABILITY_NOTAVAIL = 58,
113 FTDM_CAUSE_SERVICE_UNAVAILABLE = 63,
114 FTDM_CAUSE_BEARERCAPABILITY_NOTIMPL = 65,
115 FTDM_CAUSE_CHAN_NOT_IMPLEMENTED = 66,
116 FTDM_CAUSE_FACILITY_NOT_IMPLEMENTED = 69,
117 FTDM_CAUSE_SERVICE_NOT_IMPLEMENTED = 79,
118 FTDM_CAUSE_INVALID_CALL_REFERENCE = 81,
119 FTDM_CAUSE_INCOMPATIBLE_DESTINATION = 88,
120 FTDM_CAUSE_INVALID_MSG_UNSPECIFIED = 95,
121 FTDM_CAUSE_MANDATORY_IE_MISSING = 96,
122 FTDM_CAUSE_MESSAGE_TYPE_NONEXIST = 97,
123 FTDM_CAUSE_WRONG_MESSAGE = 98,
124 FTDM_CAUSE_IE_NONEXIST = 99,
125 FTDM_CAUSE_INVALID_IE_CONTENTS = 100,
126 FTDM_CAUSE_WRONG_CALL_STATE = 101,
127 FTDM_CAUSE_RECOVERY_ON_TIMER_EXPIRE = 102,
128 FTDM_CAUSE_MANDATORY_IE_LENGTH_ERROR = 103,
129 FTDM_CAUSE_PROTOCOL_ERROR = 111,
130 FTDM_CAUSE_INTERWORKING = 127,
131 FTDM_CAUSE_SUCCESS = 142,
132 FTDM_CAUSE_ORIGINATOR_CANCEL = 487,
133 FTDM_CAUSE_CRASH = 500,
134 FTDM_CAUSE_SYSTEM_SHUTDOWN = 501,
135 FTDM_CAUSE_LOSE_RACE = 502,
136 FTDM_CAUSE_MANAGER_REQUEST = 503,
137 FTDM_CAUSE_BLIND_TRANSFER = 600,
138 FTDM_CAUSE_ATTENDED_TRANSFER = 601,
139 FTDM_CAUSE_ALLOTTED_TIMEOUT = 602,
140 FTDM_CAUSE_USER_CHALLENGE = 603,
141 FTDM_CAUSE_MEDIA_TIMEOUT = 604
142 } ftdm_call_cause_t;
143
144
145 typedef enum {
146 FTDM_TOP_DOWN,
147 FTDM_BOTTOM_UP,
148 FTDM_RR_DOWN,
149 FTDM_RR_UP,
150 } ftdm_direction_t;
151
152
153 typedef enum {
154 FTDM_CHAN_TYPE_B,
155 FTDM_CHAN_TYPE_DQ921,
156 FTDM_CHAN_TYPE_DQ931,
157 FTDM_CHAN_TYPE_FXS,
158 FTDM_CHAN_TYPE_FXO,
159 FTDM_CHAN_TYPE_EM,
160 FTDM_CHAN_TYPE_CAS,
161 FTDM_CHAN_TYPE_COUNT
162 } ftdm_chan_type_t;
163 #define CHAN_TYPE_STRINGS "B", "DQ921", "DQ931", "FXS", "FXO", "EM", "CAS", "INVALID"
164
165
166
167
168 FTDM_STR2ENUM_P(ftdm_str2ftdm_chan_type, ftdm_chan_type2str, ftdm_chan_type_t)
169
170
171 #define FTDM_IS_VOICE_CHANNEL(ftdm_chan) ((ftdm_chan)->type != FTDM_CHAN_TYPE_DQ921 && (ftdm_chan)->type != FTDM_CHAN_TYPE_DQ931)
172
173
174 #define FTDM_IS_DCHAN(ftdm_chan) ((ftdm_chan)->type == FTDM_CHAN_TYPE_DQ921 || (ftdm_chan)->type == FTDM_CHAN_TYPE_DQ931)
175
176
177
178
179 typedef void (*ftdm_logger_t)(const char *file, const char *func, int line, int level, const char *fmt, ...);
180
181
182
183
184 typedef ftdm_status_t (*ftdm_queue_create_func_t)(ftdm_queue_t **queue, ftdm_size_t capacity);
185 typedef ftdm_status_t (*ftdm_queue_enqueue_func_t)(ftdm_queue_t *queue, void *obj);
186 typedef void *(*ftdm_queue_dequeue_func_t)(ftdm_queue_t *queue);
187 typedef ftdm_status_t (*ftdm_queue_wait_func_t)(ftdm_queue_t *queue, int ms);
188 typedef ftdm_status_t (*ftdm_queue_get_interrupt_func_t)(ftdm_queue_t *queue, ftdm_interrupt_t **interrupt);
189 typedef ftdm_status_t (*ftdm_queue_destroy_func_t)(ftdm_queue_t **queue);
190 typedef struct ftdm_queue_handler {
191 ftdm_queue_create_func_t create;
192 ftdm_queue_enqueue_func_t enqueue;
193 ftdm_queue_dequeue_func_t dequeue;
194 ftdm_queue_wait_func_t wait;
195 ftdm_queue_get_interrupt_func_t get_interrupt;
196 ftdm_queue_destroy_func_t destroy;
197 } ftdm_queue_handler_t;
198
199
200
201 typedef enum {
202 FTDM_TON_UNKNOWN = 0,
203 FTDM_TON_INTERNATIONAL,
204 FTDM_TON_NATIONAL,
205 FTDM_TON_NETWORK_SPECIFIC,
206 FTDM_TON_SUBSCRIBER_NUMBER,
207 FTDM_TON_ABBREVIATED_NUMBER,
208 FTDM_TON_RESERVED,
209 FTDM_TON_INVALID
210 } ftdm_ton_t;
211 #define TON_STRINGS "unknown", "international", "national", "network-specific", "subscriber-number", "abbreviated-number", "reserved", "invalid"
212 FTDM_STR2ENUM_P(ftdm_str2ftdm_ton, ftdm_ton2str, ftdm_ton_t)
213
214
215 typedef enum {
216 FTDM_NPI_UNKNOWN = 0,
217 FTDM_NPI_ISDN = 1,
218 FTDM_NPI_DATA = 3,
219 FTDM_NPI_TELEX = 4,
220 FTDM_NPI_NATIONAL = 8,
221 FTDM_NPI_PRIVATE = 9,
222 FTDM_NPI_RESERVED = 10,
223 FTDM_NPI_INVALID
224 } ftdm_npi_t;
225 #define NPI_STRINGS "unknown", "ISDN", "data", "telex", "national", "private", "reserved", "invalid"
226 FTDM_STR2ENUM_P(ftdm_str2ftdm_npi, ftdm_npi2str, ftdm_npi_t)
227
228
229 typedef enum {
230 FTDM_PRES_ALLOWED,
231 FTDM_PRES_RESTRICTED,
232 FTDM_PRES_NOT_AVAILABLE,
233 FTDM_PRES_RESERVED,
234 FTDM_PRES_INVALID
235 } ftdm_presentation_t;
236 #define PRESENTATION_STRINGS "presentation-allowed", "presentation-restricted", "number-not-available", "reserved", "Invalid"
237 FTDM_STR2ENUM_P(ftdm_str2ftdm_presentation, ftdm_presentation2str, ftdm_presentation_t)
238
239
240 typedef enum {
241 FTDM_SCREENING_NOT_SCREENED,
242 FTDM_SCREENING_VERIFIED_PASSED,
243 FTDM_SCREENING_VERIFIED_FAILED,
244 FTDM_SCREENING_NETWORK_PROVIDED,
245 FTDM_SCREENING_INVALID
246 } ftdm_screening_t;
247 #define SCREENING_STRINGS "user-provided-not-screened", "user-provided-verified-and-passed", "user-provided-verified-and-failed", "network-provided", "invalid"
248 FTDM_STR2ENUM_P(ftdm_str2ftdm_screening, ftdm_screening2str, ftdm_screening_t)
249
250
251 typedef enum {
252 FTDM_BEARER_CAP_SPEECH = 0x00,
253 FTDM_BEARER_CAP_64K_UNRESTRICTED = 0x02,
254 FTDM_BEARER_CAP_3_1KHZ_AUDIO = 0x03,
255 FTDM_BEARER_CAP_INVALID
256 } ftdm_bearer_cap_t;
257 #define BEARER_CAP_STRINGS "speech", "unrestricted-digital-information", "3.1-Khz-audio", "invalid"
258 FTDM_STR2ENUM_P(ftdm_str2ftdm_bearer_cap, ftdm_bearer_cap2str, ftdm_bearer_cap_t)
259
260
261 typedef enum {
262 FTDM_USER_LAYER1_PROT_V110 = 0x01,
263 FTDM_USER_LAYER1_PROT_ULAW = 0x02,
264 FTDM_USER_LAYER1_PROT_ALAW = 0x03,
265 FTDM_USER_LAYER1_PROT_INVALID
266 } ftdm_user_layer1_prot_t;
267 #define USER_LAYER1_PROT_STRINGS "V.110", "u-law", "a-law", "Invalid"
268 FTDM_STR2ENUM_P(ftdm_str2ftdm_usr_layer1_prot, ftdm_user_layer1_prot2str, ftdm_user_layer1_prot_t)
269
270
271 typedef enum {
272 FTDM_CPC_UNKNOWN,
273 FTDM_CPC_OPERATOR,
274 FTDM_CPC_ORDINARY,
275 FTDM_CPC_PRIORITY,
276 FTDM_CPC_DATA,
277 FTDM_CPC_TEST,
278 FTDM_CPC_PAYPHONE,
279 FTDM_CPC_INVALID
280 } ftdm_calling_party_category_t;
281 #define CALLING_PARTY_CATEGORY_STRINGS "unknown", "operator", "ordinary", "priority", "data-call", "test-call", "payphone", "invalid"
282 FTDM_STR2ENUM_P(ftdm_str2ftdm_calling_party_category, ftdm_calling_party_category2str, ftdm_calling_party_category_t)
283
284
285 #define FTDM_DIGITS_LIMIT 25
286
287
288 typedef struct {
289 char digits[FTDM_DIGITS_LIMIT];
290 uint8_t type;
291 uint8_t plan;
292 } ftdm_number_t;
293
294 typedef void * ftdm_variable_container_t;
295
296
297 typedef struct ftdm_caller_data {
298 char cid_date[8];
299 char cid_name[80];
300 ftdm_number_t cid_num;
301 ftdm_number_t ani;
302 ftdm_number_t dnis;
303 ftdm_number_t rdnis;
304 char aniII[FTDM_DIGITS_LIMIT];
305 uint8_t screen;
306 uint8_t pres;
307 char collected[FTDM_DIGITS_LIMIT];
308 int hangup_cause;
309 char raw_data[1024];
310 uint32_t raw_data_len;
311
312
313 ftdm_bearer_cap_t bearer_capability;
314
315 ftdm_user_layer1_prot_t bearer_layer1;
316 ftdm_calling_party_category_t cpc;
317 ftdm_variable_container_t variables;
318
319
320
321
322 uint32_t call_id;
323 ftdm_channel_t *fchan;
324 void *priv;
325 } ftdm_caller_data_t;
326
327
328 typedef enum {
329 FTDM_HUNT_SPAN,
330 FTDM_HUNT_GROUP,
331 FTDM_HUNT_CHAN,
332 } ftdm_hunt_mode_t;
333
334
335 typedef struct {
336 uint32_t span_id;
337 ftdm_direction_t direction;
338 } ftdm_span_hunt_t;
339
340
341 typedef struct {
342 uint32_t group_id;
343 ftdm_direction_t direction;
344 } ftdm_group_hunt_t;
345
346
347 typedef struct {
348 uint32_t span_id;
349 uint32_t chan_id;
350 } ftdm_chan_hunt_t;
351
352
353
354
355
356
357
358
359
360
361 typedef ftdm_status_t (*ftdm_hunt_result_cb_t)(ftdm_channel_t *fchan, ftdm_caller_data_t *caller_data);
362
363
364 typedef struct {
365 ftdm_hunt_mode_t mode;
366 union {
367 ftdm_span_hunt_t span;
368 ftdm_group_hunt_t group;
369 ftdm_chan_hunt_t chan;
370 } mode_data;
371 ftdm_hunt_result_cb_t result_cb;
372 } ftdm_hunting_scheme_t;
373
374
375
376 typedef enum {
377 FTDM_TONE_DTMF = (1 << 0)
378 } ftdm_tone_type_t;
379
380
381 typedef enum {
382 FTDM_SIGEVENT_START,
383 FTDM_SIGEVENT_STOP,
384 FTDM_SIGEVENT_RELEASED,
385 FTDM_SIGEVENT_UP,
386 FTDM_SIGEVENT_FLASH,
387 FTDM_SIGEVENT_PROCEED,
388 FTDM_SIGEVENT_RINGING,
389 FTDM_SIGEVENT_PROGRESS,
390 FTDM_SIGEVENT_PROGRESS_MEDIA,
391 FTDM_SIGEVENT_ALARM_TRAP,
392 FTDM_SIGEVENT_ALARM_CLEAR,
393 FTDM_SIGEVENT_COLLECTED_DIGIT,
394 FTDM_SIGEVENT_ADD_CALL,
395 FTDM_SIGEVENT_RESTART,
396 FTDM_SIGEVENT_SIGSTATUS_CHANGED,
397 FTDM_SIGEVENT_COLLISION,
398 FTDM_SIGEVENT_FACILITY,
399 FTDM_SIGEVENT_TRACE,
400 FTDM_SIGEVENT_TRACE_RAW,
401 FTDM_SIGEVENT_INDICATION_COMPLETED,
402 FTDM_SIGEVENT_DIALING,
403 FTDM_SIGEVENT_INVALID,
404 } ftdm_signal_event_t;
405 #define SIGNAL_STRINGS "START", "STOP", "RELEASED", "UP", "FLASH", "PROCEED", "RINGING", "PROGRESS", \
406 "PROGRESS_MEDIA", "ALARM_TRAP", "ALARM_CLEAR", \
407 "COLLECTED_DIGIT", "ADD_CALL", "RESTART", "SIGSTATUS_CHANGED", "COLLISION", "FACILITY", \
408 "TRACE", "TRACE_RAW", "INDICATION_COMPLETED", "DIALING", "INVALID"
409
410 FTDM_STR2ENUM_P(ftdm_str2ftdm_signal_event, ftdm_signal_event2str, ftdm_signal_event_t)
411
412
413 typedef enum {
414 FTDM_TRUNK_E1,
415 FTDM_TRUNK_T1,
416 FTDM_TRUNK_J1,
417 FTDM_TRUNK_BRI,
418 FTDM_TRUNK_BRI_PTMP,
419 FTDM_TRUNK_FXO,
420 FTDM_TRUNK_FXS,
421 FTDM_TRUNK_EM,
422 FTDM_TRUNK_NONE
423 } ftdm_trunk_type_t;
424 #define TRUNK_STRINGS "E1", "T1", "J1", "BRI", "BRI_PTMP", "FXO", "FXS", "EM", "NONE"
425
426
427 FTDM_STR2ENUM_P(ftdm_str2ftdm_trunk_type, ftdm_trunk_type2str, ftdm_trunk_type_t)
428
429
430 typedef struct ftdm_channel_config {
431 char name[FTDM_MAX_NAME_STR_SZ];
432 char number[FTDM_MAX_NUMBER_STR_SZ];
433 char group_name[FTDM_MAX_NAME_STR_SZ];
434 ftdm_chan_type_t type;
435 float rxgain;
436 float txgain;
437 uint8_t debugdtmf;
438 } ftdm_channel_config_t;
439
440
441
442
443
444 typedef enum {
445
446 FTDM_SIG_STATE_DOWN,
447
448 FTDM_SIG_STATE_SUSPENDED,
449
450 FTDM_SIG_STATE_UP,
451
452 FTDM_SIG_STATE_INVALID
453 } ftdm_signaling_status_t;
454 #define SIGSTATUS_STRINGS "DOWN", "SUSPENDED", "UP", "INVALID"
455
456
457 FTDM_STR2ENUM_P(ftdm_str2ftdm_signaling_status, ftdm_signaling_status2str, ftdm_signaling_status_t)
458
459
460 typedef struct {
461 ftdm_signaling_status_t status;
462 } ftdm_event_sigstatus_t;
463
464 typedef enum {
465
466 FTDM_TRACE_DIR_INCOMING,
467
468 FTDM_TRACE_DIR_OUTGOING,
469
470 FTDM_TRACE_DIR_INVALID,
471 } ftdm_trace_dir_t;
472 #define TRACE_DIR_STRINGS "INCOMING", "OUTGOING", "INVALID"
473
474
475 FTDM_STR2ENUM_P(ftdm_str2ftdm_trace_dir, ftdm_trace_dir2str, ftdm_trace_dir_t)
476
477 typedef enum {
478 FTDM_TRACE_TYPE_Q931,
479 FTDM_TRACE_TYPE_Q921,
480 FTDM_TRACE_TYPE_INVALID,
481 } ftdm_trace_type_t;
482 #define TRACE_TYPE_STRINGS "Q931", "Q921", "INVALID"
483
484
485 FTDM_STR2ENUM_P(ftdm_str2ftdm_trace_type, ftdm_trace_type2str, ftdm_trace_type_t)
486
487 typedef struct {
488
489 ftdm_trace_dir_t dir;
490 ftdm_trace_type_t type;
491 } ftdm_event_trace_t;
492
493 typedef struct {
494
495 char digits[FTDM_DIGITS_LIMIT];
496 } ftdm_event_collected_t;
497
498
499
500
501 typedef enum {
502 FTDM_CHANNEL_INDICATE_NONE,
503 FTDM_CHANNEL_INDICATE_RINGING,
504 FTDM_CHANNEL_INDICATE_PROCEED,
505 FTDM_CHANNEL_INDICATE_PROGRESS,
506 FTDM_CHANNEL_INDICATE_PROGRESS_MEDIA,
507 FTDM_CHANNEL_INDICATE_BUSY,
508
509 FTDM_CHANNEL_INDICATE_ANSWER,
510 FTDM_CHANNEL_INDICATE_INVALID,
511 } ftdm_channel_indication_t;
512 #define INDICATION_STRINGS "NONE", "RINGING", "PROCEED", "PROGRESS", "PROGRESS_MEDIA", "BUSY", "ANSWER", "INVALID"
513
514
515 FTDM_STR2ENUM_P(ftdm_str2channel_indication, ftdm_channel_indication2str, ftdm_channel_indication_t)
516
517 typedef struct {
518
519 ftdm_channel_indication_t indication;
520
521 ftdm_status_t status;
522 } ftdm_event_indication_completed_t;
523
524
525 struct ftdm_sigmsg {
526 ftdm_signal_event_t event_id;
527 ftdm_channel_t *channel;
528 uint32_t chan_id;
529 uint32_t span_id;
530 uint32_t call_id;
531 union {
532 ftdm_event_sigstatus_t sigstatus;
533 ftdm_event_trace_t trace;
534 ftdm_event_collected_t collected;
535 ftdm_event_indication_completed_t indication_completed;
536 } ev_data;
537 struct {
538 uint8_t autofree;
539 uint32_t len;
540 void *data;
541 } raw;
542 };
543
544
545
546 typedef enum {
547 FTDM_CRASH_NEVER = 0,
548 FTDM_CRASH_ON_ASSERT
549 } ftdm_crash_policy_t;
550
551
552 typedef enum {
553 FTDM_NO_FLAGS = 0,
554 FTDM_READ = (1 << 0),
555 FTDM_WRITE = (1 << 1),
556 FTDM_EVENTS = (1 << 2)
557 } ftdm_wait_flag_t;
558
559
560 typedef struct ftdm_conf_parameter {
561 const char *var;
562 const char *val;
563 void *ptr;
564 } ftdm_conf_parameter_t;
565
566
567 typedef struct ftdm_iterator ftdm_iterator_t;
568
569
570 typedef enum {
571 FTDM_COMMAND_NOOP,
572 FTDM_COMMAND_SET_INTERVAL,
573 FTDM_COMMAND_GET_INTERVAL,
574 FTDM_COMMAND_SET_CODEC,
575 FTDM_COMMAND_GET_CODEC,
576 FTDM_COMMAND_SET_NATIVE_CODEC,
577 FTDM_COMMAND_GET_NATIVE_CODEC,
578 FTDM_COMMAND_ENABLE_DTMF_DETECT,
579 FTDM_COMMAND_DISABLE_DTMF_DETECT,
580 FTDM_COMMAND_SEND_DTMF,
581 FTDM_COMMAND_SET_DTMF_ON_PERIOD,
582 FTDM_COMMAND_GET_DTMF_ON_PERIOD,
583 FTDM_COMMAND_SET_DTMF_OFF_PERIOD,
584 FTDM_COMMAND_GET_DTMF_OFF_PERIOD,
585 FTDM_COMMAND_GENERATE_RING_ON,
586 FTDM_COMMAND_GENERATE_RING_OFF,
587 FTDM_COMMAND_OFFHOOK,
588 FTDM_COMMAND_ONHOOK,
589 FTDM_COMMAND_FLASH,
590 FTDM_COMMAND_WINK,
591 FTDM_COMMAND_ENABLE_PROGRESS_DETECT,
592 FTDM_COMMAND_DISABLE_PROGRESS_DETECT,
593
594
595 FTDM_COMMAND_TRACE_INPUT,
596 FTDM_COMMAND_TRACE_OUTPUT,
597
598
599 FTDM_COMMAND_TRACE_END_ALL,
600
601
602 FTDM_COMMAND_ENABLE_DEBUG_DTMF,
603
604
605 FTDM_COMMAND_DISABLE_DEBUG_DTMF,
606
607
608 FTDM_COMMAND_ENABLE_INPUT_DUMP,
609
610
611 FTDM_COMMAND_DISABLE_INPUT_DUMP,
612
613
614 FTDM_COMMAND_ENABLE_OUTPUT_DUMP,
615
616
617 FTDM_COMMAND_DISABLE_OUTPUT_DUMP,
618
619
620 FTDM_COMMAND_DUMP_INPUT,
621
622
623 FTDM_COMMAND_DUMP_OUTPUT,
624
625 FTDM_COMMAND_ENABLE_CALLERID_DETECT,
626 FTDM_COMMAND_DISABLE_CALLERID_DETECT,
627 FTDM_COMMAND_ENABLE_ECHOCANCEL,
628 FTDM_COMMAND_DISABLE_ECHOCANCEL,
629 FTDM_COMMAND_ENABLE_ECHOTRAIN,
630 FTDM_COMMAND_DISABLE_ECHOTRAIN,
631 FTDM_COMMAND_SET_CAS_BITS,
632 FTDM_COMMAND_GET_CAS_BITS,
633 FTDM_COMMAND_SET_RX_GAIN,
634 FTDM_COMMAND_GET_RX_GAIN,
635 FTDM_COMMAND_SET_TX_GAIN,
636 FTDM_COMMAND_GET_TX_GAIN,
637 FTDM_COMMAND_FLUSH_TX_BUFFERS,
638 FTDM_COMMAND_FLUSH_RX_BUFFERS,
639 FTDM_COMMAND_FLUSH_BUFFERS,
640 FTDM_COMMAND_FLUSH_IOSTATS,
641 FTDM_COMMAND_SET_PRE_BUFFER_SIZE,
642 FTDM_COMMAND_SET_LINK_STATUS,
643 FTDM_COMMAND_GET_LINK_STATUS,
644 FTDM_COMMAND_ENABLE_LOOP,
645 FTDM_COMMAND_DISABLE_LOOP,
646 FTDM_COMMAND_SET_RX_QUEUE_SIZE,
647 FTDM_COMMAND_SET_TX_QUEUE_SIZE,
648 FTDM_COMMAND_SET_POLARITY,
649 FTDM_COMMAND_COUNT,
650 } ftdm_command_t;
651
652 typedef enum {
653 FTDM_POLARITY_FORWARD = 0,
654 FTDM_POLARITY_REVERSE = 1
655 } ftdm_polarity_t;
656
657
658 typedef void *(*ftdm_malloc_func_t)(void *pool, ftdm_size_t len);
659 typedef void *(*ftdm_calloc_func_t)(void *pool, ftdm_size_t elements, ftdm_size_t len);
660 typedef void *(*ftdm_realloc_func_t)(void *pool, void *buff, ftdm_size_t len);
661 typedef void (*ftdm_free_func_t)(void *pool, void *ptr);
662 struct ftdm_memory_handler {
663 void *pool;
664 ftdm_malloc_func_t malloc;
665 ftdm_calloc_func_t calloc;
666 ftdm_realloc_func_t realloc;
667 ftdm_free_func_t free;
668 };
669
670
671
672 #define FIO_CHANNEL_REQUEST_ARGS (ftdm_span_t *span, uint32_t chan_id, ftdm_direction_t direction, ftdm_caller_data_t *caller_data, ftdm_channel_t **ftdmchan)
673 #define FIO_CHANNEL_OUTGOING_CALL_ARGS (ftdm_channel_t *ftdmchan)
674 #define FIO_CHANNEL_SEND_MSG_ARGS (ftdm_channel_t *ftdmchan, ftdm_sigmsg_t *sigmsg)
675 #define FIO_CHANNEL_SET_SIG_STATUS_ARGS (ftdm_channel_t *ftdmchan, ftdm_signaling_status_t status)
676 #define FIO_CHANNEL_GET_SIG_STATUS_ARGS (ftdm_channel_t *ftdmchan, ftdm_signaling_status_t *status)
677 #define FIO_SPAN_SET_SIG_STATUS_ARGS (ftdm_span_t *span, ftdm_signaling_status_t status)
678 #define FIO_SPAN_GET_SIG_STATUS_ARGS (ftdm_span_t *span, ftdm_signaling_status_t *status)
679 #define FIO_SPAN_POLL_EVENT_ARGS (ftdm_span_t *span, uint32_t ms, short *poll_events)
680 #define FIO_SPAN_NEXT_EVENT_ARGS (ftdm_span_t *span, ftdm_event_t **event)
681 #define FIO_CHANNEL_NEXT_EVENT_ARGS (ftdm_channel_t *ftdmchan, ftdm_event_t **event)
682 #define FIO_SIGNAL_CB_ARGS (ftdm_sigmsg_t *sigmsg)
683 #define FIO_EVENT_CB_ARGS (ftdm_channel_t *ftdmchan, ftdm_event_t *event)
684 #define FIO_CONFIGURE_SPAN_ARGS (ftdm_span_t *span, const char *str, ftdm_chan_type_t type, char *name, char *number)
685 #define FIO_CONFIGURE_ARGS (const char *category, const char *var, const char *val, int lineno)
686 #define FIO_OPEN_ARGS (ftdm_channel_t *ftdmchan)
687 #define FIO_CLOSE_ARGS (ftdm_channel_t *ftdmchan)
688 #define FIO_CHANNEL_DESTROY_ARGS (ftdm_channel_t *ftdmchan)
689 #define FIO_SPAN_DESTROY_ARGS (ftdm_span_t *span)
690 #define FIO_COMMAND_ARGS (ftdm_channel_t *ftdmchan, ftdm_command_t command, void *obj)
691 #define FIO_WAIT_ARGS (ftdm_channel_t *ftdmchan, ftdm_wait_flag_t *flags, int32_t to)
692 #define FIO_GET_ALARMS_ARGS (ftdm_channel_t *ftdmchan)
693 #define FIO_READ_ARGS (ftdm_channel_t *ftdmchan, void *data, ftdm_size_t *datalen)
694 #define FIO_WRITE_ARGS (ftdm_channel_t *ftdmchan, void *data, ftdm_size_t *datalen)
695 #define FIO_IO_LOAD_ARGS (ftdm_io_interface_t **fio)
696 #define FIO_IO_UNLOAD_ARGS (void)
697 #define FIO_SIG_LOAD_ARGS (void)
698 #define FIO_SIG_CONFIGURE_ARGS (ftdm_span_t *span, fio_signal_cb_t sig_cb, va_list ap)
699 #define FIO_CONFIGURE_SPAN_SIGNALING_ARGS (ftdm_span_t *span, fio_signal_cb_t sig_cb, ftdm_conf_parameter_t *ftdm_parameters)
700 #define FIO_SIG_UNLOAD_ARGS (void)
701 #define FIO_API_ARGS (ftdm_stream_handle_t *stream, const char *data)
702
703
704
705 typedef ftdm_status_t (*fio_channel_request_t) FIO_CHANNEL_REQUEST_ARGS ;
706 typedef ftdm_status_t (*fio_channel_outgoing_call_t) FIO_CHANNEL_OUTGOING_CALL_ARGS ;
707 typedef ftdm_status_t (*fio_channel_send_msg_t) FIO_CHANNEL_SEND_MSG_ARGS;
708 typedef ftdm_status_t (*fio_channel_set_sig_status_t) FIO_CHANNEL_SET_SIG_STATUS_ARGS;
709 typedef ftdm_status_t (*fio_channel_get_sig_status_t) FIO_CHANNEL_GET_SIG_STATUS_ARGS;
710 typedef ftdm_status_t (*fio_span_set_sig_status_t) FIO_SPAN_SET_SIG_STATUS_ARGS;
711 typedef ftdm_status_t (*fio_span_get_sig_status_t) FIO_SPAN_GET_SIG_STATUS_ARGS;
712 typedef ftdm_status_t (*fio_span_poll_event_t) FIO_SPAN_POLL_EVENT_ARGS ;
713 typedef ftdm_status_t (*fio_span_next_event_t) FIO_SPAN_NEXT_EVENT_ARGS ;
714 typedef ftdm_status_t (*fio_channel_next_event_t) FIO_CHANNEL_NEXT_EVENT_ARGS ;
715
716
717
718
719
720
721
722
723
724
725
726
727 typedef ftdm_status_t (*fio_signal_cb_t) FIO_SIGNAL_CB_ARGS ;
728
729 typedef ftdm_status_t (*fio_event_cb_t) FIO_EVENT_CB_ARGS ;
730 typedef ftdm_status_t (*fio_configure_span_t) FIO_CONFIGURE_SPAN_ARGS ;
731 typedef ftdm_status_t (*fio_configure_t) FIO_CONFIGURE_ARGS ;
732 typedef ftdm_status_t (*fio_open_t) FIO_OPEN_ARGS ;
733 typedef ftdm_status_t (*fio_close_t) FIO_CLOSE_ARGS ;
734 typedef ftdm_status_t (*fio_channel_destroy_t) FIO_CHANNEL_DESTROY_ARGS ;
735 typedef ftdm_status_t (*fio_span_destroy_t) FIO_SPAN_DESTROY_ARGS ;
736 typedef ftdm_status_t (*fio_get_alarms_t) FIO_GET_ALARMS_ARGS ;
737 typedef ftdm_status_t (*fio_command_t) FIO_COMMAND_ARGS ;
738 typedef ftdm_status_t (*fio_wait_t) FIO_WAIT_ARGS ;
739 typedef ftdm_status_t (*fio_read_t) FIO_READ_ARGS ;
740 typedef ftdm_status_t (*fio_write_t) FIO_WRITE_ARGS ;
741 typedef ftdm_status_t (*fio_io_load_t) FIO_IO_LOAD_ARGS ;
742 typedef ftdm_status_t (*fio_sig_load_t) FIO_SIG_LOAD_ARGS ;
743 typedef ftdm_status_t (*fio_sig_configure_t) FIO_SIG_CONFIGURE_ARGS ;
744 typedef ftdm_status_t (*fio_configure_span_signaling_t) FIO_CONFIGURE_SPAN_SIGNALING_ARGS ;
745 typedef ftdm_status_t (*fio_io_unload_t) FIO_IO_UNLOAD_ARGS ;
746 typedef ftdm_status_t (*fio_sig_unload_t) FIO_SIG_UNLOAD_ARGS ;
747 typedef ftdm_status_t (*fio_api_t) FIO_API_ARGS ;
748
749
750
751
752 #define FIO_CHANNEL_REQUEST_FUNCTION(name) ftdm_status_t name FIO_CHANNEL_REQUEST_ARGS
753 #define FIO_CHANNEL_OUTGOING_CALL_FUNCTION(name) ftdm_status_t name FIO_CHANNEL_OUTGOING_CALL_ARGS
754 #define FIO_CHANNEL_SEND_MSG_FUNCTION(name) ftdm_status_t name FIO_CHANNEL_SEND_MSG_ARGS
755 #define FIO_CHANNEL_SET_SIG_STATUS_FUNCTION(name) ftdm_status_t name FIO_CHANNEL_SET_SIG_STATUS_ARGS
756 #define FIO_CHANNEL_GET_SIG_STATUS_FUNCTION(name) ftdm_status_t name FIO_CHANNEL_GET_SIG_STATUS_ARGS
757 #define FIO_SPAN_SET_SIG_STATUS_FUNCTION(name) ftdm_status_t name FIO_SPAN_SET_SIG_STATUS_ARGS
758 #define FIO_SPAN_GET_SIG_STATUS_FUNCTION(name) ftdm_status_t name FIO_SPAN_GET_SIG_STATUS_ARGS
759 #define FIO_SPAN_POLL_EVENT_FUNCTION(name) ftdm_status_t name FIO_SPAN_POLL_EVENT_ARGS
760 #define FIO_SPAN_NEXT_EVENT_FUNCTION(name) ftdm_status_t name FIO_SPAN_NEXT_EVENT_ARGS
761 #define FIO_CHANNEL_NEXT_EVENT_FUNCTION(name) ftdm_status_t name FIO_CHANNEL_NEXT_EVENT_ARGS
762 #define FIO_SIGNAL_CB_FUNCTION(name) ftdm_status_t name FIO_SIGNAL_CB_ARGS
763 #define FIO_EVENT_CB_FUNCTION(name) ftdm_status_t name FIO_EVENT_CB_ARGS
764 #define FIO_CONFIGURE_SPAN_FUNCTION(name) ftdm_status_t name FIO_CONFIGURE_SPAN_ARGS
765 #define FIO_CONFIGURE_FUNCTION(name) ftdm_status_t name FIO_CONFIGURE_ARGS
766 #define FIO_OPEN_FUNCTION(name) ftdm_status_t name FIO_OPEN_ARGS
767 #define FIO_CLOSE_FUNCTION(name) ftdm_status_t name FIO_CLOSE_ARGS
768 #define FIO_CHANNEL_DESTROY_FUNCTION(name) ftdm_status_t name FIO_CHANNEL_DESTROY_ARGS
769 #define FIO_SPAN_DESTROY_FUNCTION(name) ftdm_status_t name FIO_SPAN_DESTROY_ARGS
770 #define FIO_GET_ALARMS_FUNCTION(name) ftdm_status_t name FIO_GET_ALARMS_ARGS
771 #define FIO_COMMAND_FUNCTION(name) ftdm_status_t name FIO_COMMAND_ARGS
772 #define FIO_WAIT_FUNCTION(name) ftdm_status_t name FIO_WAIT_ARGS
773 #define FIO_READ_FUNCTION(name) ftdm_status_t name FIO_READ_ARGS
774 #define FIO_WRITE_FUNCTION(name) ftdm_status_t name FIO_WRITE_ARGS
775 #define FIO_IO_LOAD_FUNCTION(name) ftdm_status_t name FIO_IO_LOAD_ARGS
776 #define FIO_SIG_LOAD_FUNCTION(name) ftdm_status_t name FIO_SIG_LOAD_ARGS
777 #define FIO_SIG_CONFIGURE_FUNCTION(name) ftdm_status_t name FIO_SIG_CONFIGURE_ARGS
778 #define FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(name) ftdm_status_t name FIO_CONFIGURE_SPAN_SIGNALING_ARGS
779 #define FIO_IO_UNLOAD_FUNCTION(name) ftdm_status_t name FIO_IO_UNLOAD_ARGS
780 #define FIO_SIG_UNLOAD_FUNCTION(name) ftdm_status_t name FIO_SIG_UNLOAD_ARGS
781 #define FIO_API_FUNCTION(name) ftdm_status_t name FIO_API_ARGS
782
783
784
785 struct ftdm_io_interface {
786 const char *name;
787 fio_configure_span_t configure_span;
788 fio_configure_t configure;
789 fio_open_t open;
790 fio_close_t close;
791 fio_channel_destroy_t channel_destroy;
792 fio_span_destroy_t span_destroy;
793 fio_get_alarms_t get_alarms;
794 fio_command_t command;
795 fio_wait_t wait;
796 fio_read_t read;
797 fio_write_t write;
798 fio_span_poll_event_t poll_event;
799 fio_span_next_event_t next_event;
800 fio_channel_next_event_t channel_next_event;
801 fio_api_t api;
802 };
803
804
805 typedef enum {
806 FTDM_CODEC_ULAW = 0,
807 FTDM_CODEC_ALAW = 8,
808 FTDM_CODEC_SLIN = 10,
809 FTDM_CODEC_NONE = (1 << 30)
810 } ftdm_codec_t;
811
812
813 typedef enum {
814 FTDM_ALARM_NONE = 0,
815 FTDM_ALARM_RED = (1 << 1),
816 FTDM_ALARM_YELLOW = (1 << 2),
817 FTDM_ALARM_RAI = (1 << 3),
818 FTDM_ALARM_BLUE = (1 << 4),
819 FTDM_ALARM_AIS = (1 << 5),
820 FTDM_ALARM_GENERAL = (1 << 30)
821 } ftdm_alarm_flag_t;
822
823
824 FT_DECLARE(ftdm_status_t) ftdm_global_set_queue_handler(ftdm_queue_handler_t *handler);
825
826
827
828
829
830
831
832 FT_DECLARE(int) ftdm_channel_get_availability(ftdm_channel_t *ftdmchan);
833
834
835
836
837
838
839
840
841
842 #define ftdm_channel_call_answer(ftdmchan) _ftdm_channel_call_answer(__FILE__, __FUNCTION__, __LINE__, (ftdmchan))
843
844
845 FT_DECLARE(ftdm_status_t) _ftdm_channel_call_answer(const char *file, const char *func, int line, ftdm_channel_t *ftdmchan);
846
847
848
849
850 #define ftdm_channel_call_place(ftdmchan) _ftdm_channel_call_place(__FILE__, __FUNCTION__, __LINE__, (ftdmchan))
851
852
853
854
855 FT_DECLARE(ftdm_status_t) _ftdm_channel_call_place(const char *file, const char *func, int line, ftdm_channel_t *ftdmchan);
856
857
858 #define ftdm_call_place(callerdata, hunting) _ftdm_call_place(__FILE__, __FUNCTION__, __LINE__, (callerdata), (hunting))
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875 FT_DECLARE(ftdm_status_t) _ftdm_call_place(const char *file, const char *func, int line, ftdm_caller_data_t *caller_data, ftdm_hunting_scheme_t *hunting);
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890 #define ftdm_channel_call_indicate(ftdmchan, indication) _ftdm_channel_call_indicate(__FILE__, __FUNCTION__, __LINE__, (ftdmchan), (indication))
891
892
893 FT_DECLARE(ftdm_status_t) _ftdm_channel_call_indicate(const char *file, const char *func, int line, ftdm_channel_t *ftdmchan, ftdm_channel_indication_t indication);
894
895
896 #define ftdm_channel_call_send_msg(ftdmchan, sigmsg) _ftdm_channel_call_send_msg(__FILE__, __FUNCTION__, __LINE__, (ftdmchan), (sigmsg))
897
898
899 FT_DECLARE(ftdm_status_t) _ftdm_channel_call_send_msg(const char *file, const char *func, int line, ftdm_channel_t *ftdmchan, ftdm_sigmsg_t *sigmsg);
900
901
902 #define ftdm_channel_call_hangup(ftdmchan) _ftdm_channel_call_hangup(__FILE__, __FUNCTION__, __LINE__, (ftdmchan))
903
904
905 FT_DECLARE(ftdm_status_t) _ftdm_channel_call_hangup(const char *file, const char *func, int line, ftdm_channel_t *ftdmchan);
906
907
908 #define ftdm_channel_call_hangup_with_cause(ftdmchan, cause) _ftdm_channel_call_hangup_with_cause(__FILE__, __FUNCTION__, __LINE__, (ftdmchan), (cause))
909
910
911 FT_DECLARE(ftdm_status_t) _ftdm_channel_call_hangup_with_cause(const char *file, const char *func, int line, ftdm_channel_t *ftdmchan, ftdm_call_cause_t);
912
913
914 #define ftdm_channel_reset(ftdmchan) _ftdm_channel_reset(__FILE__, __FUNCTION__, __LINE__, (ftdmchan))
915
916
917
918
919 FT_DECLARE(ftdm_status_t) _ftdm_channel_reset(const char *file, const char *func, int line, ftdm_channel_t *ftdmchan);
920
921
922 #define ftdm_channel_call_hold(ftdmchan) _ftdm_channel_call_hold(__FILE__, __FUNCTION__, __LINE__, (ftdmchan))
923
924
925 FT_DECLARE(ftdm_status_t) _ftdm_channel_call_hold(const char *file, const char *func, int line, ftdm_channel_t *ftdmchan);
926
927
928 #define ftdm_channel_call_unhold(ftdmchan) _ftdm_channel_call_unhold(__FILE__, __FUNCTION__, __LINE__, (ftdmchan))
929
930
931 FT_DECLARE(ftdm_status_t) _ftdm_channel_call_unhold(const char *file, const char *func, int line, ftdm_channel_t *ftdmchan);
932
933
934 FT_DECLARE(ftdm_bool_t) ftdm_channel_call_check_answered(const ftdm_channel_t *ftdmchan);
935
936
937 FT_DECLARE(ftdm_bool_t) ftdm_channel_call_check_busy(const ftdm_channel_t *ftdmchan);
938
939
940 FT_DECLARE(ftdm_bool_t) ftdm_channel_call_check_hangup(const ftdm_channel_t *ftdmchan);
941
942
943 FT_DECLARE(ftdm_bool_t) ftdm_channel_call_check_done(const ftdm_channel_t *ftdmchan);
944
945
946 FT_DECLARE(ftdm_bool_t) ftdm_channel_call_check_hold(const ftdm_channel_t *ftdmchan);
947
948
949 FT_DECLARE(ftdm_status_t) ftdm_channel_set_sig_status(ftdm_channel_t *ftdmchan, ftdm_signaling_status_t status);
950
951
952 FT_DECLARE(ftdm_status_t) ftdm_channel_get_sig_status(ftdm_channel_t *ftdmchan, ftdm_signaling_status_t *status);
953
954
955 FT_DECLARE(ftdm_status_t) ftdm_span_set_sig_status(ftdm_span_t *span, ftdm_signaling_status_t status);
956
957
958 FT_DECLARE(ftdm_status_t) ftdm_span_get_sig_status(ftdm_span_t *span, ftdm_signaling_status_t *status);
959
960
961
962
963
964
965
966
967
968 FT_DECLARE(void) ftdm_channel_set_private(ftdm_channel_t *ftdmchan, void *pvt);
969
970
971
972
973
974
975
976
977 FT_DECLARE(void *) ftdm_channel_get_private(const ftdm_channel_t *ftdmchan);
978
979
980
981
982
983
984
985
986
987
988 FT_DECLARE(ftdm_status_t) ftdm_channel_clear_token(ftdm_channel_t *ftdmchan, const char *token);
989
990
991
992
993
994
995
996
997 FT_DECLARE(void) ftdm_channel_replace_token(ftdm_channel_t *ftdmchan, const char *old_token, const char *new_token);
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009 FT_DECLARE(ftdm_status_t) ftdm_channel_add_token(ftdm_channel_t *ftdmchan, char *token, int end);
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020 FT_DECLARE(const char *) ftdm_channel_get_token(const ftdm_channel_t *ftdmchan, uint32_t tokenid);
1021
1022
1023
1024
1025
1026
1027
1028
1029 FT_DECLARE(uint32_t) ftdm_channel_get_token_count(const ftdm_channel_t *ftdmchan);
1030
1031
1032
1033
1034
1035
1036
1037
1038 FT_DECLARE(uint32_t) ftdm_channel_get_io_interval(const ftdm_channel_t *ftdmchan);
1039
1040
1041
1042
1043
1044
1045
1046
1047 FT_DECLARE(uint32_t) ftdm_channel_get_io_packet_len(const ftdm_channel_t *ftdmchan);
1048
1049
1050
1051
1052
1053
1054
1055
1056 FT_DECLARE(ftdm_codec_t) ftdm_channel_get_codec(const ftdm_channel_t *ftdmchan);
1057
1058
1059
1060
1061
1062
1063
1064
1065 FT_DECLARE(const char *) ftdm_channel_get_last_error(const ftdm_channel_t *ftdmchan);
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076 FT_DECLARE(ftdm_status_t) ftdm_channel_get_alarms(ftdm_channel_t *ftdmchan, ftdm_alarm_flag_t *alarmbits);
1077
1078
1079
1080
1081
1082
1083
1084
1085 FT_DECLARE(ftdm_chan_type_t) ftdm_channel_get_type(const ftdm_channel_t *ftdmchan);
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097 FT_DECLARE(ftdm_size_t) ftdm_channel_dequeue_dtmf(ftdm_channel_t *ftdmchan, char *dtmf, ftdm_size_t len);
1098
1099
1100
1101
1102
1103
1104 FT_DECLARE(void) ftdm_channel_flush_dtmf(ftdm_channel_t *ftdmchan);
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117 FT_DECLARE(ftdm_status_t) ftdm_span_poll_event(ftdm_span_t *span, uint32_t ms, short *poll_events);
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128 FT_DECLARE(ftdm_status_t) ftdm_span_find(uint32_t id, ftdm_span_t **span);
1129
1130
1131
1132
1133
1134
1135
1136
1137 FT_DECLARE(const char *) ftdm_span_get_last_error(const ftdm_span_t *span);
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153 FT_DECLARE(ftdm_status_t) ftdm_span_create(const char *iotype, const char *name, ftdm_span_t **span);
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166 FT_DECLARE(ftdm_status_t) ftdm_span_add_channel(ftdm_span_t *span, ftdm_socket_t sockfd, ftdm_chan_type_t type, ftdm_channel_t **chan);
1167
1168
1169 FT_DECLARE(ftdm_status_t) ftdm_channel_add_to_group(const char* name, ftdm_channel_t* ftdmchan);
1170
1171
1172 FT_DECLARE(ftdm_status_t) ftdm_channel_remove_from_group(ftdm_group_t* group, ftdm_channel_t* ftdmchan);
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189 FT_DECLARE(ftdm_status_t) ftdm_channel_read_event(ftdm_channel_t *ftdmchan, ftdm_event_t **event);
1190
1191
1192 FT_DECLARE(ftdm_status_t) ftdm_group_find(uint32_t id, ftdm_group_t **group);
1193
1194
1195 FT_DECLARE(ftdm_status_t) ftdm_group_find_by_name(const char *name, ftdm_group_t **group);
1196
1197
1198 FT_DECLARE(ftdm_status_t) ftdm_group_create(ftdm_group_t **group, const char *name);
1199
1200
1201 FT_DECLARE(ftdm_status_t) ftdm_span_channel_use_count(ftdm_span_t *span, uint32_t *count);
1202
1203
1204 FT_DECLARE(ftdm_status_t) ftdm_group_channel_use_count(ftdm_group_t *group, uint32_t *count);
1205
1206
1207 FT_DECLARE(uint32_t) ftdm_group_get_id(const ftdm_group_t *group);
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224 FT_DECLARE(ftdm_status_t) ftdm_channel_open(uint32_t span_id, uint32_t chan_id, ftdm_channel_t **ftdmchan);
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242 FT_DECLARE(ftdm_status_t) ftdm_channel_open_by_span(uint32_t span_id, ftdm_direction_t direction, ftdm_caller_data_t *caller_data, ftdm_channel_t **ftdmchan);
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260 FT_DECLARE(ftdm_status_t) ftdm_channel_open_by_group(uint32_t group_id, ftdm_direction_t direction, ftdm_caller_data_t *caller_data, ftdm_channel_t **ftdmchan);
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276 FT_DECLARE(ftdm_status_t) ftdm_channel_close(ftdm_channel_t **ftdmchan);
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288 FT_DECLARE(ftdm_status_t) ftdm_channel_command(ftdm_channel_t *ftdmchan, ftdm_command_t command, void *arg);
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300 FT_DECLARE(ftdm_status_t) ftdm_channel_wait(ftdm_channel_t *ftdmchan, ftdm_wait_flag_t *flags, int32_t timeout);
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312 FT_DECLARE(ftdm_status_t) ftdm_channel_read(ftdm_channel_t *ftdmchan, void *data, ftdm_size_t *datalen);
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337 FT_DECLARE(ftdm_status_t) ftdm_channel_write(ftdm_channel_t *ftdmchan, void *data, ftdm_size_t datasize, ftdm_size_t *datalen);
1338
1339
1340
1341
1342
1343 FT_DECLARE(ftdm_status_t) ftdm_channel_add_var(ftdm_channel_t *ftdmchan, const char *var_name, const char *value);
1344
1345
1346
1347 FT_DECLARE(const char *) ftdm_channel_get_var(ftdm_channel_t *ftdmchan, const char *var_name);
1348
1349
1350
1351
1352
1353
1354
1355
1356 FT_DECLARE(ftdm_iterator_t *) ftdm_channel_get_var_iterator(const ftdm_channel_t *ftdmchan, ftdm_iterator_t *iter);
1357
1358
1359
1360
1361
1362 FT_DECLARE(void *) ftdm_iterator_current(ftdm_iterator_t *iter);
1363
1364
1365 FT_DECLARE(ftdm_status_t) ftdm_channel_get_current_var(ftdm_iterator_t *iter, const char **var_name, const char **var_val);
1366
1367
1368 FT_DECLARE(ftdm_iterator_t *) ftdm_iterator_next(ftdm_iterator_t *iter);
1369
1370
1371
1372
1373 FT_DECLARE(ftdm_status_t) ftdm_iterator_free(ftdm_iterator_t *iter);
1374
1375
1376
1377
1378
1379 FT_DECLARE(ftdm_status_t) ftdm_call_add_var(ftdm_caller_data_t *caller_data, const char *var_name, const char *value);
1380
1381
1382
1383 FT_DECLARE(const char *) ftdm_call_get_var(ftdm_caller_data_t *caller_data, const char *var_name);
1384
1385
1386
1387
1388
1389
1390
1391
1392 FT_DECLARE(ftdm_iterator_t *) ftdm_call_get_var_iterator(const ftdm_caller_data_t *caller_data, ftdm_iterator_t *iter);
1393
1394
1395 FT_DECLARE(ftdm_status_t) ftdm_call_get_current_var(ftdm_iterator_t *iter, const char **var_name, const char **var_val);
1396
1397
1398
1399
1400
1401 FT_DECLARE(ftdm_status_t) ftdm_call_clear_vars(ftdm_caller_data_t *caller_data);
1402
1403
1404
1405
1406
1407 FT_DECLARE(ftdm_status_t) ftdm_call_remove_var(ftdm_caller_data_t *caller_data, const char *var_name);
1408
1409
1410
1411
1412 FT_DECLARE(void) ftdm_call_clear_data(ftdm_caller_data_t *caller_data);
1413
1414
1415 FT_DECLARE(ftdm_span_t *) ftdm_channel_get_span(const ftdm_channel_t *ftdmchan);
1416
1417
1418 FT_DECLARE(uint32_t) ftdm_channel_get_span_id(const ftdm_channel_t *ftdmchan);
1419
1420
1421 FT_DECLARE(uint32_t) ftdm_channel_get_ph_span_id(const ftdm_channel_t *ftdmchan);
1422
1423
1424 FT_DECLARE(const char *) ftdm_channel_get_span_name(const ftdm_channel_t *ftdmchan);
1425
1426
1427 FT_DECLARE(uint32_t) ftdm_channel_get_id(const ftdm_channel_t *ftdmchan);
1428
1429
1430 FT_DECLARE(const char *) ftdm_channel_get_name(const ftdm_channel_t *ftdmchan);
1431
1432
1433 FT_DECLARE(const char *) ftdm_channel_get_number(const ftdm_channel_t *ftdmchan);
1434
1435
1436 FT_DECLARE(uint32_t) ftdm_channel_get_ph_id(const ftdm_channel_t *ftdmchan);
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454 FT_DECLARE(ftdm_status_t) ftdm_configure_span(ftdm_span_t *span, const char *type, fio_signal_cb_t sig_cb, ...);
1455 #define FTDM_TAG_END NULL
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469 FT_DECLARE(ftdm_status_t) ftdm_configure_span_signaling(ftdm_span_t *span, const char *type, fio_signal_cb_t sig_cb, ftdm_conf_parameter_t *parameters);
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484 FT_DECLARE(ftdm_status_t) ftdm_span_start(ftdm_span_t *span);
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498 FT_DECLARE(ftdm_status_t) ftdm_span_stop(ftdm_span_t *span);
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508 FT_DECLARE(ftdm_status_t) ftdm_global_add_io_interface(ftdm_io_interface_t *io_interface);
1509
1510
1511 FT_DECLARE(ftdm_status_t) ftdm_span_find_by_name(const char *name, ftdm_span_t **span);
1512
1513
1514 FT_DECLARE(uint32_t) ftdm_span_get_id(const ftdm_span_t *span);
1515
1516
1517 FT_DECLARE(const char *) ftdm_span_get_name(const ftdm_span_t *span);
1518
1519
1520
1521
1522
1523 FT_DECLARE(ftdm_iterator_t *) ftdm_span_get_chan_iterator(const ftdm_span_t *span, ftdm_iterator_t *iter);
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533 FT_DECLARE(char *) ftdm_api_execute(const char *cmd);
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545 FT_DECLARE(ftdm_status_t) ftdm_conf_node_create(const char *name, ftdm_conf_node_t **node, ftdm_conf_node_t *parent);
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557 FT_DECLARE(ftdm_status_t) ftdm_conf_node_add_param(ftdm_conf_node_t *node, const char *param, const char *val);
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567 FT_DECLARE(ftdm_status_t) ftdm_conf_node_destroy(ftdm_conf_node_t *node);
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580 FT_DECLARE(ftdm_status_t) ftdm_configure_span_channels(ftdm_span_t *span, const char *str, ftdm_channel_config_t *chan_config, unsigned *configured);
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590 FT_DECLARE(void) ftdm_span_set_trunk_type(ftdm_span_t *span, ftdm_trunk_type_t type);
1591
1592
1593
1594
1595
1596
1597
1598
1599 FT_DECLARE(ftdm_trunk_type_t) ftdm_span_get_trunk_type(const ftdm_span_t *span);
1600
1601
1602 FT_DECLARE(const char *) ftdm_span_get_trunk_type_str(const ftdm_span_t *span);
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612 FT_DECLARE(ftdm_channel_t *) ftdm_span_get_channel(const ftdm_span_t *span, uint32_t chanid);
1613
1614
1615 FT_DECLARE(uint32_t) ftdm_span_get_chan_count(const ftdm_span_t *span);
1616
1617
1618 FT_DECLARE(ftdm_status_t) ftdm_channel_set_caller_data(ftdm_channel_t *ftdmchan, ftdm_caller_data_t *caller_data);
1619
1620
1621 FT_DECLARE(ftdm_caller_data_t *) ftdm_channel_get_caller_data(ftdm_channel_t *channel);
1622
1623
1624 FT_DECLARE(int) ftdm_channel_get_state(const ftdm_channel_t *ftdmchan);
1625
1626
1627 FT_DECLARE(int) ftdm_channel_get_last_state(const ftdm_channel_t *ftdmchan);
1628
1629
1630 FT_DECLARE(const char *) ftdm_channel_get_state_str(const ftdm_channel_t *channel);
1631
1632
1633 FT_DECLARE(const char *) ftdm_channel_get_last_state_str(const ftdm_channel_t *channel);
1634
1635
1636
1637
1638
1639 FT_DECLARE(char *) ftdm_channel_get_history_str(const ftdm_channel_t *channel);
1640
1641
1642
1643
1644 FT_DECLARE(ftdm_status_t) ftdm_channel_init(ftdm_channel_t *ftdmchan);
1645
1646
1647 FT_DECLARE(ftdm_status_t) ftdm_span_set_blocking_mode(const ftdm_span_t *span, ftdm_bool_t enabled);
1648
1649
1650 FT_DECLARE(ftdm_status_t) ftdm_global_init(void);
1651
1652
1653 FT_DECLARE(ftdm_status_t) ftdm_global_configuration(void);
1654
1655
1656 FT_DECLARE(ftdm_status_t) ftdm_global_destroy(void);
1657
1658
1659 FT_DECLARE(ftdm_status_t) ftdm_global_set_memory_handler(ftdm_memory_handler_t *handler);
1660
1661
1662 FT_DECLARE(void) ftdm_global_set_crash_policy(ftdm_crash_policy_t policy);
1663
1664
1665 FT_DECLARE(void) ftdm_global_set_logger(ftdm_logger_t logger);
1666
1667
1668 FT_DECLARE(void) ftdm_global_set_default_logger(int level);
1669
1670
1671 FT_DECLARE(void) ftdm_global_set_mod_directory(const char *path);
1672
1673
1674 FT_DECLARE(void) ftdm_global_set_config_directory(const char *path);
1675
1676
1677 FT_DECLARE(ftdm_bool_t) ftdm_running(void);
1678
1679 FT_DECLARE_DATA extern ftdm_logger_t ftdm_log;
1680
1681
1682 #define FIO_CODEC_ARGS (void *data, ftdm_size_t max, ftdm_size_t *datalen)
1683 #define FIO_CODEC_FUNCTION(name) FT_DECLARE_NONSTD(ftdm_status_t) name FIO_CODEC_ARGS
1684 typedef ftdm_status_t (*fio_codec_t) FIO_CODEC_ARGS ;
1685
1686
1687 FIO_CODEC_FUNCTION(fio_slin2ulaw);
1688 FIO_CODEC_FUNCTION(fio_ulaw2slin);
1689 FIO_CODEC_FUNCTION(fio_slin2alaw);
1690 FIO_CODEC_FUNCTION(fio_alaw2slin);
1691 FIO_CODEC_FUNCTION(fio_ulaw2alaw);
1692 FIO_CODEC_FUNCTION(fio_alaw2ulaw);
1693
1694 #define FTDM_PRE __FILE__, __FUNCTION__, __LINE__
1695 #define FTDM_LOG_LEVEL_DEBUG 7
1696 #define FTDM_LOG_LEVEL_INFO 6
1697 #define FTDM_LOG_LEVEL_NOTICE 5
1698 #define FTDM_LOG_LEVEL_WARNING 4
1699 #define FTDM_LOG_LEVEL_ERROR 3
1700 #define FTDM_LOG_LEVEL_CRIT 2
1701 #define FTDM_LOG_LEVEL_ALERT 1
1702 #define FTDM_LOG_LEVEL_EMERG 0
1703
1704
1705 #define FTDM_LOG_DEBUG FTDM_PRE, FTDM_LOG_LEVEL_DEBUG
1706 #define FTDM_LOG_INFO FTDM_PRE, FTDM_LOG_LEVEL_INFO
1707 #define FTDM_LOG_NOTICE FTDM_PRE, FTDM_LOG_LEVEL_NOTICE
1708 #define FTDM_LOG_WARNING FTDM_PRE, FTDM_LOG_LEVEL_WARNING
1709 #define FTDM_LOG_ERROR FTDM_PRE, FTDM_LOG_LEVEL_ERROR
1710 #define FTDM_LOG_CRIT FTDM_PRE, FTDM_LOG_LEVEL_CRIT
1711 #define FTDM_LOG_ALERT FTDM_PRE, FTDM_LOG_LEVEL_ALERT
1712 #define FTDM_LOG_EMERG FTDM_PRE, FTDM_LOG_LEVEL_EMERG
1713
1714 #ifdef __cplusplus
1715 }
1716 #endif
1717
1718 #endif
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729