root/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.h

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

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. sngisdn_test_flag
  2. sngisdn_clear_flag
  3. sngisdn_set_flag

   1 /*
   2  * Copyright (c) 2010, Sangoma Technologies 
   3  * David Yat Sin <davidy@sangoma.com>
   4  * Moises Silva <moy@sangoma.com>
   5  * All rights reserved.
   6  *
   7  * Redistribution and use in source and binary forms, with or without
   8  * modification, are permitted provided that the following conditions
   9  * are met:
  10  *
  11  * * Redistributions of source code must retain the above copyright
  12  * notice, this list of conditions and the following disclaimer.
  13  *
  14  * * Redistributions in binary form must reproduce the above copyright
  15  * notice, this list of conditions and the following disclaimer in the
  16  * documentation and/or other materials provided with the distribution.
  17  *
  18  * * Neither the name of the original author; nor the names of any contributors
  19  * may be used to endorse or promote products derived from this software
  20  * without specific prior written permission.
  21  *
  22  *
  23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  24  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  25  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  26  * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER
  27  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  28  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  29  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  30  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  31  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  32  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  33  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  34  */
  35 #ifndef __FTMOD_SNG_ISDN_H__
  36 #define __FTMOD_SNG_ISDN_H__
  37 
  38 #include <stdio.h>
  39 #include <string.h>
  40 #include <stdarg.h>
  41 #ifdef HAVE_STDINT_H
  42 #include <stdint.h>
  43 #endif
  44 #ifdef HAVE_UNISTD_H
  45 #include <unistd.h>
  46 #endif
  47 #include <ctype.h>
  48 
  49 #include "private/ftdm_core.h"
  50 #include "ftmod_sangoma_isdn_user.h"
  51 
  52 #include <sng_isdn.h>
  53 
  54 /* Theoretical limit for MAX_SPANS_PER_NFAS_LINK is 31,
  55    but set to 8 for now to save some memory */
  56 
  57 #define MAX_SPANS_PER_NFAS_LINK         8 
  58 #define NUM_E1_CHANNELS_PER_SPAN        32
  59 #define NUM_T1_CHANNELS_PER_SPAN        24
  60 #define NUM_BRI_CHANNELS_PER_SPAN       2
  61 #define SNGISDN_EVENT_QUEUE_SIZE        100
  62 #define SNGISDN_EVENT_POLL_RATE         100
  63 #define SNGISDN_NUM_LOCAL_NUMBERS       8
  64 #define SNGISDN_DCHAN_QUEUE_LEN         200
  65 
  66 /* TODO: rename all *_cc_* to *_an_*  */
  67 
  68 typedef enum {
  69         FLAG_RESET_RX           = (1 << 0),
  70         FLAG_RESET_TX           = (1 << 1),
  71         FLAG_REMOTE_REL         = (1 << 2),
  72         FLAG_LOCAL_REL          = (1 << 3),
  73         FLAG_REMOTE_ABORT       = (1 << 4),
  74         FLAG_LOCAL_ABORT        = (1 << 5),
  75         FLAG_GLARE              = (1 << 6),
  76         FLAG_DELAYED_REL        = (1 << 7),
  77         FLAG_SENT_PROCEED       = (1 << 8),
  78         FLAG_SEND_DISC                  = (1 << 9),     
  79         /* Used for BRI only, flag is set after we request line CONNECTED */
  80         FLAG_ACTIVATING                 = (1 << 10),
  81         /* Used when we receive an ALERT msg + inband tones ready */
  82         FLAG_MEDIA_READY                = (1 << 11),
  83 } sngisdn_flag_t;
  84 
  85 
  86 typedef enum {
  87         SNGISDN_SWITCH_INVALID = 0,     /* invalid */
  88         SNGISDN_SWITCH_NI2 ,    /* national isdn-2 */
  89         SNGISDN_SWITCH_5ESS,    /* att 5ess */
  90         SNGISDN_SWITCH_4ESS,    /* att 4ess */
  91         SNGISDN_SWITCH_DMS100,  /* nt dms100 */
  92         SNGISDN_SWITCH_EUROISDN,/* etsi */
  93         SNGISDN_SWITCH_QSIG,    /* etsi qsig */
  94         SNGISDN_SWITCH_INSNET,  /* int - net */
  95 } sngisdn_switchtype_t;
  96 
  97 typedef enum {
  98         SNGISDN_SIGNALING_INVALID = 0,          /* invalid */
  99         SNGISDN_SIGNALING_CPE ,                         /* customer side emulation */
 100         SNGISDN_SIGNALING_NET,                          /* network side emulation */
 101 } sngisdn_signalingtype_t;
 102 
 103 typedef enum {
 104         SNGISDN_TRACE_DISABLE = 0,
 105         SNGISDN_TRACE_Q921 = 1,
 106         SNGISDN_TRACE_Q931 = 2,
 107 } sngisdn_tracetype_t;
 108 
 109 typedef enum {
 110         SNGISDN_OPT_DEFAULT = 0,
 111         SNGISDN_OPT_TRUE = 1,
 112         SNGISDN_OPT_FALSE = 2,
 113 } sngisdn_opt_t;
 114 
 115 
 116 typedef enum {
 117         SNGISDN_AVAIL_DOWN = 1,
 118         SNGISDN_AVAIL_PWR_SAVING = 5,
 119         SNGISDN_AVAIL_UP = 10,
 120 } sngisdn_avail_t;
 121 
 122 typedef enum {
 123         SNGISDN_EVENT_CON_IND = 1,
 124         SNGISDN_EVENT_CON_CFM,
 125         SNGISDN_EVENT_CNST_IND,
 126         SNGISDN_EVENT_DISC_IND,
 127         SNGISDN_EVENT_REL_IND,
 128         SNGISDN_EVENT_DAT_IND,
 129         SNGISDN_EVENT_SSHL_IND,
 130         SNGISDN_EVENT_SSHL_CFM,
 131         SNGISDN_EVENT_RMRT_IND,
 132         SNGISDN_EVENT_RMRT_CFM,
 133         SNGISDN_EVENT_FLC_IND,
 134         SNGISDN_EVENT_FAC_IND,
 135         SNGISDN_EVENT_STA_CFM,
 136         SNGISDN_EVENT_SRV_IND,
 137         SNGISDN_EVENT_SRV_CFM,
 138         SNGISDN_EVENT_RST_CFM,
 139         SNGISDN_EVENT_RST_IND,
 140 } ftdm_sngisdn_event_id_t;
 141 
 142 typedef struct ftdm_sngisdn_prog_ind {
 143         ftdm_sngisdn_progind_loc_t loc;         /* location */
 144         ftdm_sngisdn_progind_descr_t descr;     /* description */
 145 } ftdm_sngisdn_progind_t;
 146 
 147 /* Only timers that can be cancelled are listed here */
 148 #define SNGISDN_NUM_TIMERS 1
 149 /* Increase NUM_TIMERS as number of ftdm_sngisdn_timer_t increases */
 150 typedef enum {
 151         SNGISDN_TIMER_FACILITY = 0,
 152 } ftdm_sngisdn_timer_t;
 153 
 154 typedef struct sngisdn_glare_data {
 155         int16_t         suId;
 156     uint32_t    suInstId;
 157     uint32_t    spInstId;
 158         int16_t         dChan;
 159     ConEvnt             setup;
 160         uint8_t         ces;
 161 }sngisdn_glare_data_t;
 162 
 163 
 164 /* Channel specific data */
 165 typedef struct sngisdn_chan_data {
 166     ftdm_channel_t                      *ftdmchan;
 167     uint32_t                            flags;
 168         uint8_t                                 ces;            /* used only for BRI, otherwise always 0 */
 169         uint8_t                                 dchan_id;
 170         uint16_t                                call_ref;       /* Q.931 call reference, only valid for ETSI/INSNET/QSIG */
 171         uint32_t                                suInstId;       /* instance ID generated locally */
 172         uint32_t                                spInstId;       /* instance ID generated by stack */
 173 
 174         uint8_t                 globalFlg;
 175         sngisdn_glare_data_t    glare;
 176         ftdm_timer_id_t                 timers[SNGISDN_NUM_TIMERS];
 177 } sngisdn_chan_data_t;
 178 
 179 /* Span specific data */
 180 typedef struct sngisdn_span_data {
 181         ftdm_span_t             *ftdm_span;
 182         ftdm_channel_t  *dchan;
 183         uint8_t                 link_id;
 184         uint8_t                 switchtype;
 185         uint8_t                 signalling;                     /* SNGISDN_SIGNALING_CPE or SNGISDN_SIGNALING_NET */
 186         uint8_t                 cc_id;
 187         uint8_t                 dchan_id;
 188         uint8_t                 span_id;
 189         uint8_t                 tei;
 190         uint8_t                 min_digits;
 191         uint8_t                 trace_flags;            /* TODO: change to flags, so we can use ftdm_test_flag etc.. */
 192         uint8_t                 overlap_dial;
 193         uint8_t                 setup_arb;
 194         uint8_t                 facility_ie_decode;
 195         uint8_t                 facility;
 196         int8_t                  facility_timeout;
 197         uint8_t                 num_local_numbers;
 198         uint8_t                 ignore_cause_value;
 199         uint8_t                 raw_trace_q931;
 200         uint8_t                 raw_trace_q921;
 201         uint8_t                 timer_t3;
 202         uint8_t                 restart_opt;
 203         char*                   local_numbers[SNGISDN_NUM_LOCAL_NUMBERS];
 204         ftdm_sched_t    *sched;
 205         ftdm_queue_t    *event_queue;
 206 } sngisdn_span_data_t;
 207 
 208 typedef struct sngisdn_event_data {
 209         
 210         int16_t         suId;
 211         int16_t         dChan;
 212         uint32_t        suInstId;
 213         uint32_t        spInstId;
 214         uint8_t         ces;
 215         uint8_t         action;
 216         uint8_t         evntType;
 217 
 218         sngisdn_chan_data_t *sngisdn_info;
 219         sngisdn_span_data_t *signal_data;       
 220         
 221         ftdm_sngisdn_event_id_t event_id;
 222         
 223         union
 224         {
 225                 ConEvnt         conEvnt;
 226                 CnStEvnt        cnStEvnt;
 227                 DiscEvnt        discEvnt;
 228                 RelEvnt         relEvnt;
 229                 InfoEvnt        infoEvnt;
 230                 SsHlEvnt        ssHlEvnt;
 231                 RmRtEvnt        rmRtEvnt;
 232                 StaEvnt         staEvnt;
 233                 FacEvnt         facEvnt;
 234                 Srv                     srvEvnt;
 235                 Rst                     rstEvnt;
 236         }event;
 237         
 238 } sngisdn_event_data_t;
 239 
 240 /* dchan_data can have more than 1 span when running NFAS */
 241 typedef struct sngisdn_dchan_data {
 242         uint8_t                         num_spans;
 243         sngisdn_span_data_t     *spans[MAX_L1_LINKS+1];
 244         uint16_t                        num_chans;
 245         /* worst case for number of channel is when using NFAS, and NFAS is only used on T1,
 246                 so we can use MAX_SPANS_PER_NFAS_LINK*NUM_T1_CHANNELS_PER_SPAN instead of
 247                 MAX_SPANS_PER_NFAS_LINK*NUM_E1_CHANNELS_PER_SPAN
 248         */
 249         /* Never seen NFAS on E1 yet, so use NUM_T1_CHANNELS_PER_SPAN */
 250         /* b-channels are arranged by physical id's not logical */
 251         sngisdn_chan_data_t *channels[MAX_SPANS_PER_NFAS_LINK*NUM_T1_CHANNELS_PER_SPAN];
 252 }sngisdn_dchan_data_t;
 253 
 254 typedef struct sngisdn_cc {
 255         /* TODO: use flags instead of config_done and activation_done */
 256         uint8_t                         config_done;
 257         uint8_t                         activation_done;
 258         uint8_t                         switchtype;
 259         ftdm_trunk_type_t       trunktype;
 260         uint32_t                        last_suInstId;  
 261         ftdm_mutex_t            *mutex;
 262         sngisdn_chan_data_t     *active_spInstIds[MAX_INSTID+1];
 263         sngisdn_chan_data_t     *active_suInstIds[MAX_INSTID+1];
 264 }sngisdn_cc_t;
 265 
 266 /* Global sngisdn data */
 267 typedef struct ftdm_sngisdn_data {
 268         uint8_t gen_config_done;
 269         uint8_t num_cc;                                         /* 1 ent per switchtype */
 270         struct sngisdn_cc ccs[MAX_VARIANTS+1];
 271         uint8_t num_dchan;
 272         sngisdn_dchan_data_t dchans[MAX_L1_LINKS+1];
 273         sngisdn_span_data_t *spans[MAX_L1_LINKS+1]; /* spans are indexed by link_id */
 274 }ftdm_sngisdn_data_t;
 275 
 276 
 277 /* TODO implement these 2 functions */
 278 #define ISDN_FUNC_TRACE_ENTER(a)
 279 #define ISDN_FUNC_TRACE_EXIT(a)
 280 
 281 /* Global Structs */
 282 extern ftdm_sngisdn_data_t      g_sngisdn_data;
 283 
 284 /* Configuration functions */
 285 ftdm_status_t ftmod_isdn_parse_cfg(ftdm_conf_parameter_t *ftdm_parameters, ftdm_span_t *span);
 286 
 287 /* Support functions */
 288 uint32_t get_unique_suInstId(int16_t cc_id);
 289 void clear_call_data(sngisdn_chan_data_t *sngisdn_info);
 290 void clear_call_glare_data(sngisdn_chan_data_t *sngisdn_info);
 291 ftdm_status_t get_ftdmchan_by_suInstId(int16_t cc_id, uint32_t suInstId, sngisdn_chan_data_t **sngisdn_data);
 292 ftdm_status_t get_ftdmchan_by_spInstId(int16_t cc_id, uint32_t spInstId, sngisdn_chan_data_t **sngisdn_data);
 293 
 294 ftdm_status_t sngisdn_set_span_avail_rate(ftdm_span_t *span, sngisdn_avail_t avail);
 295 ftdm_status_t sngisdn_set_chan_avail_rate(ftdm_channel_t *chan, sngisdn_avail_t avail);
 296 void sngisdn_set_span_sig_status(ftdm_span_t *ftdmspan, ftdm_signaling_status_t status);
 297 void sngisdn_set_chan_sig_status(ftdm_channel_t *ftdmchan, ftdm_signaling_status_t status);
 298 
 299 ftdm_status_t sngisdn_activate_trace(ftdm_span_t *span, sngisdn_tracetype_t trace_opt);
 300 
 301 
 302 void stack_hdr_init(Header *hdr);
 303 void stack_pst_init(Pst *pst);
 304 
 305 /* Outbound Call Control functions */
 306 void sngisdn_snd_setup(ftdm_channel_t *ftdmchan);
 307 void sngisdn_snd_setup_ack(ftdm_channel_t *ftdmchan);
 308 void sngisdn_snd_proceed(ftdm_channel_t *ftdmchan, ftdm_sngisdn_progind_t prog_ind);
 309 void sngisdn_snd_progress(ftdm_channel_t *ftdmchan, ftdm_sngisdn_progind_t prog_ind);
 310 void sngisdn_snd_alert(ftdm_channel_t *ftdmchan, ftdm_sngisdn_progind_t prog_ind);
 311 void sngisdn_snd_connect(ftdm_channel_t *ftdmchan);
 312 void sngisdn_snd_disconnect(ftdm_channel_t *ftdmchan);
 313 void sngisdn_snd_release(ftdm_channel_t *ftdmchan, uint8_t glare);
 314 void sngisdn_snd_reset(ftdm_channel_t *ftdmchan);
 315 void sngisdn_snd_con_complete(ftdm_channel_t *ftdmchan);
 316 void sngisdn_snd_fac_req(ftdm_channel_t *ftdmchan);
 317 void sngisdn_snd_info_req(ftdm_channel_t *ftdmchan);
 318 void sngisdn_snd_status_enq(ftdm_channel_t *ftdmchan);
 319 void sngisdn_snd_restart(ftdm_channel_t *ftdmchan);
 320 void sngisdn_snd_data(ftdm_channel_t *dchan, uint8_t *data, ftdm_size_t len);
 321 void sngisdn_snd_event(ftdm_channel_t *dchan, ftdm_oob_event_t event);
 322 
 323 /* Inbound Call Control functions */
 324 void sngisdn_rcv_con_ind(int16_t suId, uint32_t suInstId, uint32_t spInstId, ConEvnt *conEvnt, int16_t dChan, uint8_t ces);
 325 void sngisdn_rcv_con_cfm(int16_t suId, uint32_t suInstId, uint32_t spInstId, CnStEvnt *cnStEvnt, int16_t dChan, uint8_t ces);
 326 void sngisdn_rcv_cnst_ind(int16_t suId, uint32_t suInstId, uint32_t spInstId, CnStEvnt *cnStEvnt, uint8_t evntType, int16_t dChan, uint8_t ces);
 327 void sngisdn_rcv_disc_ind(int16_t suId, uint32_t suInstId, uint32_t spInstId, DiscEvnt *discEvnt);
 328 void sngisdn_rcv_rel_ind(int16_t suId, uint32_t suInstId, uint32_t spInstId, RelEvnt *relEvnt);
 329 void sngisdn_rcv_dat_ind(int16_t suId, uint32_t suInstId, uint32_t spInstId, InfoEvnt *infoEvnt);
 330 void sngisdn_rcv_sshl_ind(int16_t suId, uint32_t suInstId, uint32_t spInstId, SsHlEvnt *ssHlEvnt, uint8_t action);
 331 void sngisdn_rcv_sshl_cfm(int16_t suId, uint32_t suInstId, uint32_t spInstId, SsHlEvnt *ssHlEvnt, uint8_t action);
 332 void sngisdn_rcv_rmrt_ind(int16_t suId, uint32_t suInstId, uint32_t spInstId, RmRtEvnt *rmRtEvnt, uint8_t action);
 333 void sngisdn_rcv_rmrt_cfm(int16_t suId, uint32_t suInstId, uint32_t spInstId, RmRtEvnt *rmRtEvnt, uint8_t action);
 334 void sngisdn_rcv_flc_ind(int16_t suId, uint32_t suInstId, uint32_t spInstId, StaEvnt *staEvnt);
 335 void sngisdn_rcv_fac_ind(int16_t suId, uint32_t suInstId, uint32_t spInstId, FacEvnt *facEvnt, uint8_t evntType, int16_t dChan, uint8_t ces);
 336 void sngisdn_rcv_sta_cfm(int16_t suId, uint32_t suInstId, uint32_t spInstId, StaEvnt *staEvnt);
 337 void sngisdn_rcv_srv_ind(int16_t suId, Srv *srvEvnt, int16_t dChan, uint8_t ces);
 338 void sngisdn_rcv_srv_cfm(int16_t suId, Srv *srvEvnt, int16_t dChan, uint8_t ces);
 339 void sngisdn_rcv_rst_cfm(int16_t suId, Rst *rstEvnt, int16_t dChan, uint8_t ces, uint8_t evntType);
 340 void sngisdn_rcv_rst_ind(int16_t suId, Rst *rstEvnt, int16_t dChan, uint8_t ces, uint8_t evntType);
 341 int16_t sngisdn_rcv_l1_data_req(uint16_t spId, sng_l1_frame_t *l1_frame);
 342 int16_t sngisdn_rcv_l1_cmd_req(uint16_t spId, sng_l1_cmd_t *l1_cmd);
 343 
 344 
 345 void sngisdn_process_con_ind (sngisdn_event_data_t *sngisdn_event);
 346 void sngisdn_process_con_cfm (sngisdn_event_data_t *sngisdn_event);
 347 void sngisdn_process_cnst_ind (sngisdn_event_data_t *sngisdn_event);
 348 void sngisdn_process_disc_ind (sngisdn_event_data_t *sngisdn_event);
 349 void sngisdn_process_rel_ind (sngisdn_event_data_t *sngisdn_event);
 350 void sngisdn_process_dat_ind (sngisdn_event_data_t *sngisdn_event);
 351 void sngisdn_process_sshl_ind (sngisdn_event_data_t *sngisdn_event);
 352 void sngisdn_process_sshl_cfm (sngisdn_event_data_t *sngisdn_event);
 353 void sngisdn_process_rmrt_ind (sngisdn_event_data_t *sngisdn_event);
 354 void sngisdn_process_rmrt_cfm (sngisdn_event_data_t *sngisdn_event);
 355 void sngisdn_process_flc_ind (sngisdn_event_data_t *sngisdn_event);
 356 void sngisdn_process_fac_ind (sngisdn_event_data_t *sngisdn_event);
 357 void sngisdn_process_sta_cfm (sngisdn_event_data_t *sngisdn_event);
 358 
 359 void sngisdn_process_srv_ind (sngisdn_event_data_t *sngisdn_event);
 360 void sngisdn_process_srv_cfm (sngisdn_event_data_t *sngisdn_event);
 361 void sngisdn_process_rst_cfm (sngisdn_event_data_t *sngisdn_event);
 362 void sngisdn_process_rst_ind (sngisdn_event_data_t *sngisdn_event);
 363 
 364 void sngisdn_rcv_phy_ind(SuId suId, Reason reason);
 365 void sngisdn_rcv_q921_ind(BdMngmt *status);
 366 
 367 void sngisdn_trace_interpreted_q921(sngisdn_span_data_t *signal_data, ftdm_trace_dir_t dir, uint8_t *data, uint32_t data_len);
 368 void sngisdn_trace_interpreted_q931(sngisdn_span_data_t *signal_data, ftdm_trace_dir_t dir, uint8_t *data, uint32_t data_len);
 369 void sngisdn_trace_raw_q921(sngisdn_span_data_t *signal_data, ftdm_trace_dir_t dir, uint8_t *data, uint32_t data_len);
 370 void sngisdn_trace_raw_q931(sngisdn_span_data_t *signal_data, ftdm_trace_dir_t dir, uint8_t *data, uint32_t data_len);
 371 
 372 void get_memory_info(void);
 373 
 374 ftdm_status_t sng_isdn_activate_trace(ftdm_span_t *span, sngisdn_tracetype_t trace_opt);
 375 ftdm_status_t sngisdn_check_free_ids(void);
 376 
 377 void sngisdn_rcv_q921_trace(BdMngmt *trc, Buffer *mBuf);
 378 void sngisdn_rcv_q931_ind(InMngmt *status);
 379 void sngisdn_rcv_q931_trace(InMngmt *trc, Buffer *mBuf);
 380 void sngisdn_rcv_cc_ind(CcMngmt *status);
 381 void sngisdn_rcv_sng_log(uint8_t level, char *fmt,...);
 382 void sngisdn_rcv_sng_assert(char *message);
 383 
 384 #ifdef NETBORDER_CALL_REF
 385 ftdm_status_t get_callref(ftdm_channel_t *ftdmchan, BCCallRef* callRef);
 386 #endif
 387 ftdm_status_t get_calling_num(ftdm_channel_t *ftdmchan, CgPtyNmb *cgPtyNmb);
 388 ftdm_status_t get_calling_num2(ftdm_channel_t *ftdmchan, CgPtyNmb *cgPtyNmb);
 389 ftdm_status_t get_called_num(ftdm_channel_t *ftdmchan, CdPtyNmb *cdPtyNmb);
 390 ftdm_status_t get_redir_num(ftdm_channel_t *ftdmchan, RedirNmb *redirNmb);
 391 ftdm_status_t get_calling_name_from_display(ftdm_channel_t *ftdmchan, Display *display);
 392 ftdm_status_t get_calling_name_from_usr_usr(ftdm_channel_t *ftdmchan, UsrUsr *usrUsr);
 393 ftdm_status_t get_calling_subaddr(ftdm_channel_t *ftdmchan, CgPtySad *cgPtySad);
 394 ftdm_status_t get_prog_ind_ie(ftdm_channel_t *ftdmchan, ProgInd *progInd);
 395 ftdm_status_t get_facility_ie(ftdm_channel_t *ftdmchan, FacilityStr *facilityStr);
 396 ftdm_status_t get_facility_ie_str(ftdm_channel_t *ftdmchan, uint8_t *data, uint8_t data_len);
 397 
 398 ftdm_status_t set_calling_num(ftdm_channel_t *ftdmchan, CgPtyNmb *cgPtyNmb);
 399 ftdm_status_t set_calling_num2(ftdm_channel_t *ftdmchan, CgPtyNmb *cgPtyNmb);
 400 ftdm_status_t set_called_num(ftdm_channel_t *ftdmchan, CdPtyNmb *cdPtyNmb);
 401 ftdm_status_t set_redir_num(ftdm_channel_t *ftdmchan, RedirNmb *redirNmb);
 402 ftdm_status_t set_calling_name(ftdm_channel_t *ftdmchan, ConEvnt *conEvnt);
 403 ftdm_status_t set_calling_subaddr(ftdm_channel_t *ftdmchan, CgPtySad *cgPtySad);
 404 ftdm_status_t set_prog_ind_ie(ftdm_channel_t *ftdmchan, ProgInd *progInd, ftdm_sngisdn_progind_t prog_ind);
 405 ftdm_status_t set_bear_cap_ie(ftdm_channel_t *ftdmchan, BearCap *bearCap);
 406 ftdm_status_t set_chan_id_ie(ftdm_channel_t *ftdmchan, ChanId *chanId);
 407 ftdm_status_t set_restart_ind_ie(ftdm_channel_t *ftdmchan, RstInd *rstInd);
 408 ftdm_status_t set_facility_ie(ftdm_channel_t *ftdmchan, FacilityStr *facilityStr);
 409 ftdm_status_t set_facility_ie_str(ftdm_channel_t *ftdmchan, uint8_t *data, uint8_t *data_len);
 410 
 411 uint8_t sngisdn_get_infoTranCap_from_user(ftdm_bearer_cap_t bearer_capability);
 412 uint8_t sngisdn_get_usrInfoLyr1Prot_from_user(ftdm_user_layer1_prot_t layer1_prot);
 413 ftdm_bearer_cap_t sngisdn_get_infoTranCap_from_stack(uint8_t bearer_capability);
 414 ftdm_user_layer1_prot_t sngisdn_get_usrInfoLyr1Prot_from_stack(uint8_t layer1_prot);
 415 
 416 static __inline__ uint32_t sngisdn_test_flag(sngisdn_chan_data_t *sngisdn_info, sngisdn_flag_t flag)
 417 {
 418         return (uint32_t) sngisdn_info->flags & flag;
 419 }
 420 static __inline__ void sngisdn_clear_flag(sngisdn_chan_data_t *sngisdn_info, sngisdn_flag_t flag)
 421 {
 422         sngisdn_info->flags &= ~flag;
 423 }
 424 
 425 static __inline__ void sngisdn_set_flag(sngisdn_chan_data_t *sngisdn_info, sngisdn_flag_t flag)
 426 {
 427         sngisdn_info->flags |= flag;
 428 }
 429 
 430 #define sngisdn_set_trace_flag(obj, flag)   ((obj)->trace_flags |= (flag))
 431 #define sngisdn_clear_trace_flag(obj, flag) ((obj)->trace_flags &= ~(flag))
 432 #define sngisdn_test_trace_flag(obj, flag)  ((obj)->trace_flags & flag)
 433 
 434 
 435 void handle_sng_log(uint8_t level, char *fmt,...);
 436 void sngisdn_delayed_setup(void* p_sngisdn_info);
 437 void sngisdn_delayed_release(void* p_sngisdn_info);
 438 void sngisdn_delayed_connect(void* p_sngisdn_info);
 439 void sngisdn_delayed_disconnect(void* p_sngisdn_info);
 440 void sngisdn_facility_timeout(void* p_sngisdn_info);
 441 void sngisdn_t3_timeout(void* p_sngisdn_info);
 442 
 443 /* Stack management functions */
 444 ftdm_status_t sngisdn_stack_cfg(ftdm_span_t *span);
 445 ftdm_status_t sngisdn_stack_start(ftdm_span_t *span);
 446 ftdm_status_t sngisdn_stack_stop(ftdm_span_t *span);
 447 ftdm_status_t sngisdn_wake_up_phy(ftdm_span_t *span);
 448 
 449 void sngisdn_print_phy_stats(ftdm_stream_handle_t *stream, ftdm_span_t *span);
 450 void sngisdn_print_spans(ftdm_stream_handle_t *stream);
 451 void sngisdn_print_span(ftdm_stream_handle_t *stream, ftdm_span_t *span);
 452 
 453 #endif /* __FTMOD_SNG_ISDN_H__ */
 454 
 455 /* For Emacs:
 456  * Local Variables:
 457  * mode:c
 458  * indent-tabs-mode:t
 459  * tab-width:4
 460  * c-basic-offset:4
 461  * End:
 462  * For VIM:
 463  * vim:set softtabstop=4 shiftwidth=4 tabstop=4:
 464  */
 465 
 466 /******************************************************************************/

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