]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
add ton support
authorAnthony Minessale <anthony.minessale@gmail.com>
Mon, 2 Mar 2009 22:05:11 +0000 (22:05 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Mon, 2 Mar 2009 22:05:11 +0000 (22:05 +0000)
git-svn-id: http://svn.openzap.org/svn/openzap/trunk@678 a93c3328-9c30-0410-af19-c9cd2b2d52af

libs/freetdm/mod_openzap/mod_openzap.c
libs/freetdm/src/ozmod/ozmod_libpri/ozmod_libpri.c

index 5c9aa41963eecdf59d3fa9d14198ea5f17c0457d..590c22112ae0e0e2da360410f58adf667b4bd58c 100644 (file)
@@ -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;
index dc6555d1ba054584b5b426fc8a3f33bfee10b63c..5550f9f4b71f9c747d4acf0d5357ea738e915362 100644 (file)
@@ -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;