} else {
caller_data.dnis.type = outbound_profile->destination_number_ton;
}
+
+ if ((var = switch_event_get_header(var_event, "freetdm_custom_call_data")) || (var = switch_core_get_variable("freetdm_custom_call_data"))) {
+ ftdm_set_string(caller_data.raw_data, var);
+ caller_data.raw_data_len = strlen(var);
+ }
caller_data.dnis.plan = outbound_profile->destination_number_numplan;
switch_channel_t *channel = NULL;
uint32_t spanid, chanid;
char name[128];
- ftdm_caller_data_t *channel_caller_data = sigmsg->raw_data;
+ ftdm_caller_data_t *channel_caller_data = ftdm_channel_get_caller_data(sigmsg->channel);
*sp = NULL;
switch_channel_set_variable(channel, "freetdm_span_name", ftdm_channel_get_span_name(sigmsg->channel));
switch_channel_set_variable_printf(channel, "freetdm_span_number", "%d", spanid);
switch_channel_set_variable_printf(channel, "freetdm_chan_number", "%d", chanid);
+ if (channel_caller_data->raw_data_len) {
+ switch_channel_set_variable_printf(channel, "freetdm_custom_call_data", "%s", channel_caller_data->raw_data);
+ }
switch_channel_set_state(channel, CS_INIT);
if (switch_core_session_thread_launch(session) != SWITCH_STATUS_SUCCESS) {
spanid = ftdm_channel_get_span_id(sigmsg->channel);
chanid = ftdm_channel_get_id(sigmsg->channel);
- callerdata = sigmsg->raw_data;
+ callerdata = ftdm_channel_get_caller_data(sigmsg->channel);
ftdm_log(FTDM_LOG_DEBUG, "got FXO sig %d:%d [%s]\n", spanid, chanid, ftdm_signal_event2str(sigmsg->event_id));
switch_core_session_t *session = NULL;
switch_channel_t *channel = NULL;
ftdm_status_t status = FTDM_SUCCESS;
- ftdm_caller_data_t *caller_data = sigmsg->raw_data;
+ ftdm_caller_data_t *caller_data = ftdm_channel_get_caller_data(sigmsg->channel);
phyid = ftdm_channel_get_ph_id(sigmsg->channel);
chanid = ftdm_channel_get_id(sigmsg->channel);
ftdm_log(FTDM_LOG_DEBUG, "got clear channel sig [%s]\n", ftdm_signal_event2str(sigmsg->event_id));
- caller_data = sigmsg->raw_data;
+ caller_data = ftdm_channel_get_caller_data(sigmsg->channel);
chanid = ftdm_channel_get_id(sigmsg->channel);
spanid = ftdm_channel_get_span_id(sigmsg->channel);
break;
case FTDM_SIGEVENT_START:
- sigmsg->raw_data = &sigmsg->channel->caller_data;
/* when cleaning up the public API I added this because mod_freetdm.c on_fxs_signal was
* doing it during SIGEVENT_START, but now that flags are private they can't, wonder if
* is needed at all?
ftdm_clear_flag(sigmsg->channel, FTDM_CHANNEL_HOLD);
break;
- case FTDM_SIGEVENT_STOP:
- sigmsg->raw_data = &sigmsg->channel->caller_data;
- break;
-
default:
break;
event.called.ton = caller_data->dnis.type;
event.called.npi = caller_data->dnis.plan;
+ if (caller_data->raw_data_len) {
+ ftdm_set_string(event.custom_data, caller_data->raw_data);
+ event.custom_data_size = caller_data->raw_data_len;
+ }
+
OUTBOUND_REQUESTS[r].status = BST_WAITING;
OUTBOUND_REQUESTS[r].span = span;
ftdmchan->caller_data.screen = event->calling.screening_ind;
ftdmchan->caller_data.pres = event->calling.presentation_ind;
+ /* more info about custom data: http://www.ss7box.com/smg_manual.html#ISUP-IN-RDNIS-NEW */
if (event->custom_data_size) {
char* p = NULL;
event.called.ton = ftdmchan->caller_data.dnis.type;
event.called.npi = ftdmchan->caller_data.dnis.plan;
+ if (ftdmchan->caller_data.raw_data_len) {
+ ftdm_set_string(event.custom_data, ftdmchan->caller_data.raw_data);
+ event.custom_data_size = ftdmchan->caller_data.raw_data_len;
+ }
+
OUTBOUND_REQUESTS[r].status = BST_WAITING;
OUTBOUND_REQUESTS[r].span = ftdmchan->span;
OUTBOUND_REQUESTS[r].ftdmchan = ftdmchan;