Merge branch 'master' of git.sangoma.com:smg_freeswitch
This commit is contained in:
commit
1526f83c09
|
@ -1690,6 +1690,7 @@ static FIO_SIGNAL_CB_FUNCTION(on_fxo_signal)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case FTDM_SIGEVENT_RELEASED: { /* twiddle */ } break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
|
@ -1744,6 +1745,7 @@ static FIO_SIGNAL_CB_FUNCTION(on_fxs_signal)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case FTDM_SIGEVENT_RELEASED: { /* twiddle */ } break;
|
||||||
case FTDM_SIGEVENT_STOP:
|
case FTDM_SIGEVENT_STOP:
|
||||||
{
|
{
|
||||||
private_t *tech_pvt = NULL;
|
private_t *tech_pvt = NULL;
|
||||||
|
@ -1967,6 +1969,8 @@ static FIO_SIGNAL_CB_FUNCTION(on_r2_signal)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case FTDM_SIGEVENT_RELEASED: { /* twiddle */ } break;
|
||||||
|
|
||||||
/* on DNIS received from the R2 forward side, return status == FTDM_BREAK to stop requesting DNIS */
|
/* on DNIS received from the R2 forward side, return status == FTDM_BREAK to stop requesting DNIS */
|
||||||
case FTDM_SIGEVENT_COLLECTED_DIGIT:
|
case FTDM_SIGEVENT_COLLECTED_DIGIT:
|
||||||
{
|
{
|
||||||
|
@ -2028,6 +2032,14 @@ static FIO_SIGNAL_CB_FUNCTION(on_r2_signal)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case FTDM_SIGEVENT_SIGSTATUS_CHANGED:
|
||||||
|
{
|
||||||
|
ftdm_signaling_status_t sigstatus = sigmsg->raw_data ? *((ftdm_signaling_status_t*)(sigmsg->raw_data)) : sigmsg->sigstatus;
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "%d:%d signalling changed to: %s\n",
|
||||||
|
spanid, chanid, ftdm_signaling_status2str(sigstatus));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Unhandled event %d from R2 for channel %d:%d\n",
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Unhandled event %d from R2 for channel %d:%d\n",
|
||||||
|
@ -2063,6 +2075,9 @@ static FIO_SIGNAL_CB_FUNCTION(on_clear_channel_signal)
|
||||||
return ftdm_channel_from_event(sigmsg, &session);
|
return ftdm_channel_from_event(sigmsg, &session);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case FTDM_SIGEVENT_RELEASED: { /* twiddle */ } break;
|
||||||
|
|
||||||
case FTDM_SIGEVENT_STOP:
|
case FTDM_SIGEVENT_STOP:
|
||||||
case FTDM_SIGEVENT_RESTART:
|
case FTDM_SIGEVENT_RESTART:
|
||||||
{
|
{
|
||||||
|
|
|
@ -2387,6 +2387,16 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_done(ftdm_channel_t *ftdmchan)
|
||||||
|
|
||||||
ftdm_log(FTDM_LOG_DEBUG, "channel done %u:%u\n", ftdmchan->span_id, ftdmchan->chan_id);
|
ftdm_log(FTDM_LOG_DEBUG, "channel done %u:%u\n", ftdmchan->span_id, ftdmchan->chan_id);
|
||||||
|
|
||||||
|
if (FTDM_IS_VOICE_CHANNEL(ftdmchan)) {
|
||||||
|
ftdm_sigmsg_t sigmsg;
|
||||||
|
memset(&sigmsg, 0, sizeof(sigmsg));
|
||||||
|
sigmsg.span_id = ftdmchan->span_id;
|
||||||
|
sigmsg.chan_id = ftdmchan->chan_id;
|
||||||
|
sigmsg.channel = ftdmchan;
|
||||||
|
sigmsg.event_id = FTDM_SIGEVENT_RELEASED;
|
||||||
|
ftdm_span_send_signal(ftdmchan->span, &sigmsg);
|
||||||
|
}
|
||||||
|
|
||||||
ftdm_mutex_unlock(ftdmchan->mutex);
|
ftdm_mutex_unlock(ftdmchan->mutex);
|
||||||
|
|
||||||
return FTDM_SUCCESS;
|
return FTDM_SUCCESS;
|
||||||
|
|
|
@ -60,9 +60,9 @@
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
AdditionalDependencies="freetdm.lib openr2.lib"
|
AdditionalDependencies="freetdm.lib libopenr2.lib"
|
||||||
LinkIncremental="2"
|
LinkIncremental="2"
|
||||||
AdditionalLibraryDirectories=""C:\Program Files\openr2\lib";"$(OutDir)""
|
AdditionalLibraryDirectories=""$(OutDir)";"C:\Program Files\openr2\lib""
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
TargetMachine="1"
|
TargetMachine="1"
|
||||||
|
|
|
@ -220,6 +220,23 @@ static char *strsep(char **stringp, const char *delim)
|
||||||
}
|
}
|
||||||
#endif /* WIN32 */
|
#endif /* WIN32 */
|
||||||
|
|
||||||
|
static void ftdm_r2_set_chan_sig_status(ftdm_channel_t *ftdmchan, ftdm_signaling_status_t status)
|
||||||
|
{
|
||||||
|
ftdm_sigmsg_t sig;
|
||||||
|
ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Signalling link status changed to %s\n", ftdm_signaling_status2str(status));
|
||||||
|
|
||||||
|
memset(&sig, 0, sizeof(sig));
|
||||||
|
sig.chan_id = ftdmchan->chan_id;
|
||||||
|
sig.span_id = ftdmchan->span_id;
|
||||||
|
sig.channel = ftdmchan;
|
||||||
|
sig.event_id = FTDM_SIGEVENT_SIGSTATUS_CHANGED;
|
||||||
|
sig.sigstatus = status;
|
||||||
|
if (ftdm_span_send_signal(ftdmchan->span, &sig) != FTDM_SUCCESS) {
|
||||||
|
ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "Failed to change channel status to %s\n", ftdm_signaling_status2str(status));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
static ftdm_call_cause_t ftdm_r2_cause_to_ftdm_cause(ftdm_channel_t *fchan, openr2_call_disconnect_cause_t cause)
|
static ftdm_call_cause_t ftdm_r2_cause_to_ftdm_cause(ftdm_channel_t *fchan, openr2_call_disconnect_cause_t cause)
|
||||||
{
|
{
|
||||||
switch (cause) {
|
switch (cause) {
|
||||||
|
@ -593,17 +610,14 @@ static void ftdm_r2_on_line_blocked(openr2_chan_t *r2chan)
|
||||||
{
|
{
|
||||||
ftdm_channel_t *ftdmchan = openr2_chan_get_client_data(r2chan);
|
ftdm_channel_t *ftdmchan = openr2_chan_get_client_data(r2chan);
|
||||||
ftdm_log_chan(ftdmchan, FTDM_LOG_NOTICE, "Far end blocked in state %s\n", ftdm_channel_state2str(ftdmchan->state));
|
ftdm_log_chan(ftdmchan, FTDM_LOG_NOTICE, "Far end blocked in state %s\n", ftdm_channel_state2str(ftdmchan->state));
|
||||||
ftdm_set_flag(ftdmchan, FTDM_CHANNEL_SUSPENDED);
|
ftdm_r2_set_chan_sig_status(ftdmchan, FTDM_SIG_STATE_SUSPENDED);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ftdm_r2_on_line_idle(openr2_chan_t *r2chan)
|
static void ftdm_r2_on_line_idle(openr2_chan_t *r2chan)
|
||||||
{
|
{
|
||||||
ftdm_channel_t *ftdmchan = openr2_chan_get_client_data(r2chan);
|
ftdm_channel_t *ftdmchan = openr2_chan_get_client_data(r2chan);
|
||||||
ftdm_log_chan(ftdmchan, FTDM_LOG_NOTICE, "Far end unblocked in state %s\n", ftdm_channel_state2str(ftdmchan->state));
|
ftdm_log_chan(ftdmchan, FTDM_LOG_NOTICE, "Far end unblocked in state %s\n", ftdm_channel_state2str(ftdmchan->state));
|
||||||
ftdm_clear_flag(ftdmchan, FTDM_CHANNEL_SUSPENDED);
|
ftdm_r2_set_chan_sig_status(ftdmchan, FTDM_SIG_STATE_UP);
|
||||||
|
|
||||||
/* XXX when should we set/unset this flag? XXX */
|
|
||||||
ftdm_set_flag(ftdmchan, FTDM_CHANNEL_SIG_UP);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ftdm_r2_write_log(openr2_log_level_t level, const char *file, const char *function, int line, const char *message)
|
static void ftdm_r2_write_log(openr2_log_level_t level, const char *file, const char *function, int line, const char *message)
|
||||||
|
@ -1130,6 +1144,9 @@ static FIO_SIG_CONFIGURE_FUNCTION(ftdm_r2_configure_span)
|
||||||
span->signal_data = r2data;
|
span->signal_data = r2data;
|
||||||
span->outgoing_call = r2_outgoing_call;
|
span->outgoing_call = r2_outgoing_call;
|
||||||
|
|
||||||
|
/* use signals queue */
|
||||||
|
ftdm_set_flag(span, FTDM_SPAN_USE_SIGNALS_QUEUE);
|
||||||
|
|
||||||
return FTDM_SUCCESS;
|
return FTDM_SUCCESS;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
|
@ -1439,6 +1456,7 @@ static void *ftdm_r2_run(ftdm_thread_t *me, void *obj)
|
||||||
} else if (status != FTDM_TIMEOUT) {
|
} else if (status != FTDM_TIMEOUT) {
|
||||||
ftdm_log(FTDM_LOG_ERROR, "ftdm_span_poll_event returned %d.\n", status);
|
ftdm_log(FTDM_LOG_ERROR, "ftdm_span_poll_event returned %d.\n", status);
|
||||||
}
|
}
|
||||||
|
ftdm_span_trigger_signals(span);
|
||||||
ftdm_sleep(20);
|
ftdm_sleep(20);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -333,8 +333,8 @@ static unsigned wp_open_range(ftdm_span_t *span, unsigned spanno, unsigned start
|
||||||
ftdm_log(FTDM_LOG_ERROR, "Failed to enable RBS/CAS events in device %d:%d fd:%d\n", chan->span_id, chan->chan_id, sockfd);
|
ftdm_log(FTDM_LOG_ERROR, "Failed to enable RBS/CAS events in device %d:%d fd:%d\n", chan->span_id, chan->chan_id, sockfd);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
/* probably done by the driver but lets write defensive code this time */
|
|
||||||
sangoma_flush_bufs(chan->sockfd, &tdm_api);
|
sangoma_flush_bufs(chan->sockfd, &tdm_api);
|
||||||
|
sangoma_flush_event_bufs(chan->sockfd, &tdm_api);
|
||||||
#else
|
#else
|
||||||
/*
|
/*
|
||||||
* With wanpipe 3.4.4.2 I get failure even though the events are enabled, /var/log/messages said:
|
* With wanpipe 3.4.4.2 I get failure even though the events are enabled, /var/log/messages said:
|
||||||
|
@ -514,9 +514,6 @@ static FIO_OPEN_FUNCTION(wanpipe_open)
|
||||||
|
|
||||||
memset(&tdm_api,0,sizeof(tdm_api));
|
memset(&tdm_api,0,sizeof(tdm_api));
|
||||||
sangoma_tdm_flush_bufs(ftdmchan->sockfd, &tdm_api);
|
sangoma_tdm_flush_bufs(ftdmchan->sockfd, &tdm_api);
|
||||||
#ifdef LIBSANGOMA_VERSION
|
|
||||||
sangoma_flush_event_bufs(ftdmchan->sockfd, &tdm_api);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (ftdmchan->type == FTDM_CHAN_TYPE_DQ921 || ftdmchan->type == FTDM_CHAN_TYPE_DQ931) {
|
if (ftdmchan->type == FTDM_CHAN_TYPE_DQ921 || ftdmchan->type == FTDM_CHAN_TYPE_DQ931) {
|
||||||
ftdmchan->native_codec = ftdmchan->effective_codec = FTDM_CODEC_NONE;
|
ftdmchan->native_codec = ftdmchan->effective_codec = FTDM_CODEC_NONE;
|
||||||
|
|
|
@ -287,6 +287,7 @@ typedef enum {
|
||||||
typedef enum {
|
typedef enum {
|
||||||
FTDM_SIGEVENT_START, /*!< Incoming call (ie: incoming SETUP msg or Ring) */
|
FTDM_SIGEVENT_START, /*!< Incoming call (ie: incoming SETUP msg or Ring) */
|
||||||
FTDM_SIGEVENT_STOP, /*!< Hangup */
|
FTDM_SIGEVENT_STOP, /*!< Hangup */
|
||||||
|
FTDM_SIGEVENT_RELEASED, /*!< Channel is completely released and available */
|
||||||
FTDM_SIGEVENT_UP, /*!< Outgoing call has been answered */
|
FTDM_SIGEVENT_UP, /*!< Outgoing call has been answered */
|
||||||
FTDM_SIGEVENT_FLASH, /*< Flash event (typically on-hook/off-hook for analog devices) */
|
FTDM_SIGEVENT_FLASH, /*< Flash event (typically on-hook/off-hook for analog devices) */
|
||||||
FTDM_SIGEVENT_PROGRESS, /*!< Outgoing call is making progress */
|
FTDM_SIGEVENT_PROGRESS, /*!< Outgoing call is making progress */
|
||||||
|
|
Loading…
Reference in New Issue