summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/models/sip_account.rb13
-rw-r--r--db/migrate/20130315074600_change_calls_active2.rb86
-rw-r--r--misc/freeswitch/scripts/dialplan/sip_call.lua11
3 files changed, 106 insertions, 4 deletions
diff --git a/app/models/sip_account.rb b/app/models/sip_account.rb
index cea5f0e..50124e9 100644
--- a/app/models/sip_account.rb
+++ b/app/models/sip_account.rb
@@ -188,25 +188,30 @@ class SipAccount < ActiveRecord::Base
def status
states = Array.new
- SipAccount.last.call_legs.each do |call_leg|
+ self.call_legs.each do |call_leg|
states << {
- :status => call_leg.callstate,
+ :status => call_leg.b_callstate || call_leg.callstate,
+ :status_channel => call_leg.callstate,
:caller => true,
:endpoint_name => call_leg.callee_name,
:endpoint_number => call_leg.destination,
:endpoint_sip_account_id => call_leg.b_sip_account_id,
:start_stamp => call_leg.start_stamp,
+ :secure => call_leg.secure,
}
end
- SipAccount.last.b_call_legs.each do |call_leg|
+ self.b_call_legs.each do |call_leg|
+ call_status =
states << {
- :status => call_leg.callstate,
+ :status => call_leg.b_callstate,
+ :status_channel => call_leg.b_callstate,
:caller => false,
:endpoint_name => call_leg.caller_id_name,
:endpoint_number => call_leg.caller_id_number,
:endpoint_sip_account_id => call_leg.sip_account_id,
:start_stamp => call_leg.start_stamp,
+ :secure => call_leg.b_secure,
}
end
diff --git a/db/migrate/20130315074600_change_calls_active2.rb b/db/migrate/20130315074600_change_calls_active2.rb
new file mode 100644
index 0000000..378ffde
--- /dev/null
+++ b/db/migrate/20130315074600_change_calls_active2.rb
@@ -0,0 +1,86 @@
+class ChangeCallsActive2 < ActiveRecord::Migration
+ def self.up
+ execute "DROP VIEW IF EXISTS calls_active"
+ if ActiveRecord::Base.connection_config[:adapter] != 'sqlite3'
+ execute <<-SQL
+ CREATE VIEW calls_active AS SELECT
+ a.uuid AS uuid,
+ a.direction AS direction,
+ a.created_epoch AS start_stamp,
+ a.cid_name AS caller_id_name,
+ a.cid_num AS caller_id_number,
+ a.dest AS destination,
+ c.id AS sip_account_id,
+ c.caller_name AS sip_caller_name,
+ a.callee_name AS callee_name,
+ a.callee_num AS callee_number,
+ a.callstate AS callstate,
+ a.read_codec AS read_codec,
+ a.read_rate AS read_rate,
+ a.read_bit_rate AS read_bit_rate,
+ a.write_codec AS write_codec,
+ a.write_rate AS write_rate,
+ a.write_bit_rate AS write_bit_rate,
+ a.secure AS secure,
+ b.uuid AS b_uuid,
+ b.cid_name AS b_caller_id_name,
+ b.cid_num AS b_caller_id_number,
+ b.callstate AS b_callstate,
+ d.id AS b_sip_account_id,
+ d.caller_name AS b_sip_caller_name,
+ b.callee_name AS b_callee_name,
+ b.callee_num AS b_callee_number,
+ b.secure AS b_secure
+ FROM channels a
+ LEFT JOIN channels b ON (a.uuid = b.call_uuid AND a.uuid != b.uuid)
+ LEFT JOIN sip_accounts c ON a.presence_id LIKE CONCAT(c.auth_name, "@%")
+ LEFT JOIN sip_accounts d ON b.presence_id LIKE CONCAT(d.auth_name, "@%")
+ WHERE (a.uuid = b.call_uuid AND a.uuid != b.uuid)
+ OR a.call_uuid IS NULL
+ OR a.call_uuid = a.uuid
+ SQL
+ else
+ execute <<-SQL
+ CREATE VIEW calls_active AS SELECT
+ a.uuid AS uuid,
+ a.direction AS direction,
+ a.created_epoch AS start_stamp,
+ a.cid_name AS caller_id_name,
+ a.cid_num AS caller_id_number,
+ a.dest AS destination,
+ c.id AS sip_account_id,
+ c.caller_name AS sip_caller_name,
+ a.callee_name AS callee_name,
+ a.callee_num AS callee_number,
+ a.callstate AS callstate,
+ a.read_codec AS read_codec,
+ a.read_rate AS read_rate,
+ a.read_bit_rate AS read_bit_rate,
+ a.write_codec AS write_codec,
+ a.write_rate AS write_rate,
+ a.write_bit_rate AS write_bit_rate,
+ a.secure AS secure,
+ b.uuid AS b_uuid,
+ b.cid_name AS b_caller_id_name,
+ b.cid_num AS b_caller_id_number,
+ b.callstate AS b_callstate,
+ d.id AS b_sip_account_id,
+ d.caller_name AS b_sip_caller_name,
+ b.callee_name AS b_callee_name,
+ b.callee_num AS b_callee_number,
+ b.secure AS b_secure
+ FROM channels a
+ LEFT JOIN channels b ON (a.uuid = b.call_uuid AND a.uuid != b.uuid)
+ LEFT JOIN sip_accounts c ON a.presence_id LIKE (c.auth_name || "@%")
+ LEFT JOIN sip_accounts d ON b.presence_id LIKE (d.auth_name || "@%")
+ WHERE (a.uuid = b.call_uuid AND a.uuid != b.uuid)
+ OR a.call_uuid IS NULL
+ OR a.call_uuid = a.uuid
+ SQL
+ end
+ end
+
+ def self.down
+
+ end
+end \ No newline at end of file
diff --git a/misc/freeswitch/scripts/dialplan/sip_call.lua b/misc/freeswitch/scripts/dialplan/sip_call.lua
index 5c98792..0cde601 100644
--- a/misc/freeswitch/scripts/dialplan/sip_call.lua
+++ b/misc/freeswitch/scripts/dialplan/sip_call.lua
@@ -135,6 +135,17 @@ function SipCall.fork(self, destinations, arg )
if destination.alert_info then
table.insert(origination_variables, "alert_info='" .. destination.alert_info .. "'");
end
+ if destination.account then
+ table.insert(origination_variables, "gs_account_type='" .. common.str.to_s(destination.account.class) .. "'");
+ table.insert(origination_variables, "gs_account_id='" .. common.str.to_i(destination.account.id) .. "'");
+ table.insert(origination_variables, "gs_account_uuid='" .. common.str.to_s(destination.account.uuid) .. "'");
+ end
+ if self.caller.auth_account then
+ table.insert(origination_variables, "gs_auth_account_type='" .. common.str.to_s(self.caller.auth_account.class) .. "'");
+ table.insert(origination_variables, "gs_auth_account_id='" .. common.str.to_i(self.caller.auth_account.id) .. "'");
+ table.insert(origination_variables, "gs_auth_account_uuid='" .. common.str.to_s(self.caller.auth_account.uuid) .. "'");
+ end
+
table.insert(dial_strings, '[' .. table.concat(origination_variables , ',') .. ']sofia/' .. sip_account.record.profile_name .. '/' .. sip_account.record.auth_name .. '%' .. sip_account.record.sip_host);
if destination.pickup_groups and #destination.pickup_groups > 0 then
for key=1, #destination.pickup_groups do