bougyman-freeswitcher 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- data/AUTHORS +4 -2
- data/CHANGELOG +348 -262
- data/MANIFEST +4 -1
- data/README +1 -1
- data/Rakefile +1 -0
- data/examples/inbound_event_socket.rb +1 -1
- data/freeswitcher.gemspec +7 -7
- data/lib/fsr.rb +11 -6
- data/lib/fsr/cmd/uuid_dump.rb +27 -0
- data/lib/fsr/listener/inbound.rb +2 -0
- data/lib/fsr/listener/mock.rb +23 -0
- data/lib/fsr/listener/outbound.rb +0 -1
- data/lib/fsr/version.rb +1 -1
- data/spec/fsr/cmd/uuid_dump.rb +13 -0
- data/spec/fsr/listener/inbound.rb +45 -5
- data/spec/fsr/listener/outbound.rb +109 -9
- data/spec/fsr/loading.rb +1 -1
- data/spec/fsr_listener_helper.rb +22 -0
- data/tasks/setup.rake +12 -4
- metadata +9 -5
- data/tasks/rcov.rake +0 -23
@@ -0,0 +1,22 @@
|
|
1
|
+
require File.join(File.expand_path("../", __FILE__), "../lib/fsr")
|
2
|
+
require FSR::ROOT/".."/:spec/:helper
|
3
|
+
require FSR::ROOT/:fsr/:listener/:outbound
|
4
|
+
gem "tmm1-em-spec"
|
5
|
+
require "em/spec"
|
6
|
+
require "fileutils"
|
7
|
+
|
8
|
+
|
9
|
+
# Shared contexts to make describing listener behavior easier
|
10
|
+
shared :fsr_listener do
|
11
|
+
def outbound_socket(listener, from, opts = {})
|
12
|
+
FSR::Log.outputters = Log4r::FileOutputter.new('spec', :filename => ($spec_log = "/tmp/fsr#{Time.now.to_i}_spec.log"), :level => Log4r::DEBUG)
|
13
|
+
FSR::Log.info "Spec Time #{Time.now} file: #{$spec_log}"
|
14
|
+
listener.receive_data("Content-Length: 0\nCaller-Caller-ID-Number: #{from}#{opts ? "\n" + opts.map{|k,v| "#{k}: #{v}" }.join("\n") : ""}\n\n")
|
15
|
+
yield
|
16
|
+
ensure
|
17
|
+
if (spec = Pathname($spec_log)).file?
|
18
|
+
puts "Socket Complete: Log Follows \n#{spec.read}"
|
19
|
+
Pathname($spec_log).delete
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/tasks/setup.rake
CHANGED
@@ -4,13 +4,21 @@ task :setup => :gem_installer do
|
|
4
4
|
# core
|
5
5
|
gem 'eventmachine'
|
6
6
|
|
7
|
-
# spec
|
8
|
-
gem 'bacon'
|
9
|
-
gem 'rcov'
|
10
|
-
|
11
7
|
# doc
|
12
8
|
gem 'yard'
|
13
9
|
|
14
10
|
setup
|
15
11
|
end
|
16
12
|
end
|
13
|
+
|
14
|
+
desc 'install all possible dependencies'
|
15
|
+
task :setup_spec => :setup do
|
16
|
+
GemInstaller.new do
|
17
|
+
# spec
|
18
|
+
gem 'bacon'
|
19
|
+
|
20
|
+
gem 'tmm1-em-spec', :lib => "em/spec"
|
21
|
+
|
22
|
+
setup
|
23
|
+
end
|
24
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bougyman-freeswitcher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jayson Vaughn
|
@@ -12,7 +12,7 @@ autorequire:
|
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
14
|
|
15
|
-
date: 2009-
|
15
|
+
date: 2009-07-03 00:00:00 -07:00
|
16
16
|
default_executable:
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: "0"
|
27
27
|
version:
|
28
|
-
description: "========================================================= FreeSWITCHeR Copyright (c) 2009 The Rubyists (Jayson Vaughn, Tj Vanderpoel, Michael Fellinger, Kevin Berry) Distributed under the terms of the MIT License. ========================================================== ABOUT ----- A ruby library for interacting with the \"FreeSWITCH\" (http://www.freeswitch.org) opensource telephony platform REQUIREMENTS ------------ * ruby (>= 1.8) * eventmachine (If you wish to use Outbound and Inbound listener) USAGE ----- An Outbound Event Listener Example that reads and returns DTMF input: -------------------------------------------------------------------- Simply just create a subclass of FSR::Listner::Outbound and all new calls/sessions will invoke the \"session_initiated\" callback method. <b>NOTE</b>: FSR uses blocks within the 'session_inititated' method to ensure that the next \"freeswich command\" is not executed until the previous \"Freeswitch command\" has finished. This is kicked off by \"answer do\" #!/usr/bin/ruby require 'fsr' require 'fsr/listener/outbound' class OutboundDemo < FSR::Listener::Outbound def session_initiated exten = @session.headers[:caller_caller_id_number] FSR::Log.info \"*** Answering incoming call from #{exten}\" answer do FSR::Log.info \"***Reading DTMF from #{exten}\" read(\"/home/freeswitch/freeswitch/sounds/music/8000/sweet.wav\", 4, 10, \"input\", 7000) do |read_var| FSR::Log.info \"***Success, grabbed #{read_var.strip} from #{exten}\" # Tell the caller what they entered speak(\"Got the DTMF of: #{read_var}\") do #Hangup the call hangup end end end end end FSR.start_oes! OutboundDemo, :port => 8084, :host => \"127.0.0.1\" An Inbound Event Socket Listener example using FreeSWITCHeR's hook system: -------------------------------------------------------------------------- #!/usr/bin/ruby require 'pp' require 'fsr' require \"fsr/listener/inbound\" # EXAMPLE 1 # This adds a hook on CHANNEL_CREATE events. You can also create a method to handle the event you're after. See the next example FSL::Inbound.add_event_hook(:CHANNEL_CREATE) {|event| FSR::Log.info \"*** [#{event.content[:unique_id]}] Channel created - greetings from the hook!\" } # EXAMPLE 2 # Define a method to handle CHANNEL_HANGUP events. def custom_channel_hangup_handler(event) FSR::Log.info \"*** [#{event.content[:unique_id]}] Channel hangup. The event:\" pp event end # This adds a hook for EXAMPLE 2 FSL::Inbound.add_event_hook(:CHANNEL_HANGUP) {|event| custom_channel_hangup_handler(event) } # Start FSR Inbound Listener FSR.start_ies!(FSL::Inbound, :host => \"localhost\", :port => 8021) An Inbound Event Socket Listener example using the on_event callback method instead of hooks: --------------------------------------------------------------------------------------------- #!/usr/bin/ruby require 'pp' require 'fsr' require \"fsr/listener/inbound\" class IesDemo < FSR::Listener::Inbound def on_event(event) pp event.headers pp event.content[:event_name] end end FSR.start_ies!(IesDemo, :host => \"localhost\", :port => 8021) An example of using FSR::CommandSocket to originate a new call in irb: ---------------------------------------------------------------------- irb(main):001:0> require 'fsr' => true irb(main):002:0> FSR.load_all_commands => [:sofia, :originate] irb(main):003:0> sock = FSR::CommandSocket.new => #<FSR::CommandSocket:0xb7a89104 @server=\"127.0.0.1\", @socket=#<TCPSocket:0xb7a8908c>, @port=\"8021\", @auth=\"ClueCon\"> irb(main):007:0> sock.originate(:target => 'sofia/gateway/carlos/8179395222', :endpoint => FSR::App::Bridge.new(\"user/bougyman\")).run => {\"Job-UUID\"=>\"732075a4-7dd5-4258-b124-6284a82a5ae7\", \"body\"=>\"\", \"Content-Type\"=>\"command/reply\", \"Reply-Text\"=>\"+OK Job-UUID: 732075a4-7dd5-4258-b124-6284a82a5ae7\"} SUPPORT ------- Home page at http://code.rubyists.com/projects/fs #rubyists on FreeNode"
|
28
|
+
description: "========================================================= FreeSWITCHeR Copyright (c) 2009 The Rubyists (Jayson Vaughn, Tj Vanderpoel, Michael Fellinger, Kevin Berry) Distributed under the terms of the MIT License. ========================================================== ABOUT ----- A ruby library for interacting with the \"FreeSWITCH\" (http://www.freeswitch.org) opensource telephony platform REQUIREMENTS ------------ * ruby (>= 1.8) * eventmachine (If you wish to use Outbound and Inbound listener) USAGE ----- An Outbound Event Listener Example that reads and returns DTMF input: -------------------------------------------------------------------- Simply just create a subclass of FSR::Listner::Outbound and all new calls/sessions will invoke the \"session_initiated\" callback method. <b>NOTE</b>: FSR uses blocks within the 'session_inititated' method to ensure that the next \"freeswich command\" is not executed until the previous \"Freeswitch command\" has finished. This is kicked off by \"answer do\" #!/usr/bin/ruby require 'fsr' require 'fsr/listener/outbound' class OutboundDemo < FSR::Listener::Outbound def session_initiated exten = @session.headers[:caller_caller_id_number] FSR::Log.info \"*** Answering incoming call from #{exten}\" answer do FSR::Log.info \"***Reading DTMF from #{exten}\" read(\"/home/freeswitch/freeswitch/sounds/music/8000/sweet.wav\", 4, 10, \"input\", 7000) do |read_var| FSR::Log.info \"***Success, grabbed #{read_var.strip} from #{exten}\" # Tell the caller what they entered speak(\"Got the DTMF of: #{read_var}\") do #Hangup the call hangup end end end end end FSR.start_oes! OutboundDemo, :port => 8084, :host => \"127.0.0.1\" An Inbound Event Socket Listener example using FreeSWITCHeR's hook system: -------------------------------------------------------------------------- #!/usr/bin/ruby require 'pp' require 'fsr' require \"fsr/listener/inbound\" # EXAMPLE 1 # This adds a hook on CHANNEL_CREATE events. You can also create a method to handle the event you're after. See the next example FSL::Inbound.add_event_hook(:CHANNEL_CREATE) {|event| FSR::Log.info \"*** [#{event.content[:unique_id]}] Channel created - greetings from the hook!\" } # EXAMPLE 2 # Define a method to handle CHANNEL_HANGUP events. def custom_channel_hangup_handler(event) FSR::Log.info \"*** [#{event.content[:unique_id]}] Channel hangup. The event:\" pp event end # This adds a hook for EXAMPLE 2 FSL::Inbound.add_event_hook(:CHANNEL_HANGUP) {|event| custom_channel_hangup_handler(event) } # Start FSR Inbound Listener FSR.start_ies!(FSL::Inbound, :host => \"localhost\", :port => 8021) An Inbound Event Socket Listener example using the on_event callback method instead of hooks: --------------------------------------------------------------------------------------------- #!/usr/bin/ruby require 'pp' require 'fsr' require \"fsr/listener/inbound\" class IesDemo < FSR::Listener::Inbound def on_event(event) pp event.headers pp event.content[:event_name] end end FSR.start_ies!(IesDemo, :host => \"localhost\", :port => 8021, :auth => \"ClueCon\") An example of using FSR::CommandSocket to originate a new call in irb: ---------------------------------------------------------------------- irb(main):001:0> require 'fsr' => true irb(main):002:0> FSR.load_all_commands => [:sofia, :originate] irb(main):003:0> sock = FSR::CommandSocket.new => #<FSR::CommandSocket:0xb7a89104 @server=\"127.0.0.1\", @socket=#<TCPSocket:0xb7a8908c>, @port=\"8021\", @auth=\"ClueCon\"> irb(main):007:0> sock.originate(:target => 'sofia/gateway/carlos/8179395222', :endpoint => FSR::App::Bridge.new(\"user/bougyman\")).run => {\"Job-UUID\"=>\"732075a4-7dd5-4258-b124-6284a82a5ae7\", \"body\"=>\"\", \"Content-Type\"=>\"command/reply\", \"Reply-Text\"=>\"+OK Job-UUID: 732075a4-7dd5-4258-b124-6284a82a5ae7\"} SUPPORT ------- Home page at http://code.rubyists.com/projects/fs #rubyists on FreeNode"
|
29
29
|
email: FreeSWITCHeR@rubyists.com
|
30
30
|
executables: []
|
31
31
|
|
@@ -75,6 +75,7 @@ files:
|
|
75
75
|
- lib/fsr/cmd/sofia/status.rb
|
76
76
|
- lib/fsr/cmd/sofia_contact.rb
|
77
77
|
- lib/fsr/cmd/status.rb
|
78
|
+
- lib/fsr/cmd/uuid_dump.rb
|
78
79
|
- lib/fsr/command_socket.rb
|
79
80
|
- lib/fsr/database.rb
|
80
81
|
- lib/fsr/database/call_limit.rb
|
@@ -88,6 +89,7 @@ files:
|
|
88
89
|
- lib/fsr/listener/header_and_content_response.rb
|
89
90
|
- lib/fsr/listener/inbound.rb
|
90
91
|
- lib/fsr/listener/inbound/event.rb
|
92
|
+
- lib/fsr/listener/mock.rb
|
91
93
|
- lib/fsr/listener/outbound.rb
|
92
94
|
- lib/fsr/model/call.rb
|
93
95
|
- lib/fsr/version.rb
|
@@ -99,13 +101,13 @@ files:
|
|
99
101
|
- tasks/gem_installer.rake
|
100
102
|
- tasks/install_dependencies.rake
|
101
103
|
- tasks/manifest.rake
|
102
|
-
- tasks/rcov.rake
|
103
104
|
- tasks/release.rake
|
104
105
|
- tasks/reversion.rake
|
105
106
|
- tasks/setup.rake
|
106
107
|
- tasks/spec.rake
|
107
108
|
- tasks/yard.rake
|
108
109
|
- spec/helper.rb
|
110
|
+
- spec/fsr_listener_helper.rb
|
109
111
|
- spec/fsr/app.rb
|
110
112
|
- spec/fsr/app/answer.rb
|
111
113
|
- spec/fsr/app/bridge.rb
|
@@ -125,6 +127,7 @@ files:
|
|
125
127
|
- spec/fsr/cmd/originate.rb
|
126
128
|
- spec/fsr/cmd/sofia.rb
|
127
129
|
- spec/fsr/cmd/sofia/profile.rb
|
130
|
+
- spec/fsr/cmd/uuid_dump.rb
|
128
131
|
- spec/fsr/listener.rb
|
129
132
|
- spec/fsr/listener/header_and_content_response.rb
|
130
133
|
- spec/fsr/listener/inbound.rb
|
@@ -232,7 +235,7 @@ post_install_message: |
|
|
232
235
|
|
233
236
|
end
|
234
237
|
|
235
|
-
FSR.start_ies!(IesDemo, :host => "localhost", :port => 8021)
|
238
|
+
FSR.start_ies!(IesDemo, :host => "localhost", :port => 8021, :auth => "ClueCon")
|
236
239
|
|
237
240
|
|
238
241
|
An example of using FSR::CommandSocket to originate a new call in irb:
|
@@ -300,6 +303,7 @@ test_files:
|
|
300
303
|
- spec/fsr/cmd/originate.rb
|
301
304
|
- spec/fsr/cmd/sofia.rb
|
302
305
|
- spec/fsr/cmd/sofia/profile.rb
|
306
|
+
- spec/fsr/cmd/uuid_dump.rb
|
303
307
|
- spec/fsr/listener.rb
|
304
308
|
- spec/fsr/listener/header_and_content_response.rb
|
305
309
|
- spec/fsr/listener/inbound.rb
|
data/tasks/rcov.rake
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
desc 'code coverage'
|
2
|
-
task :rcov => :clean do
|
3
|
-
specs = PROJECT_SPECS
|
4
|
-
|
5
|
-
ignore = %w[ gem rack bacon ]
|
6
|
-
|
7
|
-
if RUBY_VERSION >= '1.8.7'
|
8
|
-
ignore << 'begin_with' << 'end_with'
|
9
|
-
end
|
10
|
-
if RUBY_VERSION < '1.9'
|
11
|
-
ignore << 'fiber'
|
12
|
-
end
|
13
|
-
|
14
|
-
ignored = ignore.join(',')
|
15
|
-
|
16
|
-
cmd = "rcov --aggregate coverage.data --sort coverage -t --%s -x '#{ignored}' %s"
|
17
|
-
|
18
|
-
while spec = specs.shift
|
19
|
-
puts '', "Gather coverage for #{spec} ..."
|
20
|
-
html = specs.empty? ? 'html' : 'no-html'
|
21
|
-
sh(cmd % [html, spec])
|
22
|
-
end
|
23
|
-
end
|