summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--misc/freeswitch/scripts/common/conference.lua2
-rw-r--r--misc/freeswitch/scripts/dialplan/dialplan.lua24
-rw-r--r--misc/freeswitch/scripts/dialplan/session.lua7
3 files changed, 23 insertions, 10 deletions
diff --git a/misc/freeswitch/scripts/common/conference.lua b/misc/freeswitch/scripts/common/conference.lua
index b50c134..9339bdc 100644
--- a/misc/freeswitch/scripts/common/conference.lua
+++ b/misc/freeswitch/scripts/common/conference.lua
@@ -188,7 +188,7 @@ function Conference.enter(self, caller, domain)
elseif self:check_ownership() then
self.settings.flags.moderator = true;
self.pin = nil;
- self.log:info('CONFERENCE ', self.id, ' - owner: ', self.caller.auth_account.owner.class,'=', self.caller.auth_account.owner.id, '/', self.caller.auth_account.owner.uuid, ', speaker: ', not self.settings.flags.mute, ', moderator: ', self.settings.flags.moderator);
+ self.log:info('CONFERENCE ', self.id, ' - owner authenticated: ', self.caller.auth_account.owner.class,'=', self.caller.auth_account.owner.id, '/', self.caller.auth_account.owner.uuid, ', speaker: ', not self.settings.flags.mute, ', moderator: ', self.settings.flags.moderator);
elseif not self.open_for_public then
self.log:notice('CONFERENCE ', self.id, ' - not open for public');
return { continue = false, code = 493, phrase = 'Conference closed' };
diff --git a/misc/freeswitch/scripts/dialplan/dialplan.lua b/misc/freeswitch/scripts/dialplan/dialplan.lua
index bbf1242..8d69a3d 100644
--- a/misc/freeswitch/scripts/dialplan/dialplan.lua
+++ b/misc/freeswitch/scripts/dialplan/dialplan.lua
@@ -166,16 +166,13 @@ function Dialplan.retrieve_caller_data(self)
self.caller.caller_phone_numbers_hash = {};
-- TODO: Set auth_account on transfer initiated by calling party
- if not common.str.blank(self.caller.dialed_sip_user) then
- self.caller.auth_account = self:object_find{class = 'sipaccount', domain = self.caller.dialed_domain, auth_account = self.caller.dialed_sip_user};
- if self.caller.set_auth_account then
- self.caller:set_auth_account(self.caller.auth_account);
- end
- elseif not common.str.blank(self.caller.auth_account_type) and not common.str.blank(self.caller.auth_account_uuid) then
+ if not common.str.blank(self.caller.auth_account_type) and not common.str.blank(self.caller.auth_account_uuid) then
self.caller.auth_account = self:object_find{class = self.caller.auth_account_type, uuid = self.caller.auth_account_uuid};
- if self.caller.set_auth_account then
- self.caller:set_auth_account(self.caller.auth_account);
- end
+ elseif not common.str.blank(self.caller.previous_destination_type) and not common.str.blank(self.caller.previous_destination_uuid) then
+ self.log:debug('CALLER_DATA - authenticate by previous destination: ', self.caller.previous_destination_type, '=', self.caller.previous_destination_id, '/', self.caller.previous_destination_uuid);
+ self.caller.auth_account = self:object_find{class = self.caller.previous_destination_type, uuid = self.caller.previous_destination_uuid};
+ elseif not common.str.blank(self.caller.dialed_sip_user) then
+ self.caller.auth_account = self:object_find{class = 'sipaccount', domain = self.caller.dialed_domain, auth_account = self.caller.dialed_sip_user};
end
if self.caller.auth_account then
@@ -185,6 +182,9 @@ function Dialplan.retrieve_caller_data(self)
else
self.log:error('CALLER_DATA - auth owner not found');
end
+ if self.caller.set_auth_account then
+ self.caller:set_auth_account(self.caller.auth_account);
+ end
else
self.log:info('CALLER_DATA - no data - unauthenticated call: ', self.caller.auth_account_type, '/', self.caller.auth_account_uuid);
end
@@ -315,6 +315,9 @@ function Dialplan.dial(self, destination)
for index=1, #group_ids do
table.insert(destination.pickup_groups, 'g' .. group_ids[index]);
end
+ self.caller:set_variable('gs_destination_type', destination.account.class);
+ self.caller:set_variable('gs_destination_id', destination.account.id);
+ self.caller:set_variable('gs_destination_uuid', destination.account.uuid);
end
if destination.account and destination.account.owner then
@@ -325,6 +328,9 @@ function Dialplan.dial(self, destination)
elseif destination.account.owner.class == 'tenant' then
tenant_id = destination.account.owner.id;
end
+ self.caller:set_variable('gs_destination_owner_type', destination.account.owner.class);
+ self.caller:set_variable('gs_destination_owner_id', destination.account.owner.id);
+ self.caller:set_variable('gs_destination_owner_uuid', destination.account.owner.uuid);
end
end
diff --git a/misc/freeswitch/scripts/dialplan/session.lua b/misc/freeswitch/scripts/dialplan/session.lua
index 04d7675..78be98e 100644
--- a/misc/freeswitch/scripts/dialplan/session.lua
+++ b/misc/freeswitch/scripts/dialplan/session.lua
@@ -58,6 +58,13 @@ function Session.init_channel_variables(self)
self.node_id = self:to_i('sip_h_X-GS_node_id');
self.loop_count = self:to_i('sip_h_X-GS_loop_count');
+ self.previous_destination_type = self:to_s('gs_destination_type');
+ self.previous_destination_id = self:to_i('gs_destination_id');
+ self.previous_destination_uuid = self:to_s('gs_destination_uuid');
+ self.previous_destination_owner_type = self:to_s('gs_destination_owner_type');
+ self.previous_destination_owner_id = self:to_i('gs_destination_owner_id');
+ self.previous_destination_owner_uuid = self:to_s('gs_destination_owner_uuid');
+
if self.node_id > 0 and self.node_id ~= self.local_node_id then
self.from_node = true;
else