mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-04-17 09:12:25 +00:00
OPENZAP-238: [freetdm] Fix gsm caller id and dnis information
Also fix small leak caused by the span being destroyed before the gsm loop ran
This commit is contained in:
parent
c8a9c07059
commit
8a81c3f59e
@ -724,6 +724,10 @@ static ftdm_status_t ftdm_span_destroy(ftdm_span_t *span)
|
|||||||
ftdm_queue_destroy(&span->pendingchans);
|
ftdm_queue_destroy(&span->pendingchans);
|
||||||
}
|
}
|
||||||
if (span->pendingsignals) {
|
if (span->pendingsignals) {
|
||||||
|
ftdm_sigmsg_t *sigmsg = NULL;
|
||||||
|
while ((sigmsg = ftdm_queue_dequeue(span->pendingsignals))) {
|
||||||
|
ftdm_sigmsg_free(&sigmsg);
|
||||||
|
}
|
||||||
ftdm_queue_destroy(&span->pendingsignals);
|
ftdm_queue_destroy(&span->pendingsignals);
|
||||||
}
|
}
|
||||||
ftdm_mutex_unlock(span->mutex);
|
ftdm_mutex_unlock(span->mutex);
|
||||||
@ -6122,7 +6126,6 @@ FT_DECLARE(ftdm_status_t) ftdm_span_trigger_signals(const ftdm_span_t *span)
|
|||||||
return FTDM_SUCCESS;
|
return FTDM_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void execute_safety_hangup(void *data)
|
static void execute_safety_hangup(void *data)
|
||||||
{
|
{
|
||||||
ftdm_channel_t *fchan = data;
|
ftdm_channel_t *fchan = data;
|
||||||
|
@ -282,7 +282,12 @@ static void on_wat_span_status(unsigned char span_id, wat_span_status_t *status)
|
|||||||
break;
|
break;
|
||||||
case WAT_SPAN_STS_SIM_INFO_READY:
|
case WAT_SPAN_STS_SIM_INFO_READY:
|
||||||
{
|
{
|
||||||
|
const wat_sim_info_t *sim_info = NULL;
|
||||||
ftdm_log(FTDM_LOG_INFO, "span %s: SIM information ready\n", span->name);
|
ftdm_log(FTDM_LOG_INFO, "span %s: SIM information ready\n", span->name);
|
||||||
|
sim_info = wat_span_get_sim_info(span->span_id);
|
||||||
|
if (!ftdm_strlen_zero(sim_info->subscriber.digits)) {
|
||||||
|
ftdm_set_string(gsm_data->bchan->chan_number, sim_info->subscriber.digits);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WAT_SPAN_STS_ALARM:
|
case WAT_SPAN_STS_ALARM:
|
||||||
@ -305,37 +310,18 @@ static void on_wat_con_ind(uint8_t span_id, uint8_t call_id, wat_con_event_t *co
|
|||||||
|
|
||||||
ftdm_log(FTDM_LOG_INFO, "s%d: Incoming call (id:%d) Calling Number:%s Calling Name:\"%s\" type:%d plan:%d\n", span_id, call_id, con_event->calling_num.digits, con_event->calling_name, con_event->calling_num.type, con_event->calling_num.plan);
|
ftdm_log(FTDM_LOG_INFO, "s%d: Incoming call (id:%d) Calling Number:%s Calling Name:\"%s\" type:%d plan:%d\n", span_id, call_id, con_event->calling_num.digits, con_event->calling_name, con_event->calling_num.type, con_event->calling_num.plan);
|
||||||
|
|
||||||
if (!(span = get_span_by_id(span_id, &gsm_data))) {
|
span = get_span_by_id(span_id, &gsm_data);
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
gsm_data->call_id = call_id;
|
gsm_data->call_id = call_id;
|
||||||
|
|
||||||
#define ZERO_ARRAY(arr) memset(arr, 0, sizeof(arr))
|
|
||||||
// cid date
|
|
||||||
{
|
|
||||||
time_t t;
|
|
||||||
struct tm *tmp;
|
|
||||||
t = time(NULL);
|
|
||||||
tmp = localtime(&t);
|
|
||||||
if (tmp == NULL) {
|
|
||||||
ZERO_ARRAY(gsm_data->bchan->caller_data.cid_date);
|
|
||||||
strftime(gsm_data->bchan->caller_data.cid_date, sizeof(gsm_data->bchan->caller_data.cid_date), "%y/%m/%d", tmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// cid name
|
// cid name
|
||||||
ZERO_ARRAY(gsm_data->bchan->caller_data.cid_name);
|
ftdm_set_string(gsm_data->bchan->caller_data.cid_name, con_event->calling_name);
|
||||||
strncpy(gsm_data->bchan->caller_data.cid_name, con_event->calling_name,sizeof(gsm_data->bchan->caller_data.cid_name));
|
|
||||||
|
|
||||||
// dnis
|
// cid number
|
||||||
ZERO_ARRAY(gsm_data->bchan->caller_data.dnis.digits);
|
ftdm_set_string(gsm_data->bchan->caller_data.cid_num.digits, con_event->calling_num.digits);
|
||||||
strncpy(gsm_data->bchan->caller_data.dnis.digits, con_event->calling_num.digits, FTDM_DIGITS_LIMIT);
|
|
||||||
|
|
||||||
//collected
|
// destination number
|
||||||
ZERO_ARRAY(gsm_data->bchan->caller_data.collected);
|
ftdm_set_string(gsm_data->bchan->caller_data.dnis.digits, gsm_data->bchan->chan_number);
|
||||||
strncpy(gsm_data->bchan->caller_data.collected, con_event->calling_num.digits, FTDM_DIGITS_LIMIT);
|
|
||||||
|
|
||||||
ftdm_set_state(gsm_data->bchan, FTDM_CHANNEL_STATE_RING);
|
ftdm_set_state(gsm_data->bchan, FTDM_CHANNEL_STATE_RING);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user