summaryrefslogtreecommitdiff
path: root/misc/freeswitch/scripts/dialplan_default.lua
blob: 7caff57e4171b2a362a6afad2552c3af9c2c1320 (plain)
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