FreeSWITCHeR 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. data/License.txt +20 -0
  2. data/NEWS +3 -0
  3. data/README +85 -0
  4. data/Rakefile +82 -0
  5. data/bin/cmd_demo.rb +19 -0
  6. data/bin/ies_demo.rb +19 -0
  7. data/bin/ies_demo_with_hook.rb +27 -0
  8. data/bin/oes_demo.rb +22 -0
  9. data/lib/fsr.rb +86 -0
  10. data/lib/fsr/app.rb +72 -0
  11. data/lib/fsr/app/answer.rb +21 -0
  12. data/lib/fsr/app/bridge.rb +33 -0
  13. data/lib/fsr/app/conference.rb +29 -0
  14. data/lib/fsr/app/fifo.rb +38 -0
  15. data/lib/fsr/app/fs_break.rb +21 -0
  16. data/lib/fsr/app/fs_sleep.rb +24 -0
  17. data/lib/fsr/app/hangup.rb +22 -0
  18. data/lib/fsr/app/log.rb +24 -0
  19. data/lib/fsr/app/playback.rb +23 -0
  20. data/lib/fsr/app/set.rb +22 -0
  21. data/lib/fsr/app/speak.rb +25 -0
  22. data/lib/fsr/app/transfer.rb +24 -0
  23. data/lib/fsr/cmd.rb +57 -0
  24. data/lib/fsr/cmd/fsctl.rb +41 -0
  25. data/lib/fsr/cmd/originate.rb +46 -0
  26. data/lib/fsr/cmd/sofia.rb +40 -0
  27. data/lib/fsr/cmd/sofia/profile.rb +75 -0
  28. data/lib/fsr/cmd/sofia/status.rb +39 -0
  29. data/lib/fsr/cmd/sofia_contact.rb +31 -0
  30. data/lib/fsr/cmd/status.rb +25 -0
  31. data/lib/fsr/command_socket.rb +29 -0
  32. data/lib/fsr/database.rb +7 -0
  33. data/lib/fsr/database/call_limit.rb +21 -0
  34. data/lib/fsr/database/core.rb +30 -0
  35. data/lib/fsr/database/sofia_reg_external.rb +0 -0
  36. data/lib/fsr/database/sofia_reg_internal.rb +0 -0
  37. data/lib/fsr/database/voicemail_default.rb +0 -0
  38. data/lib/fsr/event_socket.rb +41 -0
  39. data/lib/fsr/fake_socket.rb +68 -0
  40. data/lib/fsr/listener.rb +10 -0
  41. data/lib/fsr/listener/header_and_content_response.rb +21 -0
  42. data/lib/fsr/listener/inbound.rb +61 -0
  43. data/lib/fsr/listener/inbound/event.rb +42 -0
  44. data/lib/fsr/listener/outbound.rb +62 -0
  45. data/spec/fsr/app.rb +8 -0
  46. data/spec/fsr/app/bridge.rb +17 -0
  47. data/spec/fsr/app/conference.rb +12 -0
  48. data/spec/fsr/app/fifo.rb +29 -0
  49. data/spec/fsr/cmd.rb +8 -0
  50. data/spec/fsr/cmd/originate.rb +12 -0
  51. data/spec/fsr/cmd/sofia.rb +69 -0
  52. data/spec/fsr/cmd/sofia/profile.rb +58 -0
  53. data/spec/fsr/listener.rb +12 -0
  54. data/spec/fsr/listener/inbound.rb +19 -0
  55. data/spec/fsr/listener/outbound.rb +19 -0
  56. data/spec/fsr/loading.rb +27 -0
  57. data/spec/helper.rb +14 -0
  58. data/tasks/package.rake +29 -0
  59. data/tasks/spec.rake +59 -0
  60. metadata +224 -0
@@ -0,0 +1,27 @@
1
+ require 'spec/helper'
2
+
3
+
4
+ describe "Testing FSR module loading methods" do
5
+ # When you add applications you must modify the expected apps_loaded behavior
6
+ it "Loads all applications" do
7
+ all_apps = [:set, :transfer, :speak, :fs_sleep, :playback, :answer, :fifo, :bridge, :hangup, :conference, :fs_break, :log]
8
+ # Add any apps which will load to this set
9
+ apps_loaded = FSR.load_all_applications
10
+ apps_loaded.kind_of?(Array).should == true
11
+ all_apps.each do |app|
12
+ apps_loaded.delete(app).should == app
13
+ end
14
+ apps_loaded.size.should == 0
15
+ end
16
+
17
+ # When you add commands you must modify the expected cmds_loaded behavior
18
+ it "Loads all commands" do
19
+ all_commands = [:originate, :sofia, :fsctl, :sofia_contact, :status] # If you add a command add it to this set
20
+ cmds_loaded = FSR.load_all_commands
21
+ cmds_loaded.kind_of?(Array).should == true
22
+ all_commands.each do |cmd|
23
+ cmds_loaded.delete(cmd).should == cmd
24
+ end
25
+ cmds_loaded.size.should == 0
26
+ end
27
+ end
@@ -0,0 +1,14 @@
1
+ begin
2
+ require 'bacon'
3
+ rescue LoadError
4
+ puts <<-EOS
5
+ To run these tests you must install bacon.
6
+ Quick and easy install for gem:
7
+ gem install bacon
8
+ EOS
9
+ exit(0)
10
+ end
11
+
12
+ Bacon.summary_on_exit
13
+
14
+ require File.expand_path(File.join(File.dirname(__FILE__), '../lib/fsr'))
@@ -0,0 +1,29 @@
1
+
2
+ require 'rake'
3
+ require "lib/fsr"
4
+ namespace :pkg do
5
+ desc 'Build the gemspec'
6
+ task :build_gemspec do
7
+ require "erb"
8
+ unfiltered_files = Dir['**/*']
9
+ spec_files = unfiltered_files.reject do |filename|
10
+ filename.match(/^(?:spec|config|script|log|contrib)(?:\/|$)/) || File.basename(filename).match(/\.(?:gem|gemspec|swp|gemspec\.erb)$/) || File.basename(filename).match(/^(?:\.|RIDE)/)
11
+ end.inspect
12
+
13
+ spec_test_files = (["spec"] + Dir['spec/**/*']).inspect
14
+ spec_template = ERB.new(File.read("freeswitcher.gemspec.erb"))
15
+ version = FSR::VERSION
16
+ description = File.read("README")
17
+ File.open("freeswitcher.gemspec", "w+") { |specfile| specfile.puts spec_template.result(binding) }
18
+
19
+ end
20
+
21
+ desc 'Make the gem'
22
+ task :gem => :build_gemspec do
23
+ output = %x{gem build freeswitcher.gemspec}
24
+ raise "Package did not build - #{output}" unless File.exists?("FreeSWITCHeR-#{FSR::VERSION}.gem")
25
+ puts output
26
+ end
27
+
28
+ end
29
+
@@ -0,0 +1,59 @@
1
+ # Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ require 'rake'
5
+
6
+ desc 'Run all specs'
7
+ task :spec => :setup do
8
+ require 'open3'
9
+
10
+ specs = Dir['spec/fsr/**/*.rb']
11
+ # specs.delete_if{|f| f =~ /cache\/common\.rb/ }
12
+
13
+ some_failed = false
14
+ total = specs.size
15
+ len = specs.sort.last.size
16
+ left_format = "%4d/%d: %-#{len + 12}s"
17
+ red, green = "\e[31m%s\e[0m", "\e[32m%s\e[0m"
18
+ matcher = /(\d+) specifications \((\d+) requirements\), (\d+) failures, (\d+) errors/
19
+ tt = ta = tf = te = 0
20
+
21
+ specs.each_with_index do |spec, idx|
22
+ print(left_format % [idx + 1, total, spec])
23
+ unless RUBY_PLATFORM.include?("mswin32")
24
+ Open3.popen3("#{RUBY} -rubygems #{spec}") do |sin, sout, serr|
25
+ out = sout.read
26
+ err = serr.read
27
+
28
+ all = out.match(matcher).captures.map{|c| c.to_i }
29
+ tests, assertions, failures, errors = all
30
+ tt += tests; ta += assertions; tf += failures; te += errors
31
+
32
+ if tests == 0 || failures + errors > 0
33
+ some_failed = true
34
+ puts((red % "%5d tests, %d assertions, %d failures, %d errors") % all)
35
+ puts "", out, err, ""
36
+ else
37
+ puts((green % "%5d passed") % tests)
38
+ end
39
+ end
40
+ else
41
+ out = %x{#{RUBY} -rubygems #{spec}}
42
+ error = ""
43
+ all = out.match(matcher).captures.map{|c| c.to_i }
44
+ tests, assertions, failures, errors = all
45
+ tt += tests; ta += assertions; tf += failures; te += errors
46
+
47
+ if tests == 0 || failures + errors > 0
48
+ some_failed = true
49
+ puts((red % "%5d tests, %d assertions, %d failures, %d errors") % all)
50
+ puts "", out, err, ""
51
+ else
52
+ puts((green % "%5d passed") % tests)
53
+ end
54
+ end
55
+ end
56
+
57
+ puts "#{tt} specifications, (#{ta} requirements), #{tf} failures, #{te} errors"
58
+ exit 1 if some_failed
59
+ end
metadata ADDED
@@ -0,0 +1,224 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: FreeSWITCHeR
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.8
5
+ platform: ruby
6
+ authors:
7
+ - Jayson Vaughn
8
+ - Michael Fellinger
9
+ - Kevin Berry
10
+ - TJ Vanderpoel
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+
15
+ date: 2009-04-09 00:00:00 -05:00
16
+ default_executable:
17
+ dependencies:
18
+ - !ruby/object:Gem::Dependency
19
+ name: eventmachine
20
+ type: :runtime
21
+ version_requirement:
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: "0"
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 ----- *** STILL UNDER HEAVY DEVELOPMENT *** A ruby library for interacting with the \"FreeSWITCH\" (http://www.freeswitch.org) opensource telephony platform *** STILL UNDER HEAVY DEVELOPMENT *** Requirements ------------ - ruby (>= 1.8) - eventmachine (If you wish to use Outbound and Inbound listener) Usage ----- Example of originating a new call in 'irb' using FSR::CommandSocket#originate: 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\"} Example of creating an Outbound Eventsocket listener: #!/usr/bin/env ruby require 'fsr' require \"fsr/listener/outbound\" class OesDemo < FSR::Listener::Outbound def session_initiated(session) number = session.headers[:caller_caller_id_number] # Grab the inbound caller id FSR::Log.info \"*** Answering incoming call from #{number}\" answer # Answer the call set \"hangup_after_bridge=true\" # Set a variable speak 'Hello, This is your phone switch. Have a great day' # use mod_flite to speak hangup # Hangup the call end end FSR.start_oes!(OesDemo, :port => 1888, :host => \"localhost\") Example of creating an Inbound Eventsocket listener: #!/usr/bin/env ruby 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) Support ------- Home page at http://code.rubyists.com/projects/fs #rubyists on FreeNode"
29
+ email: FreeSWITCHeR@rubyists.com
30
+ executables: []
31
+
32
+ extensions: []
33
+
34
+ extra_rdoc_files: []
35
+
36
+ files:
37
+ - License.txt
38
+ - NEWS
39
+ - README
40
+ - Rakefile
41
+ - bin
42
+ - bin/cmd_demo.rb
43
+ - bin/ies_demo.rb
44
+ - bin/ies_demo_with_hook.rb
45
+ - bin/oes_demo.rb
46
+ - lib
47
+ - lib/fsr
48
+ - lib/fsr/app
49
+ - lib/fsr/app/answer.rb
50
+ - lib/fsr/app/bridge.rb
51
+ - lib/fsr/app/conference.rb
52
+ - lib/fsr/app/fifo.rb
53
+ - lib/fsr/app/fs_break.rb
54
+ - lib/fsr/app/fs_sleep.rb
55
+ - lib/fsr/app/hangup.rb
56
+ - lib/fsr/app/log.rb
57
+ - lib/fsr/app/playback.rb
58
+ - lib/fsr/app/set.rb
59
+ - lib/fsr/app/speak.rb
60
+ - lib/fsr/app/transfer.rb
61
+ - lib/fsr/app.rb
62
+ - lib/fsr/cmd
63
+ - lib/fsr/cmd/fsctl.rb
64
+ - lib/fsr/cmd/originate.rb
65
+ - lib/fsr/cmd/sofia
66
+ - lib/fsr/cmd/sofia/profile.rb
67
+ - lib/fsr/cmd/sofia/status.rb
68
+ - lib/fsr/cmd/sofia.rb
69
+ - lib/fsr/cmd/sofia_contact.rb
70
+ - lib/fsr/cmd/status.rb
71
+ - lib/fsr/cmd.rb
72
+ - lib/fsr/command_socket.rb
73
+ - lib/fsr/database
74
+ - lib/fsr/database/call_limit.rb
75
+ - lib/fsr/database/core.rb
76
+ - lib/fsr/database/sofia_reg_external.rb
77
+ - lib/fsr/database/sofia_reg_internal.rb
78
+ - lib/fsr/database/voicemail_default.rb
79
+ - lib/fsr/database.rb
80
+ - lib/fsr/event_socket.rb
81
+ - lib/fsr/fake_socket.rb
82
+ - lib/fsr/listener
83
+ - lib/fsr/listener/header_and_content_response.rb
84
+ - lib/fsr/listener/inbound
85
+ - lib/fsr/listener/inbound/event.rb
86
+ - lib/fsr/listener/inbound.rb
87
+ - lib/fsr/listener/outbound.rb
88
+ - lib/fsr/listener.rb
89
+ - lib/fsr.rb
90
+ - tasks
91
+ - tasks/package.rake
92
+ - tasks/spec.rake
93
+ has_rdoc: false
94
+ homepage: http://code.rubyists.com/projects/fs
95
+ post_install_message: |
96
+ =========================================================
97
+ FreeSWITCHeR
98
+ Copyright (c) 2009 The Rubyists (Jayson Vaughn, Tj Vanderpoel, Michael Fellinger, Kevin Berry)
99
+ Distributed under the terms of the MIT License.
100
+ ==========================================================
101
+
102
+ About
103
+ -----
104
+ *** STILL UNDER HEAVY DEVELOPMENT ***
105
+
106
+ A ruby library for interacting with the "FreeSWITCH" (http://www.freeswitch.org) opensource telephony platform
107
+
108
+ *** STILL UNDER HEAVY DEVELOPMENT ***
109
+
110
+ Requirements
111
+ ------------
112
+ - ruby (>= 1.8)
113
+ - eventmachine (If you wish to use Outbound and Inbound listener)
114
+
115
+ Usage
116
+ -----
117
+
118
+ Example of originating a new call in 'irb' using FSR::CommandSocket#originate:
119
+
120
+ irb(main):001:0> require 'fsr'
121
+ => true
122
+
123
+ irb(main):002:0> FSR.load_all_commands
124
+ => [:sofia, :originate]
125
+
126
+ irb(main):003:0> sock = FSR::CommandSocket.new
127
+ => #<FSR::CommandSocket:0xb7a89104 @server="127.0.0.1", @socket=#<TCPSocket:0xb7a8908c>, @port="8021", @auth="ClueCon">
128
+
129
+ irb(main):007:0> sock.originate(:target => 'sofia/gateway/carlos/8179395222', :endpoint => FSR::App::Bridge.new("user/bougyman")).run
130
+ => {"Job-UUID"=>"732075a4-7dd5-4258-b124-6284a82a5ae7", "body"=>"", "Content-Type"=>"command/reply", "Reply-Text"=>"+OK Job-UUID: 732075a4-7dd5-4258-b124-6284a82a5ae7"}
131
+
132
+
133
+ Example of creating an Outbound Eventsocket listener:
134
+
135
+ #!/usr/bin/env ruby
136
+
137
+ require 'fsr'
138
+ require "fsr/listener/outbound"
139
+
140
+ class OesDemo < FSR::Listener::Outbound
141
+
142
+ def session_initiated(session)
143
+ number = session.headers[:caller_caller_id_number] # Grab the inbound caller id
144
+ FSR::Log.info "*** Answering incoming call from #{number}"
145
+ answer # Answer the call
146
+ set "hangup_after_bridge=true" # Set a variable
147
+ speak 'Hello, This is your phone switch. Have a great day' # use mod_flite to speak
148
+ hangup # Hangup the call
149
+ end
150
+
151
+ end
152
+
153
+ FSR.start_oes!(OesDemo, :port => 1888, :host => "localhost")
154
+
155
+
156
+
157
+ Example of creating an Inbound Eventsocket listener:
158
+
159
+ #!/usr/bin/env ruby
160
+
161
+ require 'fsr'
162
+ require "fsr/listener/inbound"
163
+
164
+ class IesDemo < FSR::Listener::Inbound
165
+
166
+ def on_event(event)
167
+ pp event.headers
168
+ pp event.content[:event_name]
169
+ end
170
+
171
+ end
172
+
173
+ FSR.start_ies!(IesDemo, :host => "localhost", :port => 8021)
174
+
175
+
176
+
177
+ Support
178
+ -------
179
+ Home page at http://code.rubyists.com/projects/fs
180
+ #rubyists on FreeNode
181
+
182
+ rdoc_options: []
183
+
184
+ require_paths:
185
+ - lib
186
+ required_ruby_version: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - ">="
189
+ - !ruby/object:Gem::Version
190
+ version: "0"
191
+ version:
192
+ required_rubygems_version: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - ">="
195
+ - !ruby/object:Gem::Version
196
+ version: "0"
197
+ version:
198
+ requirements: []
199
+
200
+ rubyforge_project:
201
+ rubygems_version: 1.3.1
202
+ signing_key:
203
+ specification_version: 2
204
+ summary: A library for interacting with the "FreeSWITCH":http://freeswitch.org telephony platform
205
+ test_files:
206
+ - spec
207
+ - spec/fsr
208
+ - spec/fsr/app
209
+ - spec/fsr/app/bridge.rb
210
+ - spec/fsr/app/conference.rb
211
+ - spec/fsr/app/fifo.rb
212
+ - spec/fsr/app.rb
213
+ - spec/fsr/cmd
214
+ - spec/fsr/cmd/originate.rb
215
+ - spec/fsr/cmd/sofia
216
+ - spec/fsr/cmd/sofia/profile.rb
217
+ - spec/fsr/cmd/sofia.rb
218
+ - spec/fsr/cmd.rb
219
+ - spec/fsr/listener
220
+ - spec/fsr/listener/inbound.rb
221
+ - spec/fsr/listener/outbound.rb
222
+ - spec/fsr/listener.rb
223
+ - spec/fsr/loading.rb
224
+ - spec/helper.rb