1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
-- Gemeinschaft 5 default dialplan
-- (c) AMOOMA GmbH 2012-2013
--
function hangup_hook_caller(s, status, arg)
log:info('HANGUP_HOOK: ', status)
if tostring(status) == 'transfer' then
if start_caller and start_caller.destination then
log:info('CALL_TRANSFERRED - destination was: ', start_caller.destination.type, '=', start_caller.destination.id,', number: ' .. tostring(start_caller.destination.number) .. ', to: ' .. start_caller:to_s('sip_refer_to'));
start_caller.auth_account = start_dialplan:object_find(start_caller.destination.type, start_caller.destination.id);
start_caller.forwarding_number = start_caller.destination.number;
start_caller.forwarding_service = 'transfer';
end
end
end
-- initialize logging
require 'common.log'
log = common.log.Log:new{ prefix = '### [' .. session:get_uuid() .. '] ' };
-- caller session object
require 'dialplan.session'
start_caller = dialplan.session.Session:new{ log = log, session = session };
-- connect to database
require 'common.database'
local database = common.database.Database:new{ log = log }:connect();
if not database:connected() then
log:critical('DIALPLAN_DEFAULT - database connect failed');
return;
end
-- dialplan object
require 'dialplan.dialplan'
local start_dialplan = dialplan.dialplan.Dialplan:new{ log = log, caller = start_caller, database = database };
start_dialplan:configuration_read();
start_caller.local_node_id = start_dialplan.node_id;
start_caller:init_channel_variables();
if start_dialplan.config.parameters.dump_variables then
start_caller:execute('info', 'notice');
end
if start_caller.from_node and not start_dialplan:auth_node() then
log:debug('DIALPLAN_DEFAULT - node unauthorized - node_id: ', start_caller.node_id, ', domain: ', start_dialplan.domain);
start_dialplan:hangup(401, start_dialplan.domain);
else
if not start_dialplan:auth_sip_account() then
local gateway = start_dialplan:auth_gateway()
if gateway then
start_caller.gateway_name = gateway.name;
start_caller.gateway_id = gateway.id;
start_caller.from_gateway = true;
start_caller.gateway = gateway;
else
log:debug('AUTHENTICATION_REQUIRED_SIP_ACCOUNT - contact host: ' , start_caller.sip_contact_host, ', ip: ', start_caller.sip_network_ip, ', domain: ', start_dialplan.domain);
start_dialplan:hangup(407, start_dialplan.domain);
if database then
database:release();
end
return;
end
end
end
if start_caller.from_node then
log:debug('AUTHENTICATION_REQUIRED_NODE - node_id: ', start_caller.node_id, ', domain: ', start_dialplan.domain);
start_dialplan:hangup(407, start_dialplan.domain);
else
start_destination = { type = 'unknown' }
start_caller.session:setHangupHook('hangup_hook_caller', 'destination_number');
start_dialplan:run(start_destination);
end
-- release database handle
if database then
database:release();
end
|