summaryrefslogtreecommitdiff
path: root/misc/freeswitch/scripts/test_route.lua
diff options
context:
space:
mode:
Diffstat (limited to 'misc/freeswitch/scripts/test_route.lua')
-rw-r--r--misc/freeswitch/scripts/test_route.lua84
1 files changed, 84 insertions, 0 deletions
diff --git a/misc/freeswitch/scripts/test_route.lua b/misc/freeswitch/scripts/test_route.lua
new file mode 100644
index 0000000..98dfda9
--- /dev/null
+++ b/misc/freeswitch/scripts/test_route.lua
@@ -0,0 +1,84 @@
+-- Gemeinschaft 5 routing test module
+-- (c) AMOOMA GmbH 2013
+--
+
+require 'common.array';
+
+local arguments = {};
+local value = nil;
+
+for index=1, #argv do
+ if math.mod(index, 2) == 0 then
+ common.array.set(arguments, argv[index], value);
+ else
+ value = argv[index];
+ end
+end
+
+local caller = arguments.caller or {};
+local channel_variables = arguments.chv or {};
+
+function caller.to_s(variable)
+ return common.str.to_s(arguments[variable])
+end
+
+local log_buffer = {};
+-- initialize logging
+require 'common.log';
+log = common.log.Log:new{ buffer = log_buffer, prefix = '' };
+
+-- connect to database
+require 'common.database';
+local database = common.database.Database:new{ log = log }:connect();
+if not database:connected() then
+ log:critical('TEST_ROUTE - database connection failed');
+ return;
+end
+
+-- dialplan object
+require 'dialplan.dialplan'
+local dialplan_object = dialplan.dialplan.Dialplan:new{ log = log, caller = caller, database = database };
+dialplan_object:configuration_read();
+caller.dialplan = dialplan_object;
+caller.local_node_id = dialplan_object.node_id;
+
+dialplan_object:retrieve_caller_data();
+local destination = arguments.destination or dialplan_object:destination_new{ number = caller.destination_number };
+local routes = {};
+
+if destination and destination.type == 'unknown' then
+ local clip_no_screening = common.array.try(caller, 'account.record.clip_no_screening');
+ caller.caller_id_numbers = {}
+ if not common.str.blank(clip_no_screening) then
+ for index, number in ipairs(common.str.strip_to_a(clip_no_screening, ',')) do
+ table.insert(caller.caller_id_numbers, number);
+ end
+ end
+ if caller.caller_phone_numbers then
+ for index, number in ipairs(caller.caller_phone_numbers) do
+ table.insert(caller.caller_id_numbers, number);
+ end
+ end
+ log:info('CALLER_ID_NUMBERS - clir: ', caller.clir, ', numbers: ', table.concat(caller.caller_id_numbers, ','));
+
+ destination.callee_id_number = destination.number;
+ destination.callee_id_name = nil;
+end
+
+caller.destination = destination;
+
+require 'dialplan.router';
+routes = dialplan.router.Router:new{ log = log, database = database, caller = caller, variables = caller, log_details = true }:route_run(arguments.table or 'outbound');
+
+local result = {
+ routes = routes,
+ destination = destination,
+ log = log_buffer
+}
+
+stream:write(common.array.to_json(result));
+
+-- release database handle
+if database then
+ database:release();
+end