Merge branch 'smgfs'
This commit is contained in:
commit
7dcddfa881
|
@ -38,8 +38,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define _GNU_SOURCE
|
#define _GNU_SOURCE
|
||||||
#ifndef WIN32
|
|
||||||
#endif
|
|
||||||
#include "private/ftdm_core.h"
|
#include "private/ftdm_core.h"
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
@ -1766,16 +1764,26 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_open_chan(ftdm_channel_t *ftdmchan)
|
||||||
|
|
||||||
ftdm_mutex_lock(ftdmchan->mutex);
|
ftdm_mutex_lock(ftdmchan->mutex);
|
||||||
|
|
||||||
if (ftdm_test_flag(ftdmchan, FTDM_CHANNEL_SUSPENDED)) {
|
if (FTDM_IS_VOICE_CHANNEL(ftdmchan)) {
|
||||||
snprintf(ftdmchan->last_error, sizeof(ftdmchan->last_error), "%s", "Channel is suspended\n");
|
if (ftdm_test_flag(ftdmchan, FTDM_CHANNEL_SUSPENDED)) {
|
||||||
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_WARNING, "Cannot open channel when is suspended\n");
|
snprintf(ftdmchan->last_error, sizeof(ftdmchan->last_error), "%s", "Channel is suspended\n");
|
||||||
goto done;
|
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_WARNING, "Cannot open channel when is suspended\n");
|
||||||
}
|
goto done;
|
||||||
|
}
|
||||||
if (ftdm_test_flag(ftdmchan, FTDM_CHANNEL_IN_ALARM) && !ftdm_test_flag(ftdmchan->span, FTDM_SPAN_PWR_SAVING)) {
|
|
||||||
snprintf(ftdmchan->last_error, sizeof(ftdmchan->last_error), "%s", "Channel is alarmed\n");
|
if (ftdm_test_flag(ftdmchan, FTDM_CHANNEL_IN_ALARM) && !ftdm_test_flag(ftdmchan->span, FTDM_SPAN_PWR_SAVING)) {
|
||||||
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_WARNING, "Cannot open channel when is alarmed\n");
|
snprintf(ftdmchan->last_error, sizeof(ftdmchan->last_error), "%s", "Channel is alarmed\n");
|
||||||
goto done;
|
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_WARNING, "Cannot open channel when is alarmed\n");
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (globals.cpu_monitor.alarm &&
|
||||||
|
globals.cpu_monitor.alarm_action_flags & FTDM_CPU_ALARM_ACTION_REJECT) {
|
||||||
|
snprintf(ftdmchan->last_error, sizeof(ftdmchan->last_error), "%s", "CPU usage alarm is on - refusing to open channel\n");
|
||||||
|
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_WARNING, "CPU usage alarm is on - refusing to open channel\n");
|
||||||
|
ftdmchan->caller_data.hangup_cause = FTDM_CAUSE_SWITCH_CONGESTION;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ftdm_test_flag(ftdmchan, FTDM_CHANNEL_READY)) {
|
if (!ftdm_test_flag(ftdmchan, FTDM_CHANNEL_READY)) {
|
||||||
|
@ -1784,15 +1792,6 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_open_chan(ftdm_channel_t *ftdmchan)
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (globals.cpu_monitor.alarm &&
|
|
||||||
globals.cpu_monitor.alarm_action_flags & FTDM_CPU_ALARM_ACTION_REJECT) {
|
|
||||||
snprintf(ftdmchan->last_error, sizeof(ftdmchan->last_error), "%s", "CPU usage alarm is on - refusing to open channel\n");
|
|
||||||
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_WARNING, "CPU usage alarm is on - refusing to open channel\n");
|
|
||||||
ftdmchan->caller_data.hangup_cause = FTDM_CAUSE_SWITCH_CONGESTION;
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
status = ftdmchan->fio->open(ftdmchan);
|
status = ftdmchan->fio->open(ftdmchan);
|
||||||
if (status == FTDM_SUCCESS) {
|
if (status == FTDM_SUCCESS) {
|
||||||
ftdm_set_flag(ftdmchan, FTDM_CHANNEL_OPEN | FTDM_CHANNEL_INUSE);
|
ftdm_set_flag(ftdmchan, FTDM_CHANNEL_OPEN | FTDM_CHANNEL_INUSE);
|
||||||
|
|
|
@ -799,9 +799,7 @@ static void ftdm_sangoma_isdn_process_state_change(ftdm_channel_t *ftdmchan)
|
||||||
break;
|
break;
|
||||||
case FTDM_CHANNEL_STATE_DOWN: /* the call is finished and removed */
|
case FTDM_CHANNEL_STATE_DOWN: /* the call is finished and removed */
|
||||||
{
|
{
|
||||||
uint8_t glare = 0;
|
uint8_t glare = sngisdn_test_flag(sngisdn_info, FLAG_GLARE);
|
||||||
|
|
||||||
glare = sngisdn_test_flag(sngisdn_info, FLAG_GLARE);
|
|
||||||
/* clear all of the call specific data store in the channel structure */
|
/* clear all of the call specific data store in the channel structure */
|
||||||
clear_call_data(sngisdn_info);
|
clear_call_data(sngisdn_info);
|
||||||
|
|
||||||
|
|
|
@ -64,6 +64,33 @@
|
||||||
|
|
||||||
/* TODO: rename all *_cc_* to *_an_* */
|
/* TODO: rename all *_cc_* to *_an_* */
|
||||||
|
|
||||||
|
#define SNGISDN_ENUM_NAMES(_NAME, _STRINGS) static const char * _NAME [] = { _STRINGS , NULL };
|
||||||
|
#define SNGISDN_STR2ENUM_P(_FUNC1, _FUNC2, _TYPE) _TYPE _FUNC1 (const char *name); const char * _FUNC2 (_TYPE type);
|
||||||
|
#define SNGISDN_STR2ENUM(_FUNC1, _FUNC2, _TYPE, _STRINGS, _MAX) \
|
||||||
|
_TYPE _FUNC1 (const char *name) \
|
||||||
|
{ \
|
||||||
|
int i; \
|
||||||
|
_TYPE t = _MAX ; \
|
||||||
|
\
|
||||||
|
for (i = 0; i < _MAX ; i++) { \
|
||||||
|
if (!strcasecmp(name, _STRINGS[i])) { \
|
||||||
|
t = (_TYPE) i; \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
return t; \
|
||||||
|
} \
|
||||||
|
const char * _FUNC2 (_TYPE type) \
|
||||||
|
{ \
|
||||||
|
if (type > _MAX) { \
|
||||||
|
type = _MAX; \
|
||||||
|
} \
|
||||||
|
return _STRINGS[(int)type]; \
|
||||||
|
} \
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
FLAG_RESET_RX = (1 << 0),
|
FLAG_RESET_RX = (1 << 0),
|
||||||
FLAG_RESET_TX = (1 << 1),
|
FLAG_RESET_TX = (1 << 1),
|
||||||
|
@ -153,7 +180,7 @@ typedef enum {
|
||||||
SNGISDN_PROGIND_DESCR_INVALID,
|
SNGISDN_PROGIND_DESCR_INVALID,
|
||||||
} ftdm_sngisdn_progind_descr_t;
|
} ftdm_sngisdn_progind_descr_t;
|
||||||
#define SNGISDN_PROGIND_DESCR_STRINGS "not-end-to-end-isdn", "destination-is-non-isdn", "origination-is-non-isdn", "call-returned-to-isdn", "service-change", "inband-info-available", "invalid"
|
#define SNGISDN_PROGIND_DESCR_STRINGS "not-end-to-end-isdn", "destination-is-non-isdn", "origination-is-non-isdn", "call-returned-to-isdn", "service-change", "inband-info-available", "invalid"
|
||||||
FTDM_STR2ENUM_P(ftdm_str2ftdm_sngisdn_progind_descr, ftdm_sngisdn_progind_descr2str, ftdm_sngisdn_progind_descr_t);
|
SNGISDN_STR2ENUM_P(ftdm_str2ftdm_sngisdn_progind_descr, ftdm_sngisdn_progind_descr2str, ftdm_sngisdn_progind_descr_t);
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
/* User */
|
/* User */
|
||||||
|
@ -174,7 +201,7 @@ typedef enum {
|
||||||
SNGISDN_PROGIND_LOC_INVALID,
|
SNGISDN_PROGIND_LOC_INVALID,
|
||||||
} ftdm_sngisdn_progind_loc_t;
|
} ftdm_sngisdn_progind_loc_t;
|
||||||
#define SNGISDN_PROGIND_LOC_STRINGS "user", "private-net-local-user", "public-net-local-user", "transit-network", "public-net-remote-user", "private-net-remote-user", "beyond-interworking", "invalid"
|
#define SNGISDN_PROGIND_LOC_STRINGS "user", "private-net-local-user", "public-net-local-user", "transit-network", "public-net-remote-user", "private-net-remote-user", "beyond-interworking", "invalid"
|
||||||
FTDM_STR2ENUM_P(ftdm_str2ftdm_sngisdn_progind_loc, ftdm_sngisdn_progind_loc2str, ftdm_sngisdn_progind_loc_t);
|
SNGISDN_STR2ENUM_P(ftdm_str2ftdm_sngisdn_progind_loc, ftdm_sngisdn_progind_loc2str, ftdm_sngisdn_progind_loc_t);
|
||||||
|
|
||||||
typedef struct ftdm_sngisdn_prog_ind {
|
typedef struct ftdm_sngisdn_prog_ind {
|
||||||
ftdm_sngisdn_progind_loc_t loc; /* location */
|
ftdm_sngisdn_progind_loc_t loc; /* location */
|
||||||
|
|
|
@ -280,7 +280,7 @@ ftdm_status_t ftmod_isdn_parse_cfg(ftdm_conf_parameter_t *ftdm_parameters, ftdm_
|
||||||
} else if (!strcasecmp(var, "outbound-bearer_cap")) {
|
} else if (!strcasecmp(var, "outbound-bearer_cap")) {
|
||||||
ftdm_set_bearer_capability(val, (uint8_t*)&span->default_caller_data.bearer_capability);
|
ftdm_set_bearer_capability(val, (uint8_t*)&span->default_caller_data.bearer_capability);
|
||||||
} else if (!strcasecmp(var, "outbound-bearer_layer1")) {
|
} else if (!strcasecmp(var, "outbound-bearer_layer1")) {
|
||||||
ftdm_set_bearer_layer1(val, &span->default_caller_data.bearer_layer1);
|
ftdm_set_bearer_layer1(val, (uint8_t*)&span->default_caller_data.bearer_layer1);
|
||||||
} else if (!strcasecmp(var, "channel-restart-on-link-up")) {
|
} else if (!strcasecmp(var, "channel-restart-on-link-up")) {
|
||||||
parse_yesno(var, val, &signal_data->restart_opt);
|
parse_yesno(var, val, &signal_data->restart_opt);
|
||||||
} else if (!strcasecmp(var, "local-number")) {
|
} else if (!strcasecmp(var, "local-number")) {
|
||||||
|
|
|
@ -255,10 +255,9 @@ void sngisdn_process_con_cfm (sngisdn_event_data_t *sngisdn_event)
|
||||||
uint8_t ces = sngisdn_event->ces;
|
uint8_t ces = sngisdn_event->ces;
|
||||||
sngisdn_chan_data_t *sngisdn_info = sngisdn_event->sngisdn_info;
|
sngisdn_chan_data_t *sngisdn_info = sngisdn_event->sngisdn_info;
|
||||||
ftdm_channel_t *ftdmchan = sngisdn_info->ftdmchan;
|
ftdm_channel_t *ftdmchan = sngisdn_info->ftdmchan;
|
||||||
|
|
||||||
ISDN_FUNC_TRACE_ENTER(__FUNCTION__);
|
|
||||||
|
|
||||||
CnStEvnt *cnStEvnt = &sngisdn_event->event.cnStEvnt;
|
CnStEvnt *cnStEvnt = &sngisdn_event->event.cnStEvnt;
|
||||||
|
|
||||||
|
ISDN_FUNC_TRACE_ENTER(__FUNCTION__);
|
||||||
|
|
||||||
ftdm_assert(!ftdm_test_flag(ftdmchan, FTDM_CHANNEL_STATE_CHANGE), "State change flag pending\n");
|
ftdm_assert(!ftdm_test_flag(ftdmchan, FTDM_CHANNEL_STATE_CHANGE), "State change flag pending\n");
|
||||||
|
|
||||||
|
|
|
@ -37,11 +37,11 @@
|
||||||
|
|
||||||
/* ftmod_sangoma_isdn specific enum look-up functions */
|
/* ftmod_sangoma_isdn specific enum look-up functions */
|
||||||
|
|
||||||
FTDM_ENUM_NAMES(SNGISDN_PROGIND_DESCR_NAMES, SNGISDN_PROGIND_DESCR_STRINGS)
|
SNGISDN_ENUM_NAMES(SNGISDN_PROGIND_DESCR_NAMES, SNGISDN_PROGIND_DESCR_STRINGS)
|
||||||
FTDM_STR2ENUM(ftdm_str2ftdm_sngisdn_progind_descr, ftdm_sngisdn_progind_descr2str, ftdm_sngisdn_progind_descr_t, SNGISDN_PROGIND_DESCR_NAMES, SNGISDN_PROGIND_DESCR_INVALID)
|
SNGISDN_STR2ENUM(ftdm_str2ftdm_sngisdn_progind_descr, ftdm_sngisdn_progind_descr2str, ftdm_sngisdn_progind_descr_t, SNGISDN_PROGIND_DESCR_NAMES, SNGISDN_PROGIND_DESCR_INVALID)
|
||||||
|
|
||||||
FTDM_ENUM_NAMES(SNGISDN_PROGIND_LOC_NAMES, SNGISDN_PROGIND_LOC_STRINGS)
|
SNGISDN_ENUM_NAMES(SNGISDN_PROGIND_LOC_NAMES, SNGISDN_PROGIND_LOC_STRINGS)
|
||||||
FTDM_STR2ENUM(ftdm_str2ftdm_sngisdn_progind_loc, ftdm_sngisdn_progind_loc2str, ftdm_sngisdn_progind_loc_t, SNGISDN_PROGIND_LOC_NAMES, SNGISDN_PROGIND_LOC_INVALID)
|
SNGISDN_STR2ENUM(ftdm_str2ftdm_sngisdn_progind_loc, ftdm_sngisdn_progind_loc2str, ftdm_sngisdn_progind_loc_t, SNGISDN_PROGIND_LOC_NAMES, SNGISDN_PROGIND_LOC_INVALID)
|
||||||
|
|
||||||
ftdm_status_t sngisdn_check_free_ids(void);
|
ftdm_status_t sngisdn_check_free_ids(void);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue