diff --git a/libs/freetdm/mod_openzap/mod_openzap.c b/libs/freetdm/mod_openzap/mod_openzap.c index 5c9aa41963..590c22112a 100644 --- a/libs/freetdm/mod_openzap/mod_openzap.c +++ b/libs/freetdm/mod_openzap/mod_openzap.c @@ -979,6 +979,12 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi if ((var = switch_event_get_header(var_event, "openzap_outbound_ton")) || (var = switch_core_get_variable("openzap_outbound_ton"))) { if (!strcasecmp(var, "national")) { caller_data.ani.type = Q931_TON_NATIONAL; + } else if (!strcasecmp(var, "international")) { + caller_data.ani.type = Q931_TON_INTERNATIONAL; + } else if (!strcasecmp(var, "local")) { + caller_data.ani.type = Q931_TON_SUBSCRIBER_NUMBER; + } else if (!strcasecmp(var, "unknown")) { + caller_data.ani.type = Q931_TON_UNKNOWN; } } else { caller_data.ani.type = outbound_profile->destination_number_ton; diff --git a/libs/freetdm/src/ozmod/ozmod_libpri/ozmod_libpri.c b/libs/freetdm/src/ozmod/ozmod_libpri/ozmod_libpri.c index dc6555d1ba..5550f9f4b7 100644 --- a/libs/freetdm/src/ozmod/ozmod_libpri/ozmod_libpri.c +++ b/libs/freetdm/src/ozmod/ozmod_libpri/ozmod_libpri.c @@ -412,20 +412,38 @@ static __inline__ void state_advance(zap_channel_t *zchan) case ZAP_CHANNEL_STATE_DIALING: if (isdn_data) { struct pri_sr *sr; - + int dp; + const char *val; + if (!(call = pri_new_call(isdn_data->spri.pri))) { zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_RESTART); return; } + + dp = zchan->caller_data.ani.type; + switch(dp) { + case Q931_TON_NATIONAL: + dp = PRI_NATIONAL_ISDN; + break; + case Q931_TON_INTERNATIONAL: + dp = PRI_INTERNATIONAL_ISDN; + break; + case Q931_TON_SUBSCRIBER_NUMBER: + dp = PRI_LOCAL_ISDN; + break; + default: + dp = isdn_data->dp; + } + zchan->call_data = call; sr = pri_sr_new(); assert(sr); pri_sr_set_channel(sr, zchan->chan_id, 0, 0); pri_sr_set_bearer(sr, 0, isdn_data->l1); - pri_sr_set_called(sr, zchan->caller_data.ani.digits, isdn_data->dp, 1); - pri_sr_set_caller(sr, zchan->caller_data.cid_num.digits, zchan->caller_data.cid_name, isdn_data->dp, PRES_ALLOWED_USER_NUMBER_PASSED_SCREEN); - pri_sr_set_redirecting(sr, zchan->caller_data.cid_num.digits, isdn_data->dp, PRES_ALLOWED_USER_NUMBER_PASSED_SCREEN, PRI_REDIR_UNCONDITIONAL); + pri_sr_set_called(sr, zchan->caller_data.ani.digits, dp, 1); + pri_sr_set_caller(sr, zchan->caller_data.cid_num.digits, zchan->caller_data.cid_name, dp, PRES_ALLOWED_USER_NUMBER_PASSED_SCREEN); + pri_sr_set_redirecting(sr, zchan->caller_data.cid_num.digits, dp, PRES_ALLOWED_USER_NUMBER_PASSED_SCREEN, PRI_REDIR_UNCONDITIONAL); if (pri_setup(isdn_data->spri.pri, call, sr)) { zchan->caller_data.hangup_cause = ZAP_CAUSE_DESTINATION_OUT_OF_ORDER;