mirror of
https://github.com/signalwire/freeswitch.git
synced 2026-10-30 15:14:17 +00:00
freetdm - ISDN added Q.931 timers
This commit is contained in:
1 parent
959e4ab22d
commit
393ba72c1a
4 files changed
+382
-13
No files matched your search
@@ -71,8 +71,6 @@
|
||||
#define MI_NOTIFY 0x14
|
||||
#endif
|
||||
|
||||
/* TODO: rename all *_cc_* to *_an_* */
|
||||
|
||||
typedef enum {
|
||||
FLAG_RESET_RX = (1 << 0),
|
||||
FLAG_RESET_TX = (1 << 1),
|
||||
@@ -262,7 +260,7 @@ typedef struct sngisdn_span_data {
|
||||
uint8_t setup_arb;
|
||||
uint8_t facility_ie_decode;
|
||||
uint8_t facility;
|
||||
int8_t facility_timeout;
|
||||
int32_t facility_timeout;
|
||||
uint8_t att_remove_dtmf;
|
||||
int32_t transfer_timeout;
|
||||
uint8_t num_local_numbers;
|
||||
@@ -277,6 +275,24 @@ typedef struct sngisdn_span_data {
|
||||
uint8_t force_sending_complete;
|
||||
uint8_t cid_name_method;
|
||||
uint8_t send_cid_name;
|
||||
|
||||
int32_t timer_t301;
|
||||
int32_t timer_t302;
|
||||
int32_t timer_t303;
|
||||
int32_t timer_t304;
|
||||
int32_t timer_t305;
|
||||
int32_t timer_t306;
|
||||
int32_t timer_t307;
|
||||
int32_t timer_t308;
|
||||
int32_t timer_t310;
|
||||
int32_t timer_t312;
|
||||
int32_t timer_t313;
|
||||
int32_t timer_t314;
|
||||
int32_t timer_t316;
|
||||
int32_t timer_t318;
|
||||
int32_t timer_t319;
|
||||
int32_t timer_t322;
|
||||
|
||||
char* local_numbers[SNGISDN_NUM_LOCAL_NUMBERS];
|
||||
ftdm_timer_id_t timers[SNGISDN_NUM_SPAN_TIMERS];
|
||||
ftdm_sched_t *sched;
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
|
||||
#include "ftmod_sangoma_isdn.h"
|
||||
|
||||
static ftdm_status_t parse_timer(const char* val, int32_t *target);
|
||||
static ftdm_status_t parse_switchtype(const char* switch_name, ftdm_span_t *span);
|
||||
static ftdm_status_t parse_signalling(const char* signalling, ftdm_span_t *span);
|
||||
static ftdm_status_t add_local_number(const char* val, ftdm_span_t *span);
|
||||
@@ -42,6 +43,16 @@ static ftdm_status_t set_switchtype_defaults(ftdm_span_t *span);
|
||||
|
||||
extern ftdm_sngisdn_data_t g_sngisdn_data;
|
||||
|
||||
|
||||
static ftdm_status_t parse_timer(const char* val, int32_t *target)
|
||||
{
|
||||
*target = atoi(val);
|
||||
if (*target < 0) {
|
||||
*target = 0;
|
||||
}
|
||||
return FTDM_SUCCESS;
|
||||
}
|
||||
|
||||
static ftdm_status_t parse_yesno(const char* var, const char* val, uint8_t *target)
|
||||
{
|
||||
if (ftdm_true(val)) {
|
||||
@@ -369,15 +380,9 @@ ftdm_status_t ftmod_isdn_parse_cfg(ftdm_conf_parameter_t *ftdm_parameters, ftdm_
|
||||
return FTDM_FAIL;
|
||||
}
|
||||
} else if (!strcasecmp(var, "facility-timeout")) {
|
||||
signal_data->facility_timeout = atoi(val);
|
||||
if (signal_data->facility_timeout < 0) {
|
||||
signal_data->facility_timeout = 0;
|
||||
}
|
||||
parse_timer(val, &signal_data->facility_timeout);
|
||||
} else if (!strcasecmp(var, "transfer-timeout")) {
|
||||
signal_data->transfer_timeout = atoi(val);
|
||||
if (signal_data->transfer_timeout < 0) {
|
||||
signal_data->transfer_timeout = 0;
|
||||
}
|
||||
parse_timer(val, &signal_data->transfer_timeout);
|
||||
} else if (!strcasecmp(var, "att-remove-dtmf")) {
|
||||
parse_yesno(var, val, &signal_data->att_remove_dtmf);
|
||||
} else if (!strcasecmp(var, "facility-ie-decode")) {
|
||||
@@ -428,6 +433,38 @@ ftdm_status_t ftmod_isdn_parse_cfg(ftdm_conf_parameter_t *ftdm_parameters, ftdm_
|
||||
ftdm_log(FTDM_LOG_WARNING, "Invalid option %s for parameter %s\n", val, var);
|
||||
signal_data->send_cid_name = SNGISDN_OPT_DEFAULT;
|
||||
}
|
||||
} else if (!strcasecmp(var, "timer-t301")) {
|
||||
parse_timer(val, &signal_data->timer_t301);
|
||||
} else if (!strcasecmp(var, "timer-t302")) {
|
||||
parse_timer(val, &signal_data->timer_t302);
|
||||
} else if (!strcasecmp(var, "timer-t303")) {
|
||||
parse_timer(val, &signal_data->timer_t303);
|
||||
} else if (!strcasecmp(var, "timer-t304")) {
|
||||
parse_timer(val, &signal_data->timer_t304);
|
||||
} else if (!strcasecmp(var, "timer-t305")) {
|
||||
parse_timer(val, &signal_data->timer_t305);
|
||||
} else if (!strcasecmp(var, "timer-t306")) {
|
||||
parse_timer(val, &signal_data->timer_t306);
|
||||
} else if (!strcasecmp(var, "timer-t307")) {
|
||||
parse_timer(val, &signal_data->timer_t307);
|
||||
} else if (!strcasecmp(var, "timer-t308")) {
|
||||
parse_timer(val, &signal_data->timer_t308);
|
||||
} else if (!strcasecmp(var, "timer-t310")) {
|
||||
parse_timer(val, &signal_data->timer_t310);
|
||||
} else if (!strcasecmp(var, "timer-t312")) {
|
||||
parse_timer(val, &signal_data->timer_t312);
|
||||
} else if (!strcasecmp(var, "timer-t313")) {
|
||||
parse_timer(val, &signal_data->timer_t313);
|
||||
} else if (!strcasecmp(var, "timer-t314")) {
|
||||
parse_timer(val, &signal_data->timer_t314);
|
||||
} else if (!strcasecmp(var, "timer-t316")) {
|
||||
parse_timer(val, &signal_data->timer_t316);
|
||||
} else if (!strcasecmp(var, "timer-t318")) {
|
||||
parse_timer(val, &signal_data->timer_t318);
|
||||
} else if (!strcasecmp(var, "timer-t319")) {
|
||||
parse_timer(val, &signal_data->timer_t319);
|
||||
} else if (!strcasecmp(var, "timer-t322")) {
|
||||
parse_timer(val, &signal_data->timer_t322);
|
||||
} else {
|
||||
ftdm_log(FTDM_LOG_WARNING, "Ignoring unknown parameter %s\n", ftdm_parameters[paramindex].var);
|
||||
}
|
||||
|
||||
@@ -746,10 +746,12 @@ ftdm_status_t sngisdn_stack_cfg_q931_dlsap(ftdm_span_t *span)
|
||||
cfg.t.cfg.s.inDLSAP.redirAdr.eh.pres = NOTPRSNT; /* redirAdr Numbering Plan */
|
||||
cfg.t.cfg.s.inDLSAP.forwSubsc = FALSE; /* programmed forwarding subscription */
|
||||
cfg.t.cfg.s.inDLSAP.cndSubsc = TRUE; /* calling adddress delivery service subscription */
|
||||
|
||||
/* TODO: Fill in these timers with proper values - eventually pass them */
|
||||
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t301.enb = TRUE;
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t301.val = 180;
|
||||
if (signal_data->timer_t301 > 0) {
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t301.val = signal_data->timer_t301;
|
||||
}
|
||||
|
||||
/* It looks like ETSI is the only variant that supports Overlap */
|
||||
if (signal_data->switchtype == SNGISDN_SWITCH_EUROISDN) {
|
||||
@@ -760,19 +762,52 @@ ftdm_status_t sngisdn_stack_cfg_q931_dlsap(ftdm_span_t *span)
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t302.val = 0;
|
||||
}
|
||||
|
||||
if (signal_data->timer_t302 > 0) {
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t302.val = signal_data->timer_t302;
|
||||
}
|
||||
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t303.enb = TRUE;
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t303.val = 4;
|
||||
|
||||
if (signal_data->timer_t303 > 0) {
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t303.val = signal_data->timer_t303;
|
||||
}
|
||||
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t304.enb = TRUE;
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t304.val = 30;
|
||||
|
||||
if (signal_data->timer_t304 > 0) {
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t304.val = signal_data->timer_t304;
|
||||
}
|
||||
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t305.enb = TRUE;
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t305.val = 30;
|
||||
|
||||
if (signal_data->timer_t305 > 0) {
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t305.val = signal_data->timer_t305;
|
||||
}
|
||||
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t306.enb = FALSE;
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t306.val = 35;
|
||||
|
||||
if (signal_data->timer_t306 > 0) {
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t306.val = signal_data->timer_t306;
|
||||
}
|
||||
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t307.enb = FALSE;
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t307.val = 35;
|
||||
|
||||
if (signal_data->timer_t307 > 0) {
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t307.val = signal_data->timer_t307;
|
||||
}
|
||||
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t308.enb = TRUE;
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t308.val = 4;
|
||||
|
||||
if (signal_data->timer_t308 > 0) {
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t308.val = signal_data->timer_t308;
|
||||
}
|
||||
|
||||
if (signal_data->signalling == SNGISDN_SIGNALING_NET) {
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t310.enb = TRUE;
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t310.val = 10;
|
||||
@@ -784,18 +819,52 @@ ftdm_status_t sngisdn_stack_cfg_q931_dlsap(ftdm_span_t *span)
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t312.enb = FALSE;
|
||||
}
|
||||
|
||||
if (signal_data->timer_t310 > 0) {
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t310.val = signal_data->timer_t310;
|
||||
}
|
||||
|
||||
if (signal_data->timer_t312 > 0) {
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t312.val = signal_data->timer_t312;
|
||||
}
|
||||
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t313.enb = TRUE;
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t313.val = 4;
|
||||
|
||||
if (signal_data->timer_t313 > 0) {
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t313.val = signal_data->timer_t313;
|
||||
}
|
||||
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t316.enb = TRUE;
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t316.val = 120;
|
||||
|
||||
if (signal_data->timer_t316 > 0) {
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t316.val = signal_data->timer_t316;
|
||||
}
|
||||
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t316c.enb = FALSE;
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t316c.val = 35;
|
||||
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t318.enb = TRUE;
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t318.val = 4;
|
||||
|
||||
if (signal_data->timer_t318 > 0) {
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t318.val = signal_data->timer_t318;
|
||||
}
|
||||
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t319.enb = TRUE;
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t319.val = 4;
|
||||
|
||||
if (signal_data->timer_t319 > 0) {
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t319.val = signal_data->timer_t319;
|
||||
}
|
||||
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t322.enb = TRUE;
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t322.val = 4;
|
||||
|
||||
if (signal_data->timer_t322 > 0) {
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t322.val = signal_data->timer_t322;
|
||||
}
|
||||
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t332.enb = FALSE;
|
||||
cfg.t.cfg.s.inDLSAP.tmr.t332.val = 35;
|
||||
|
||||
|
||||
Reference in new issue
Block a user