Merge branch 'netborder'
This commit is contained in:
commit
4b9355003e
|
@ -10,6 +10,7 @@ example #1a - Making an outbound call:
|
||||||
|
|
||||||
To make an outbound call:
|
To make an outbound call:
|
||||||
ftdm_usrmsg_t usrmsg;
|
ftdm_usrmsg_t usrmsg;
|
||||||
|
memset(&usrmsg, 0, sizeof(usrmsg));
|
||||||
|
|
||||||
/* Attach variable to usrmsg */
|
/* Attach variable to usrmsg */
|
||||||
ftdm_usrmsg_add_var(&usrmsg, "isdn.prog_ind.descr", "inband-info-available");
|
ftdm_usrmsg_add_var(&usrmsg, "isdn.prog_ind.descr", "inband-info-available");
|
||||||
|
@ -22,6 +23,7 @@ When using ftmod_sangoma_isdn, user want to specify progress indicator inside PR
|
||||||
|
|
||||||
|
|
||||||
ftdm_usrmsg_t usrmsg;
|
ftdm_usrmsg_t usrmsg;
|
||||||
|
memset(&usrmsg, 0, sizeof(usrmsg));
|
||||||
|
|
||||||
/* Attach variable to usrmsg */
|
/* Attach variable to usrmsg */
|
||||||
ftdm_usrmsg_add_var(&usrmsg, "isdn.prog_ind.descr", "inband-info-available");
|
ftdm_usrmsg_add_var(&usrmsg, "isdn.prog_ind.descr", "inband-info-available");
|
||||||
|
@ -40,6 +42,8 @@ When using ftmod_sangoma_isdn, user wants to transmit a custom Facility IE, insi
|
||||||
uint8_t *my_facility_ie = ftdm_calloc(1, 200); /*memory has to be allocated using ftdm_calloc !! */
|
uint8_t *my_facility_ie = ftdm_calloc(1, 200); /*memory has to be allocated using ftdm_calloc !! */
|
||||||
unsigned my_facility_ie_len = 0;
|
unsigned my_facility_ie_len = 0;
|
||||||
|
|
||||||
|
memset(&usrmsg, 0, sizeof(usrmsg));
|
||||||
|
|
||||||
/* Fill my_facility_ie with custom data here */
|
/* Fill my_facility_ie with custom data here */
|
||||||
my_facility_ie[my_facility_ie_len++] = 0x1C; /* Q.931 Facility IE ID */
|
my_facility_ie[my_facility_ie_len++] = 0x1C; /* Q.931 Facility IE ID */
|
||||||
my_facility_ie[my_facility_ie_len++] = 0x03; /* Length of facility IE */
|
my_facility_ie[my_facility_ie_len++] = 0x03; /* Length of facility IE */
|
||||||
|
@ -49,7 +53,7 @@ When using ftmod_sangoma_isdn, user wants to transmit a custom Facility IE, insi
|
||||||
|
|
||||||
ftdm_usrmsg_set_raw_data(&usrmsg, my_facility_ie, my_facility_ie_len);
|
ftdm_usrmsg_set_raw_data(&usrmsg, my_facility_ie, my_facility_ie_len);
|
||||||
|
|
||||||
ftdm_channel_call_indicate(ftdmchan, FTDM_CHANNEL_INDICATE_FACILITY, &usrmsg);
|
ftdm_channel_call_indicate_ex(ftdmchan, FTDM_CHANNEL_INDICATE_FACILITY, &usrmsg);
|
||||||
|
|
||||||
/* FreeTDM will automatically free my_facility_ie */
|
/* FreeTDM will automatically free my_facility_ie */
|
||||||
|
|
||||||
|
|
|
@ -2310,7 +2310,9 @@ FT_DECLARE(ftdm_status_t) _ftdm_channel_call_indicate(const char *file, const ch
|
||||||
ftdm_set_flag(ftdmchan, FTDM_CHANNEL_IND_ACK_PENDING);
|
ftdm_set_flag(ftdmchan, FTDM_CHANNEL_IND_ACK_PENDING);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ftdm_test_flag(ftdmchan, FTDM_CHANNEL_OUTBOUND)) {
|
if (indication != FTDM_CHANNEL_INDICATE_FACILITY &&
|
||||||
|
ftdm_test_flag(ftdmchan, FTDM_CHANNEL_OUTBOUND)) {
|
||||||
|
|
||||||
ftdm_log_chan_ex(ftdmchan, file, func, line, FTDM_LOG_LEVEL_WARNING, "Cannot indicate %s in outgoing channel in state %s\n",
|
ftdm_log_chan_ex(ftdmchan, file, func, line, FTDM_LOG_LEVEL_WARNING, "Cannot indicate %s in outgoing channel in state %s\n",
|
||||||
ftdm_channel_indication2str(indication), ftdm_channel_state2str(ftdmchan->state));
|
ftdm_channel_indication2str(indication), ftdm_channel_state2str(ftdmchan->state));
|
||||||
status = FTDM_EINVAL;
|
status = FTDM_EINVAL;
|
||||||
|
@ -2525,20 +2527,7 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_set_sig_status(ftdm_channel_t *fchan, ftd
|
||||||
|
|
||||||
ftdm_channel_lock(fchan);
|
ftdm_channel_lock(fchan);
|
||||||
|
|
||||||
if (ftdm_test_flag(fchan, FTDM_CHANNEL_IN_ALARM)) {
|
|
||||||
ftdm_log_chan_msg(fchan, FTDM_LOG_WARNING, "You can not set the signaling status of an alarmed channel\n");
|
|
||||||
res = FTDM_EINVAL;
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sigstatus == FTDM_SIG_STATE_DOWN) {
|
|
||||||
ftdm_log_chan_msg(fchan, FTDM_LOG_WARNING, "You can not set the signaling status to DOWN, valid states are UP or SUSPENDED\n");
|
|
||||||
res = FTDM_EINVAL;
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
res = fchan->span->set_channel_sig_status(fchan, sigstatus);
|
res = fchan->span->set_channel_sig_status(fchan, sigstatus);
|
||||||
done:
|
|
||||||
|
|
||||||
ftdm_channel_unlock(fchan);
|
ftdm_channel_unlock(fchan);
|
||||||
|
|
||||||
|
@ -6057,9 +6046,12 @@ FT_DECLARE(ftdm_status_t) ftdm_sigmsg_get_raw_data_detached(ftdm_sigmsg_t *sigms
|
||||||
if (!sigmsg || !sigmsg->raw.len) {
|
if (!sigmsg || !sigmsg->raw.len) {
|
||||||
return FTDM_FAIL;
|
return FTDM_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
*data = sigmsg->raw.data;
|
*data = sigmsg->raw.data;
|
||||||
*datalen = sigmsg->raw.len;
|
*datalen = sigmsg->raw.len;
|
||||||
|
|
||||||
|
sigmsg->raw.data = NULL;
|
||||||
|
sigmsg->raw.len = 0;
|
||||||
return FTDM_SUCCESS;
|
return FTDM_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -520,6 +520,28 @@ static FIO_CHANNEL_SET_SIG_STATUS_FUNCTION(ftdm_r2_set_channel_sig_status)
|
||||||
openr2_chan_t *r2chan = R2CALL(ftdmchan)->r2chan;
|
openr2_chan_t *r2chan = R2CALL(ftdmchan)->r2chan;
|
||||||
openr2_cas_signal_t rxcas, txcas;
|
openr2_cas_signal_t rxcas, txcas;
|
||||||
|
|
||||||
|
if (ftdm_test_flag(ftdmchan, FTDM_CHANNEL_IN_ALARM)) {
|
||||||
|
ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG,
|
||||||
|
"Received request to change sig status of alarmed channel to %s", ftdm_signaling_status2str(status));
|
||||||
|
|
||||||
|
switch (status) {
|
||||||
|
case FTDM_SIG_STATE_SUSPENDED:
|
||||||
|
openr2_chan_set_blocked(r2chan);
|
||||||
|
/* Need to send sig status change to SUSPENDED once out of alarm */
|
||||||
|
R2CALL(ftdmchan)->localsuspend_on_alarm = 1;
|
||||||
|
break;
|
||||||
|
case FTDM_SIG_STATE_UP:
|
||||||
|
openr2_chan_set_blocked(r2chan);
|
||||||
|
/* DO NOT send sig status change to SUSPENDED once out of alarm */
|
||||||
|
R2CALL(ftdmchan)->localsuspend_on_alarm = 0;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ftdm_log_chan(ftdmchan, FTDM_LOG_WARNING, "Cannot set signaling status to unknown value '%d'\n", status);
|
||||||
|
return FTDM_FAIL;
|
||||||
|
}
|
||||||
|
return FTDM_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
/* get the current rx and tx cas bits */
|
/* get the current rx and tx cas bits */
|
||||||
openr2_chan_get_cas(r2chan, &rxcas, &txcas);
|
openr2_chan_get_cas(r2chan, &rxcas, &txcas);
|
||||||
|
|
||||||
|
|
|
@ -807,17 +807,10 @@ void sngisdn_process_fac_ind (sngisdn_event_data_t *sngisdn_event)
|
||||||
|
|
||||||
if (signal_data->facility_ie_decode == SNGISDN_OPT_FALSE) {
|
if (signal_data->facility_ie_decode == SNGISDN_OPT_FALSE) {
|
||||||
/* If Facility decoding is disabled, we do not care about current call state, just pass event up to user */
|
/* If Facility decoding is disabled, we do not care about current call state, just pass event up to user */
|
||||||
ftdm_sigmsg_t sigev;
|
|
||||||
if (facEvnt->facElmt.facStr.pres) {
|
if (facEvnt->facElmt.facStr.pres) {
|
||||||
get_facility_ie_str(ftdmchan, &facEvnt->facElmt.facStr.val[2], facEvnt->facElmt.facStr.len-2);
|
get_facility_ie_str(ftdmchan, &facEvnt->facElmt.facStr.val[2], facEvnt->facElmt.facStr.len-2);
|
||||||
|
sngisdn_send_signal(sngisdn_info, FTDM_SIGEVENT_FACILITY);
|
||||||
}
|
}
|
||||||
memset(&sigev, 0, sizeof(sigev));
|
|
||||||
sigev.chan_id = ftdmchan->chan_id;
|
|
||||||
sigev.span_id = ftdmchan->span_id;
|
|
||||||
sigev.channel = ftdmchan;
|
|
||||||
|
|
||||||
sigev.event_id = FTDM_SIGEVENT_FACILITY;
|
|
||||||
ftdm_span_send_signal(ftdmchan->span, &sigev);
|
|
||||||
ISDN_FUNC_TRACE_EXIT(__FUNCTION__);
|
ISDN_FUNC_TRACE_EXIT(__FUNCTION__);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -370,7 +370,7 @@ ftdm_status_t get_facility_ie_str(ftdm_channel_t *ftdmchan, uint8_t *data, uint8
|
||||||
my_data[1] = data_len;
|
my_data[1] = data_len;
|
||||||
memcpy(&my_data[2], data, data_len);
|
memcpy(&my_data[2], data, data_len);
|
||||||
|
|
||||||
sngisdn_add_raw_data((sngisdn_chan_data_t*)ftdmchan->call_data, data, data_len+2);
|
sngisdn_add_raw_data((sngisdn_chan_data_t*)ftdmchan->call_data, my_data, data_len+2);
|
||||||
|
|
||||||
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Raw Facility IE copied available\n");
|
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Raw Facility IE copied available\n");
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -1463,11 +1463,6 @@ FT_DECLARE(ftdm_iterator_t *) ftdm_iterator_next(ftdm_iterator_t *iter);
|
||||||
*/
|
*/
|
||||||
FT_DECLARE(ftdm_status_t) ftdm_iterator_free(ftdm_iterator_t *iter);
|
FT_DECLARE(ftdm_status_t) ftdm_iterator_free(ftdm_iterator_t *iter);
|
||||||
|
|
||||||
/*! \brief Clears all the temporary data attached to this call
|
|
||||||
* \note Clears caller_data->variables and caller_data->raw_data.
|
|
||||||
* */
|
|
||||||
FT_DECLARE(void) ftdm_call_clear_data(ftdm_caller_data_t *caller_data);
|
|
||||||
|
|
||||||
/*! \brief Get the span pointer associated to the channel */
|
/*! \brief Get the span pointer associated to the channel */
|
||||||
FT_DECLARE(ftdm_span_t *) ftdm_channel_get_span(const ftdm_channel_t *ftdmchan);
|
FT_DECLARE(ftdm_span_t *) ftdm_channel_get_span(const ftdm_channel_t *ftdmchan);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue