mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-04-15 16:39:14 +00:00
FIX for windows IO
This commit is contained in:
parent
93aa30076b
commit
d0b6117325
@ -5,8 +5,8 @@ fsdir=../..
|
|||||||
set -x
|
set -x
|
||||||
cp Debug/mod/*.dll $fsdir/Debug/mod/
|
cp Debug/mod/*.dll $fsdir/Debug/mod/
|
||||||
cp mod_freetdm/Debug/*.pdb $fsdir/Debug/mod/
|
cp mod_freetdm/Debug/*.pdb $fsdir/Debug/mod/
|
||||||
cp Debug/*.dll $fsdir/Debug/
|
cp Debug/*.dll $fsdir/Debug/mod/
|
||||||
cp Debug/*.pdb $fsdir/Debug/
|
cp Debug/*.pdb $fsdir/Debug/mod/
|
||||||
#cp Debug/testsangomaboost.exe $fsdir/Debug/
|
#cp Debug/testsangomaboost.exe $fsdir/Debug/
|
||||||
echo "FRIENDLY REMINDER: RECOMPILE ftmod_wanpipe WHENEVER YOU INSTALL NEW DRIVERS"
|
echo "FRIENDLY REMINDER: RECOMPILE ftmod_wanpipe WHENEVER YOU INSTALL NEW DRIVERS"
|
||||||
set +x
|
set +x
|
||||||
|
@ -52,10 +52,10 @@ static void ftdm_sangoma_isdn_process_phy_events(ftdm_span_t *span, ftdm_oob_eve
|
|||||||
static void ftdm_sangoma_isdn_process_state_change(ftdm_channel_t *ftdmchan);
|
static void ftdm_sangoma_isdn_process_state_change(ftdm_channel_t *ftdmchan);
|
||||||
static void ftdm_sangoma_isdn_process_stack_event (ftdm_span_t *span, sngisdn_event_data_t *sngisdn_event);
|
static void ftdm_sangoma_isdn_process_stack_event (ftdm_span_t *span, sngisdn_event_data_t *sngisdn_event);
|
||||||
|
|
||||||
static ftdm_io_interface_t g_sngisdn_io_interface;
|
static ftdm_io_interface_t g_sngisdn_io_interface;
|
||||||
static sng_isdn_event_interface_t g_sngisdn_event_interface;
|
static sng_isdn_event_interface_t g_sngisdn_event_interface;
|
||||||
|
|
||||||
ftdm_sngisdn_data_t g_sngisdn_data;
|
ftdm_sngisdn_data_t g_sngisdn_data;
|
||||||
|
|
||||||
extern ftdm_status_t sngisdn_activate_trace(ftdm_span_t *span, sngisdn_tracetype_t trace_opt);
|
extern ftdm_status_t sngisdn_activate_trace(ftdm_span_t *span, sngisdn_tracetype_t trace_opt);
|
||||||
extern ftdm_status_t sngisdn_check_free_ids(void);
|
extern ftdm_status_t sngisdn_check_free_ids(void);
|
||||||
@ -248,6 +248,7 @@ static void ftdm_sangoma_isdn_process_phy_events(ftdm_span_t *span, ftdm_oob_eve
|
|||||||
sngisdn_snd_event(span, SNG_L1EVENT_ALARM_OFF);
|
sngisdn_snd_event(span, SNG_L1EVENT_ALARM_OFF);
|
||||||
if (FTDM_SPAN_IS_BRI(span)) {
|
if (FTDM_SPAN_IS_BRI(span)) {
|
||||||
ftdm_channel_t *ftdmchan;
|
ftdm_channel_t *ftdmchan;
|
||||||
|
sngisdn_chan_data_t *sngisdn_info;
|
||||||
ftdm_iterator_t *chaniter = NULL;
|
ftdm_iterator_t *chaniter = NULL;
|
||||||
ftdm_iterator_t *curr = NULL;
|
ftdm_iterator_t *curr = NULL;
|
||||||
sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*) span->signal_data;
|
sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*) span->signal_data;
|
||||||
@ -255,7 +256,7 @@ static void ftdm_sangoma_isdn_process_phy_events(ftdm_span_t *span, ftdm_oob_eve
|
|||||||
chaniter = ftdm_span_get_chan_iterator(span, NULL);
|
chaniter = ftdm_span_get_chan_iterator(span, NULL);
|
||||||
for (curr = chaniter; curr; curr = ftdm_iterator_next(curr)) {
|
for (curr = chaniter; curr; curr = ftdm_iterator_next(curr)) {
|
||||||
ftdmchan = (ftdm_channel_t*)ftdm_iterator_current(curr);
|
ftdmchan = (ftdm_channel_t*)ftdm_iterator_current(curr);
|
||||||
sngisdn_chan_data_t *sngisdn_info = ftdmchan->call_data;
|
sngisdn_info = (sngisdn_chan_data_t*)ftdmchan->call_data;
|
||||||
|
|
||||||
if (ftdm_test_flag(sngisdn_info, FLAG_ACTIVATING)) {
|
if (ftdm_test_flag(sngisdn_info, FLAG_ACTIVATING)) {
|
||||||
ftdm_clear_flag(sngisdn_info, FLAG_ACTIVATING);
|
ftdm_clear_flag(sngisdn_info, FLAG_ACTIVATING);
|
||||||
@ -277,8 +278,7 @@ static void ftdm_sangoma_isdn_process_phy_events(ftdm_span_t *span, ftdm_oob_eve
|
|||||||
|
|
||||||
static void ftdm_sangoma_isdn_poll_events(ftdm_span_t *span)
|
static void ftdm_sangoma_isdn_poll_events(ftdm_span_t *span)
|
||||||
{
|
{
|
||||||
ftdm_status_t ret_status;
|
ftdm_status_t ret_status;
|
||||||
ftdm_channel_t *ftdmchan;
|
|
||||||
ftdm_iterator_t *chaniter = NULL;
|
ftdm_iterator_t *chaniter = NULL;
|
||||||
ftdm_iterator_t *curr = NULL;
|
ftdm_iterator_t *curr = NULL;
|
||||||
|
|
||||||
@ -315,7 +315,7 @@ static void *ftdm_sangoma_isdn_dchan_run(ftdm_thread_t *me, void *obj)
|
|||||||
|
|
||||||
while (ftdm_running() && !(ftdm_test_flag(span, FTDM_SPAN_STOP_THREAD))) {
|
while (ftdm_running() && !(ftdm_test_flag(span, FTDM_SPAN_STOP_THREAD))) {
|
||||||
wflags = FTDM_READ;
|
wflags = FTDM_READ;
|
||||||
status = ftdm_channel_wait(dchan, &wflags, 0);
|
status = ftdm_channel_wait(dchan, &wflags, 10000);
|
||||||
switch(status) {
|
switch(status) {
|
||||||
case FTDM_FAIL:
|
case FTDM_FAIL:
|
||||||
ftdm_log_chan_msg(dchan, FTDM_LOG_CRIT, "Failed to wait for d-channel\n");
|
ftdm_log_chan_msg(dchan, FTDM_LOG_CRIT, "Failed to wait for d-channel\n");
|
||||||
@ -331,8 +331,10 @@ static void *ftdm_sangoma_isdn_dchan_run(ftdm_thread_t *me, void *obj)
|
|||||||
} else {
|
} else {
|
||||||
ftdm_log_chan_msg(dchan, FTDM_LOG_WARNING, "Failed to read from channel \n");
|
ftdm_log_chan_msg(dchan, FTDM_LOG_WARNING, "Failed to read from channel \n");
|
||||||
}
|
}
|
||||||
|
#ifndef WIN32 /* It is valid on WIN32 for poll to return without errors, but no flags set */
|
||||||
} else {
|
} else {
|
||||||
ftdm_log_chan_msg(dchan, FTDM_LOG_CRIT, "Failed to poll for d-channel\n");
|
ftdm_log_chan_msg(dchan, FTDM_LOG_CRIT, "Failed to poll for d-channel\n");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -986,7 +988,7 @@ static FIO_SIG_LOAD_FUNCTION(ftdm_sangoma_isdn_init)
|
|||||||
ftdm_log(FTDM_LOG_INFO, "Loading ftmod_sangoma_isdn...\n");
|
ftdm_log(FTDM_LOG_INFO, "Loading ftmod_sangoma_isdn...\n");
|
||||||
|
|
||||||
memset(&g_sngisdn_data, 0, sizeof(g_sngisdn_data));
|
memset(&g_sngisdn_data, 0, sizeof(g_sngisdn_data));
|
||||||
|
memset(&g_sngisdn_event_interface, 0, sizeof(g_sngisdn_event_interface));
|
||||||
/* set callbacks */
|
/* set callbacks */
|
||||||
g_sngisdn_event_interface.cc.sng_con_ind = sngisdn_rcv_con_ind;
|
g_sngisdn_event_interface.cc.sng_con_ind = sngisdn_rcv_con_ind;
|
||||||
g_sngisdn_event_interface.cc.sng_con_cfm = sngisdn_rcv_con_cfm;
|
g_sngisdn_event_interface.cc.sng_con_cfm = sngisdn_rcv_con_cfm;
|
||||||
@ -1017,7 +1019,7 @@ static FIO_SIG_LOAD_FUNCTION(ftdm_sangoma_isdn_init)
|
|||||||
g_sngisdn_event_interface.sta.sng_q931_trc_ind = sngisdn_rcv_q931_trace;
|
g_sngisdn_event_interface.sta.sng_q931_trc_ind = sngisdn_rcv_q931_trace;
|
||||||
g_sngisdn_event_interface.sta.sng_cc_sta_ind = sngisdn_rcv_cc_ind;
|
g_sngisdn_event_interface.sta.sng_cc_sta_ind = sngisdn_rcv_cc_ind;
|
||||||
|
|
||||||
g_sngisdn_event_interface.io.sng_data_req = sngisdn_rcv_data_req;
|
g_sngisdn_event_interface.io.sng_data_req = sngisdn_rcv_data_req;
|
||||||
|
|
||||||
for(i=1;i<=MAX_VARIANTS;i++) {
|
for(i=1;i<=MAX_VARIANTS;i++) {
|
||||||
ftdm_mutex_create(&g_sngisdn_data.ccs[i].mutex);
|
ftdm_mutex_create(&g_sngisdn_data.ccs[i].mutex);
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
extern ftdm_status_t cpy_calling_num_from_user(CgPtyNmb *cgPtyNmb, ftdm_caller_data_t *ftdm);
|
extern ftdm_status_t cpy_calling_num_from_user(CgPtyNmb *cgPtyNmb, ftdm_caller_data_t *ftdm);
|
||||||
extern ftdm_status_t cpy_called_num_from_user(CdPtyNmb *cdPtyNmb, ftdm_caller_data_t *ftdm);
|
extern ftdm_status_t cpy_called_num_from_user(CdPtyNmb *cdPtyNmb, ftdm_caller_data_t *ftdm);
|
||||||
extern ftdm_status_t cpy_calling_name_from_user(ConEvnt *conEvnt, ftdm_channel_t *ftdmchan);
|
extern ftdm_status_t cpy_calling_name_from_user(ConEvnt *conEvnt, ftdm_channel_t *ftdmchan);
|
||||||
|
extern ftdm_status_t cpy_redir_num_from_user(RedirNmb *redirNmb, ftdm_caller_data_t *ftdm);
|
||||||
|
|
||||||
|
|
||||||
void sngisdn_snd_setup(ftdm_channel_t *ftdmchan)
|
void sngisdn_snd_setup(ftdm_channel_t *ftdmchan)
|
||||||
|
@ -873,16 +873,30 @@ int16_t sngisdn_rcv_data_req(uint16_t spId, uint8_t *buff, uint32_t length)
|
|||||||
sngisdn_span_data_t *signal_data = g_sngisdn_data.spans[spId];
|
sngisdn_span_data_t *signal_data = g_sngisdn_data.spans[spId];
|
||||||
ftdm_assert(signal_data, "Received Data request on unconfigured span\n");
|
ftdm_assert(signal_data, "Received Data request on unconfigured span\n");
|
||||||
|
|
||||||
status = signal_data->dchan->fio->wait(signal_data->dchan, &flags, 10);
|
do {
|
||||||
if (status != FTDM_SUCCESS) {
|
flags = FTDM_WRITE;
|
||||||
ftdm_log_chan_msg(signal_data->dchan, FTDM_LOG_WARNING, "transmit timed-out\n");
|
status = signal_data->dchan->fio->wait(signal_data->dchan, &flags, 1000);
|
||||||
return -1;
|
if (status != FTDM_SUCCESS) {
|
||||||
}
|
ftdm_log_chan_msg(signal_data->dchan, FTDM_LOG_WARNING, "transmit timed-out\n");
|
||||||
status = signal_data->dchan->fio->write(signal_data->dchan, buff, (ftdm_size_t*)&length);
|
return -1;
|
||||||
if (status != FTDM_SUCCESS) {
|
}
|
||||||
ftdm_log_chan_msg(signal_data->dchan, FTDM_LOG_CRIT, "Failed to transmit frame\n");
|
|
||||||
return -1;
|
|
||||||
}
|
if ((flags & FTDM_WRITE)) {
|
||||||
|
status = signal_data->dchan->fio->write(signal_data->dchan, buff, (ftdm_size_t*)&length);
|
||||||
|
if (status != FTDM_SUCCESS) {
|
||||||
|
ftdm_log_chan_msg(signal_data->dchan, FTDM_LOG_CRIT, "Failed to transmit frame\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
/* On WIN32, it is possible for poll to return without FTDM_WRITE flag set, so we try to retransmit */
|
||||||
|
#ifndef WIN32
|
||||||
|
} else {
|
||||||
|
ftdm_log_chan_msg(signal_data->dchan, FTDM_LOG_WARNING, "Failed to poll for d-channel\n");
|
||||||
|
return -1;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
} while(1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,6 +130,7 @@ static __inline__ int tdmv_api_wait_socket(ftdm_channel_t *ftdmchan, int timeout
|
|||||||
if (err == SANG_STATUS_APIPOLL_TIMEOUT) {
|
if (err == SANG_STATUS_APIPOLL_TIMEOUT) {
|
||||||
err = 0;
|
err = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
#else
|
#else
|
||||||
struct pollfd pfds[1];
|
struct pollfd pfds[1];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user