root/src/include/private/ftdm_types.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. FTDM_STR2ENUM_P
  2. FTDM_STR2ENUM_P
  3. FTDM_STR2ENUM_P
  4. FTDM_STR2ENUM_P
  5. FTDM_STR2ENUM_P

   1 /*
   2  * Copyright (c) 2007, Anthony Minessale II
   3  * All rights reserved.
   4  * 
   5  * Redistribution and use in source and binary forms, with or without
   6  * modification, are permitted provided that the following conditions
   7  * are met:
   8  * 
   9  * * Redistributions of source code must retain the above copyright
  10  * notice, this list of conditions and the following disclaimer.
  11  * 
  12  * * Redistributions in binary form must reproduce the above copyright
  13  * notice, this list of conditions and the following disclaimer in the
  14  * documentation and/or other materials provided with the distribution.
  15  * 
  16  * * Neither the name of the original author; nor the names of any contributors
  17  * may be used to endorse or promote products derived from this software
  18  * without specific prior written permission.
  19  * 
  20  * 
  21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  24  * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER
  25  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  26  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  27  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  28  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  29  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  30  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  31  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  32  *
  33  * Contributors: 
  34  *
  35  * Moises Silva <moy@sangoma.com>
  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 /*! \brief Event types */
 141 typedef enum {
 142         FTDM_EVENT_NONE,
 143         /* DTMF digit was just detected */
 144         FTDM_EVENT_DTMF,
 145         /* Out of band event */
 146         FTDM_EVENT_OOB,
 147         FTDM_EVENT_COUNT
 148 } ftdm_event_type_t;
 149 
 150 /*! \brief Generic event data type */
 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         /* If you use this flag, you MUST call ftdm_span_trigger_signals to deliver the user signals
 180          * after having called ftdm_send_span_signal(), which with this flag it will just enqueue the signal
 181          * for later delivery */
 182         FTDM_SPAN_USE_SIGNALS_QUEUE = (1 << 9),
 183 } ftdm_span_flag_t;
 184 
 185 /*! \brief Channel supported features */
 186 typedef enum {
 187         FTDM_CHANNEL_FEATURE_DTMF_DETECT = (1 << 0), /*!< Channel can detect DTMF (read-only) */
 188         FTDM_CHANNEL_FEATURE_DTMF_GENERATE = (1 << 1), /*!< Channel can generate DTMF (read-only) */
 189         FTDM_CHANNEL_FEATURE_CODECS = (1 << 2), /*!< Channel can do transcoding (read-only) */
 190         FTDM_CHANNEL_FEATURE_INTERVAL = (1 << 3), /*!< Channel support i/o interval configuration (read-only) */
 191         FTDM_CHANNEL_FEATURE_CALLERID = (1 << 4), /*!< Channel can detect caller id (read-only) */
 192         FTDM_CHANNEL_FEATURE_PROGRESS = (1 << 5), /*!< Channel can detect inband progress (read-only) */
 193         FTDM_CHANNEL_FEATURE_CALLWAITING = (1 << 6), /*!< Channel will allow call waiting (ie: FXS devices) (read/write) */
 194         FTDM_CHANNEL_FEATURE_HWEC = (1<<7), /*!< Channel has a hardware echo canceller */
 195         FTDM_CHANNEL_FEATURE_HWEC_DISABLED_ON_IDLE  = (1<<8), /*!< hardware echo canceller is disabled when there are no calls on this channel */
 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     // fix C2676 
 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         /* node name */
 313         char name[FTDM_NODE_NAME_SIZE];
 314 
 315         /* total slots for parameters */
 316         unsigned int t_parameters;
 317 
 318         /* current number of parameters */
 319         unsigned int n_parameters;
 320 
 321         /* array of parameters */
 322         ftdm_conf_parameter_t *parameters;
 323 
 324         /* first node child */
 325         struct ftdm_conf_node *child;
 326 
 327         /* last node child */
 328         struct ftdm_conf_node *last;
 329 
 330         /* next node sibling */
 331         struct ftdm_conf_node *next;
 332 
 333         /* prev node sibling */
 334         struct ftdm_conf_node *prev;
 335 
 336         /* my parent if any */
 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           \brief configure a given span signaling 
 349           \see sig_configure
 350           This is just like sig_configure but receives
 351           an an ftdm_conf_node_t instead
 352           I'd like to deprecate sig_configure and move
 353           all modules to use configure_span_signaling
 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 /* For Emacs:
 401  * Local Variables:
 402  * mode:c
 403  * indent-tabs-mode:t
 404  * tab-width:4
 405  * c-basic-offset:4
 406  * End:
 407  * For VIM:
 408  * vim:set softtabstop=4 shiftwidth=4 tabstop=4:
 409  */
 410 

/* [<][>][^][v][top][bottom][index][help] */