freeswitcher 0.4.1 → 0.4.2
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.
- data/AUTHORS +5 -2
- data/CHANGELOG +349 -263
- 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 +8 -5
- data/tasks/rcov.rake +0 -23
data/MANIFEST
CHANGED
@@ -39,6 +39,7 @@ lib/fsr/cmd/sofia/profile.rb
|
|
39
39
|
lib/fsr/cmd/sofia/status.rb
|
40
40
|
lib/fsr/cmd/sofia_contact.rb
|
41
41
|
lib/fsr/cmd/status.rb
|
42
|
+
lib/fsr/cmd/uuid_dump.rb
|
42
43
|
lib/fsr/command_socket.rb
|
43
44
|
lib/fsr/database.rb
|
44
45
|
lib/fsr/database/call_limit.rb
|
@@ -52,6 +53,7 @@ lib/fsr/listener.rb
|
|
52
53
|
lib/fsr/listener/header_and_content_response.rb
|
53
54
|
lib/fsr/listener/inbound.rb
|
54
55
|
lib/fsr/listener/inbound/event.rb
|
56
|
+
lib/fsr/listener/mock.rb
|
55
57
|
lib/fsr/listener/outbound.rb
|
56
58
|
lib/fsr/model/call.rb
|
57
59
|
lib/fsr/version.rb
|
@@ -63,13 +65,13 @@ tasks/gem.rake
|
|
63
65
|
tasks/gem_installer.rake
|
64
66
|
tasks/install_dependencies.rake
|
65
67
|
tasks/manifest.rake
|
66
|
-
tasks/rcov.rake
|
67
68
|
tasks/release.rake
|
68
69
|
tasks/reversion.rake
|
69
70
|
tasks/setup.rake
|
70
71
|
tasks/spec.rake
|
71
72
|
tasks/yard.rake
|
72
73
|
spec/helper.rb
|
74
|
+
spec/fsr_listener_helper.rb
|
73
75
|
spec/fsr/app.rb
|
74
76
|
spec/fsr/app/answer.rb
|
75
77
|
spec/fsr/app/bridge.rb
|
@@ -89,6 +91,7 @@ spec/fsr/cmd/calls.rb
|
|
89
91
|
spec/fsr/cmd/originate.rb
|
90
92
|
spec/fsr/cmd/sofia.rb
|
91
93
|
spec/fsr/cmd/sofia/profile.rb
|
94
|
+
spec/fsr/cmd/uuid_dump.rb
|
92
95
|
spec/fsr/listener.rb
|
93
96
|
spec/fsr/listener/header_and_content_response.rb
|
94
97
|
spec/fsr/listener/inbound.rb
|
data/README
CHANGED
@@ -97,7 +97,7 @@ An Inbound Event Socket Listener example using the on_event callback method inst
|
|
97
97
|
|
98
98
|
end
|
99
99
|
|
100
|
-
FSR.start_ies!(IesDemo, :host => "localhost", :port => 8021)
|
100
|
+
FSR.start_ies!(IesDemo, :host => "localhost", :port => 8021, :auth => "ClueCon")
|
101
101
|
|
102
102
|
|
103
103
|
An example of using FSR::CommandSocket to originate a new call in irb:
|
data/Rakefile
CHANGED
@@ -10,6 +10,7 @@ RELEASE_FILES = PROJECT_FILES.reject { |f| f.match(/^(?:contrib)(?:\/|$)/) }
|
|
10
10
|
GEM_FILES = RELEASE_FILES.reject { |f| f.match(/^(?:spec)(?:\/|$)/) }
|
11
11
|
PROJECT_SPECS = (RELEASE_FILES - GEM_FILES).reject { |d| d.match(/(?:helper.rb)$/) }
|
12
12
|
GEM_FILES << "spec/helper.rb" if Pathname("spec/helper.rb").file?
|
13
|
+
GEM_FILES << "spec/fsr_listener_helper.rb" if Pathname("spec/helper.rb").file?
|
13
14
|
|
14
15
|
|
15
16
|
GEMSPEC = Gem::Specification.new do |spec|
|
data/freeswitcher.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{freeswitcher}
|
5
|
-
s.version = "0.4.
|
5
|
+
s.version = "0.4.2"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Jayson Vaughn", "Michael Fellinger", "Kevin Berry", "TJ Vanderpoel"]
|
9
|
-
s.date = %q{2009-
|
9
|
+
s.date = %q{2009-07-03}
|
10
10
|
s.description = %q{=========================================================
|
11
11
|
FreeSWITCHeR
|
12
12
|
Copyright (c) 2009 The Rubyists (Jayson Vaughn, Tj Vanderpoel, Michael Fellinger, Kevin Berry)
|
@@ -106,7 +106,7 @@ An Inbound Event Socket Listener example using the on_event callback method inst
|
|
106
106
|
|
107
107
|
end
|
108
108
|
|
109
|
-
FSR.start_ies!(IesDemo, :host => "localhost", :port => 8021)
|
109
|
+
FSR.start_ies!(IesDemo, :host => "localhost", :port => 8021, :auth => "ClueCon")
|
110
110
|
|
111
111
|
|
112
112
|
An example of using FSR::CommandSocket to originate a new call in irb:
|
@@ -132,7 +132,7 @@ Home page at http://code.rubyists.com/projects/fs
|
|
132
132
|
#rubyists on FreeNode
|
133
133
|
}
|
134
134
|
s.email = %q{FreeSWITCHeR@rubyists.com}
|
135
|
-
s.files = [".gitignore", "AUTHORS", "CHANGELOG", "License.txt", "MANIFEST", "NEWS", "README", "Rakefile", "examples/inbound_event_socket.rb", "examples/inbound_socket_events.rb", "examples/outbound_event_socket.rb", "freeswitcher.gemspec", "lib/fsr.rb", "lib/fsr/app.rb", "lib/fsr/app/answer.rb", "lib/fsr/app/bridge.rb", "lib/fsr/app/conference.rb", "lib/fsr/app/fifo.rb", "lib/fsr/app/fs_break.rb", "lib/fsr/app/fs_sleep.rb", "lib/fsr/app/hangup.rb", "lib/fsr/app/limit.rb", "lib/fsr/app/log.rb", "lib/fsr/app/play_and_get_digits.rb", "lib/fsr/app/playback.rb", "lib/fsr/app/read.rb", "lib/fsr/app/set.rb", "lib/fsr/app/speak.rb", "lib/fsr/app/transfer.rb", "lib/fsr/app/uuid_dump.rb", "lib/fsr/app/uuid_getvar.rb", "lib/fsr/app/uuid_setvar.rb", "lib/fsr/cmd.rb", "lib/fsr/cmd/calls.rb", "lib/fsr/cmd/fsctl.rb", "lib/fsr/cmd/originate.rb", "lib/fsr/cmd/sofia.rb", "lib/fsr/cmd/sofia/profile.rb", "lib/fsr/cmd/sofia/status.rb", "lib/fsr/cmd/sofia_contact.rb", "lib/fsr/cmd/status.rb", "lib/fsr/command_socket.rb", "lib/fsr/database.rb", "lib/fsr/database/call_limit.rb", "lib/fsr/database/core.rb", "lib/fsr/database/sofia_reg_external.rb", "lib/fsr/database/sofia_reg_internal.rb", "lib/fsr/database/voicemail_default.rb", "lib/fsr/event_socket.rb", "lib/fsr/fake_socket.rb", "lib/fsr/listener.rb", "lib/fsr/listener/header_and_content_response.rb", "lib/fsr/listener/inbound.rb", "lib/fsr/listener/inbound/event.rb", "lib/fsr/listener/outbound.rb", "lib/fsr/model/call.rb", "lib/fsr/version.rb", "tasks/authors.rake", "tasks/bacon.rake", "tasks/changelog.rake", "tasks/copyright.rake", "tasks/gem.rake", "tasks/gem_installer.rake", "tasks/install_dependencies.rake", "tasks/manifest.rake", "tasks/
|
135
|
+
s.files = [".gitignore", "AUTHORS", "CHANGELOG", "License.txt", "MANIFEST", "NEWS", "README", "Rakefile", "examples/inbound_event_socket.rb", "examples/inbound_socket_events.rb", "examples/outbound_event_socket.rb", "freeswitcher.gemspec", "lib/fsr.rb", "lib/fsr/app.rb", "lib/fsr/app/answer.rb", "lib/fsr/app/bridge.rb", "lib/fsr/app/conference.rb", "lib/fsr/app/fifo.rb", "lib/fsr/app/fs_break.rb", "lib/fsr/app/fs_sleep.rb", "lib/fsr/app/hangup.rb", "lib/fsr/app/limit.rb", "lib/fsr/app/log.rb", "lib/fsr/app/play_and_get_digits.rb", "lib/fsr/app/playback.rb", "lib/fsr/app/read.rb", "lib/fsr/app/set.rb", "lib/fsr/app/speak.rb", "lib/fsr/app/transfer.rb", "lib/fsr/app/uuid_dump.rb", "lib/fsr/app/uuid_getvar.rb", "lib/fsr/app/uuid_setvar.rb", "lib/fsr/cmd.rb", "lib/fsr/cmd/calls.rb", "lib/fsr/cmd/fsctl.rb", "lib/fsr/cmd/originate.rb", "lib/fsr/cmd/sofia.rb", "lib/fsr/cmd/sofia/profile.rb", "lib/fsr/cmd/sofia/status.rb", "lib/fsr/cmd/sofia_contact.rb", "lib/fsr/cmd/status.rb", "lib/fsr/cmd/uuid_dump.rb", "lib/fsr/command_socket.rb", "lib/fsr/database.rb", "lib/fsr/database/call_limit.rb", "lib/fsr/database/core.rb", "lib/fsr/database/sofia_reg_external.rb", "lib/fsr/database/sofia_reg_internal.rb", "lib/fsr/database/voicemail_default.rb", "lib/fsr/event_socket.rb", "lib/fsr/fake_socket.rb", "lib/fsr/listener.rb", "lib/fsr/listener/header_and_content_response.rb", "lib/fsr/listener/inbound.rb", "lib/fsr/listener/inbound/event.rb", "lib/fsr/listener/mock.rb", "lib/fsr/listener/outbound.rb", "lib/fsr/model/call.rb", "lib/fsr/version.rb", "tasks/authors.rake", "tasks/bacon.rake", "tasks/changelog.rake", "tasks/copyright.rake", "tasks/gem.rake", "tasks/gem_installer.rake", "tasks/install_dependencies.rake", "tasks/manifest.rake", "tasks/release.rake", "tasks/reversion.rake", "tasks/setup.rake", "tasks/spec.rake", "tasks/yard.rake", "spec/helper.rb", "spec/fsr_listener_helper.rb", "spec/fsr/app.rb", "spec/fsr/app/answer.rb", "spec/fsr/app/bridge.rb", "spec/fsr/app/conference.rb", "spec/fsr/app/fifo.rb", "spec/fsr/app/fs_break.rb", "spec/fsr/app/fs_sleep.rb", "spec/fsr/app/hangup.rb", "spec/fsr/app/limit.rb", "spec/fsr/app/log.rb", "spec/fsr/app/play_and_get_digits.rb", "spec/fsr/app/playback.rb", "spec/fsr/app/set.rb", "spec/fsr/app/transfer.rb", "spec/fsr/cmd.rb", "spec/fsr/cmd/calls.rb", "spec/fsr/cmd/originate.rb", "spec/fsr/cmd/sofia.rb", "spec/fsr/cmd/sofia/profile.rb", "spec/fsr/cmd/uuid_dump.rb", "spec/fsr/listener.rb", "spec/fsr/listener/header_and_content_response.rb", "spec/fsr/listener/inbound.rb", "spec/fsr/listener/outbound.rb", "spec/fsr/loading.rb"]
|
136
136
|
s.homepage = %q{http://code.rubyists.com/projects/fs}
|
137
137
|
s.post_install_message = %q{=========================================================
|
138
138
|
FreeSWITCHeR
|
@@ -233,7 +233,7 @@ An Inbound Event Socket Listener example using the on_event callback method inst
|
|
233
233
|
|
234
234
|
end
|
235
235
|
|
236
|
-
FSR.start_ies!(IesDemo, :host => "localhost", :port => 8021)
|
236
|
+
FSR.start_ies!(IesDemo, :host => "localhost", :port => 8021, :auth => "ClueCon")
|
237
237
|
|
238
238
|
|
239
239
|
An example of using FSR::CommandSocket to originate a new call in irb:
|
@@ -260,9 +260,9 @@ Home page at http://code.rubyists.com/projects/fs
|
|
260
260
|
}
|
261
261
|
s.require_paths = ["lib"]
|
262
262
|
s.rubyforge_project = %q{freeswitcher}
|
263
|
-
s.rubygems_version = %q{1.3.
|
263
|
+
s.rubygems_version = %q{1.3.4}
|
264
264
|
s.summary = %q{A library for interacting with the "FreeSWITCH":http://freeswitch.org telephony platform}
|
265
|
-
s.test_files = ["spec/fsr/app.rb", "spec/fsr/app/answer.rb", "spec/fsr/app/bridge.rb", "spec/fsr/app/conference.rb", "spec/fsr/app/fifo.rb", "spec/fsr/app/fs_break.rb", "spec/fsr/app/fs_sleep.rb", "spec/fsr/app/hangup.rb", "spec/fsr/app/limit.rb", "spec/fsr/app/log.rb", "spec/fsr/app/play_and_get_digits.rb", "spec/fsr/app/playback.rb", "spec/fsr/app/set.rb", "spec/fsr/app/transfer.rb", "spec/fsr/cmd.rb", "spec/fsr/cmd/calls.rb", "spec/fsr/cmd/originate.rb", "spec/fsr/cmd/sofia.rb", "spec/fsr/cmd/sofia/profile.rb", "spec/fsr/listener.rb", "spec/fsr/listener/header_and_content_response.rb", "spec/fsr/listener/inbound.rb", "spec/fsr/listener/outbound.rb", "spec/fsr/loading.rb"]
|
265
|
+
s.test_files = ["spec/fsr/app.rb", "spec/fsr/app/answer.rb", "spec/fsr/app/bridge.rb", "spec/fsr/app/conference.rb", "spec/fsr/app/fifo.rb", "spec/fsr/app/fs_break.rb", "spec/fsr/app/fs_sleep.rb", "spec/fsr/app/hangup.rb", "spec/fsr/app/limit.rb", "spec/fsr/app/log.rb", "spec/fsr/app/play_and_get_digits.rb", "spec/fsr/app/playback.rb", "spec/fsr/app/set.rb", "spec/fsr/app/transfer.rb", "spec/fsr/cmd.rb", "spec/fsr/cmd/calls.rb", "spec/fsr/cmd/originate.rb", "spec/fsr/cmd/sofia.rb", "spec/fsr/cmd/sofia/profile.rb", "spec/fsr/cmd/uuid_dump.rb", "spec/fsr/listener.rb", "spec/fsr/listener/header_and_content_response.rb", "spec/fsr/listener/inbound.rb", "spec/fsr/listener/outbound.rb", "spec/fsr/loading.rb"]
|
266
266
|
|
267
267
|
if s.respond_to? :specification_version then
|
268
268
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
data/lib/fsr.rb
CHANGED
@@ -8,6 +8,11 @@ require 'pp'
|
|
8
8
|
|
9
9
|
## This module declares the namespace under which the freeswitcher framework
|
10
10
|
## Any constants will be defined here, as well as methods for loading commands and applications
|
11
|
+
class Pathname
|
12
|
+
def /(other)
|
13
|
+
join(other.to_s)
|
14
|
+
end
|
15
|
+
end
|
11
16
|
module FSR
|
12
17
|
# Global configuration options
|
13
18
|
FS_INSTALL_PATHS = ["/usr/local/freeswitch", "/opt/freeswitch", "/usr/freeswitch", "/home/freeswitch/freeswitch"]
|
@@ -46,10 +51,10 @@ module FSR
|
|
46
51
|
|
47
52
|
# Method to start EM for Outbound Event Socket
|
48
53
|
def self.start_oes!(klass, args = {})
|
49
|
-
port = args
|
50
|
-
host = args
|
54
|
+
port = args.delete(:port) || "8084"
|
55
|
+
host = args.delete(:host) || "localhost"
|
51
56
|
EM.run do
|
52
|
-
EventMachine::start_server(host, port, klass)
|
57
|
+
EventMachine::start_server(host, port, klass, args)
|
53
58
|
FSR::Log.info "*** FreeSWITCHer Outbound EventSocket Listener on #{host}:#{port} ***"
|
54
59
|
FSR::Log.info "*** http://code.rubyists.com/projects/fs"
|
55
60
|
end
|
@@ -62,10 +67,10 @@ module FSR
|
|
62
67
|
# <tt>:host [String]</tt> The host/ip to bind to (Default: "localhost")
|
63
68
|
# <tt>:port [Integer]</tt> the port to listen on (Default: 8021)
|
64
69
|
def self.start_ies!(klass, args = {})
|
65
|
-
port = args
|
66
|
-
host = args
|
70
|
+
port = args.delete(:port) || "8084"
|
71
|
+
host = args.delete(:host) || "localhost"
|
67
72
|
EM.run do
|
68
|
-
EventMachine::connect(host, port, klass)
|
73
|
+
EventMachine::connect(host, port, klass, args)
|
69
74
|
FSR::Log.info "*** FreeSWITCHer Inbound EventSocket Listener connected to #{host}:#{port} ***"
|
70
75
|
FSR::Log.info "*** http://code.rubyists.com/projects/fs"
|
71
76
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "fsr/app"
|
2
|
+
module FSR
|
3
|
+
module Cmd
|
4
|
+
class UuidDump < Command
|
5
|
+
attr_reader :uuid
|
6
|
+
|
7
|
+
def initialize(fs_socket = nil, unique_id = nil)
|
8
|
+
@fs_socket = fs_socket # FSR::CommandSocket obj
|
9
|
+
@uuid = unique_id # Freeswitch Unique ID to dump
|
10
|
+
end
|
11
|
+
|
12
|
+
# Send the command to the event socket, using bgapi by default.
|
13
|
+
def run(api_method = :api)
|
14
|
+
orig_command = "%s %s" % [api_method, raw]
|
15
|
+
Log.debug "saying #{orig_command}"
|
16
|
+
@fs_socket.say(orig_command)
|
17
|
+
end
|
18
|
+
|
19
|
+
# This method builds the API command to send to the freeswitch event socket
|
20
|
+
def raw
|
21
|
+
orig_command = "uuid_dump #{uuid}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
register(:uuid_dump, UuidDump)
|
26
|
+
end
|
27
|
+
end
|
data/lib/fsr/listener/inbound.rb
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
module FSR
|
2
|
+
module Listener
|
3
|
+
# This module is intended to be used with em-spec
|
4
|
+
module Mock
|
5
|
+
|
6
|
+
def send_data(data)
|
7
|
+
sent_data << data
|
8
|
+
end
|
9
|
+
|
10
|
+
def sent_data
|
11
|
+
@sent_data ||= []
|
12
|
+
end
|
13
|
+
|
14
|
+
def receive_reply(reply)
|
15
|
+
replies << reply
|
16
|
+
end
|
17
|
+
|
18
|
+
def replies
|
19
|
+
@recvd_reply ||= []
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/fsr/version.rb
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec/helper'
|
2
|
+
require "fsr/cmd"
|
3
|
+
FSR::Cmd.load_command("uuid_dump")
|
4
|
+
|
5
|
+
describe "Testing FSR::Cmd::UuidDump" do
|
6
|
+
## Calls ##
|
7
|
+
# Interface to calls
|
8
|
+
it "FSR::Cmd::UuidDump should send uuid_dump <uid>" do
|
9
|
+
cmd = FSR::Cmd::UuidDump.new(nil, "abcd-1234-efgh-5678")
|
10
|
+
cmd.raw.should == "uuid_dump abcd-1234-efgh-5678"
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -1,13 +1,26 @@
|
|
1
1
|
require 'spec/helper'
|
2
|
+
require "fsr/listener"
|
2
3
|
require "fsr/listener/inbound"
|
4
|
+
gem "tmm1-em-spec"
|
5
|
+
require "em/spec"
|
3
6
|
|
4
7
|
# Bare class to use for testing
|
5
|
-
class
|
6
|
-
|
8
|
+
class InboundListener < FSR::Listener::Inbound
|
9
|
+
attr_accessor :test_event
|
10
|
+
|
11
|
+
def initialize(*args)
|
12
|
+
super(*args)
|
13
|
+
@test_event = nil
|
14
|
+
end
|
15
|
+
|
16
|
+
def on_event(event)
|
17
|
+
recvd_event << event
|
18
|
+
end
|
19
|
+
|
20
|
+
def recvd_event
|
21
|
+
@recvd_event ||= []
|
22
|
+
end
|
7
23
|
|
8
|
-
# helper to instantiate a new MyListener
|
9
|
-
def my_listener
|
10
|
-
MyListener.new
|
11
24
|
end
|
12
25
|
|
13
26
|
describe "Testing FSR::Listener::Inbound" do
|
@@ -24,3 +37,30 @@ describe "Testing FSR::Listener::Inbound" do
|
|
24
37
|
end
|
25
38
|
|
26
39
|
end
|
40
|
+
|
41
|
+
EM.describe InboundListener do
|
42
|
+
|
43
|
+
before do
|
44
|
+
@listener = InboundListener.new("test", {:auth => 'SecretPassword'})
|
45
|
+
end
|
46
|
+
|
47
|
+
should "be able to receive an event and call the on_event callback method" do
|
48
|
+
@listener.receive_data("Content-Length: 22\n\nEvent-Name: test_event\n\n")
|
49
|
+
@listener.recvd_event.first.content[:event_name].should.equal "test_event"
|
50
|
+
done
|
51
|
+
end
|
52
|
+
|
53
|
+
should "be able to add custom event hooks" do
|
54
|
+
FSL::Inbound.add_event_hook(:HANGUP_EVENT) {|event| @listener.test_event = event}
|
55
|
+
@listener.test_event.should.equal nil
|
56
|
+
@listener.receive_data("Content-Length: 24\n\nEvent-Name: HANGUP_EVENT\n\n")
|
57
|
+
@listener.test_event.content[:event_name].should.equal "HANGUP_EVENT"
|
58
|
+
done
|
59
|
+
end
|
60
|
+
|
61
|
+
should "be able to change Freeswitch auth" do
|
62
|
+
@listener.auth.should.equal 'SecretPassword'
|
63
|
+
done
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
@@ -1,19 +1,119 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "lib/fsr"
|
2
|
+
require FSR::ROOT/".."/:spec/:helper
|
3
|
+
require FSR::ROOT/:fsr/:listener/:outbound
|
4
|
+
gem "tmm1-em-spec"
|
5
|
+
require "em/spec"
|
3
6
|
|
4
7
|
# Bare class to use for testing
|
5
8
|
class MyListener < FSR::Listener::Outbound
|
6
|
-
|
9
|
+
attr_accessor :recvd_reply, :state_machine_test
|
10
|
+
|
11
|
+
def session_initiated
|
12
|
+
end
|
13
|
+
|
14
|
+
def send_data(data)
|
15
|
+
sent_data << data
|
16
|
+
end
|
17
|
+
|
18
|
+
def sent_data
|
19
|
+
@sent_data ||= ''
|
20
|
+
end
|
21
|
+
|
22
|
+
def receive_reply(reply)
|
23
|
+
recvd_reply << reply
|
24
|
+
end
|
25
|
+
|
26
|
+
def recvd_reply
|
27
|
+
@recvd_reply ||= []
|
28
|
+
end
|
29
|
+
|
30
|
+
def do_something(&block)
|
31
|
+
@queue.unshift block if block_given?
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_state_machine
|
35
|
+
@state_machine_test = nil
|
36
|
+
do_something do
|
37
|
+
@state_machine_test = "one"
|
38
|
+
|
39
|
+
do_something do
|
40
|
+
@state_machine_test = "two"
|
41
|
+
|
42
|
+
do_something do
|
43
|
+
@state_machine_test = "three"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
7
48
|
|
8
|
-
# helper to instantiate a new MyListener
|
9
|
-
def my_listener
|
10
|
-
MyListener.new
|
11
49
|
end
|
12
50
|
|
13
|
-
|
51
|
+
# Begin testing MyListener
|
52
|
+
EM.describe MyListener do
|
53
|
+
|
54
|
+
before do
|
55
|
+
@listener = MyListener.new(nil)
|
56
|
+
end
|
57
|
+
|
58
|
+
should "send connect to freeswitch upon a new connection" do
|
59
|
+
@listener.receive_data("Content-Length: 0\nCaller-Caller-ID-Number: 8675309\n\n")
|
60
|
+
@listener.sent_data.should.equal "connect\n\n"
|
61
|
+
done
|
62
|
+
end
|
63
|
+
|
64
|
+
should "be able to receive a connection and establish a session " do
|
65
|
+
@listener.receive_data("Content-Length: 0\nTest: Testing\n\n")
|
66
|
+
@listener.session.class.should.equal FSR::Listener::HeaderAndContentResponse
|
67
|
+
done
|
68
|
+
end
|
69
|
+
|
70
|
+
should "be able to read FreeSWITCH channel variables through session" do
|
71
|
+
@listener.receive_data("Content-Length: 0\nCaller-Caller-ID-Number: 8675309\n\n")
|
72
|
+
@listener.session.headers[:caller_caller_id_number].should.equal "8675309"
|
73
|
+
done
|
74
|
+
end
|
75
|
+
|
76
|
+
should "be able to receive and process a response if not sent in one transmission" do
|
77
|
+
@listener.receive_data("Content-Length: ")
|
78
|
+
@listener.receive_data("0\nCaller-Caller-")
|
79
|
+
@listener.receive_data("ID-Number: 8675309\n\n")
|
80
|
+
@listener.session.headers[:caller_caller_id_number].should.equal "8675309"
|
81
|
+
done
|
82
|
+
end
|
83
|
+
|
84
|
+
should "be able to dispatch our receive_reply callback method after a session is already established" do
|
85
|
+
# This should establish the session
|
86
|
+
@listener.receive_data("Content-Length: 0\nTest-Data: foo\n\n")
|
87
|
+
|
88
|
+
# This should be a response, not a session
|
89
|
+
@listener.receive_data("Content-Length: 0\nTest-Reply: bar\n\n")
|
90
|
+
|
91
|
+
@listener.session.headers[:test_data].should.equal 'foo'
|
92
|
+
@listener.recvd_reply.first.headers[:test_reply].should.equal 'bar'
|
93
|
+
done
|
94
|
+
end
|
95
|
+
|
96
|
+
should "use procs to 'fake' I/O blocking and wait for a response before calling the next proc" do
|
97
|
+
@listener.receive_data("Content-Length: 0\nEstablished-Session: session\n\n")
|
98
|
+
@listener.test_state_machine
|
99
|
+
@listener.state_machine_test.should.equal nil
|
100
|
+
@listener.receive_data("Content-Length: 3\n\nOk\n\n")
|
101
|
+
@listener.state_machine_test.should.equal "one"
|
102
|
+
@listener.receive_data("Content-Length: 3\n\nOk\n\n")
|
103
|
+
@listener.state_machine_test.should.equal "two"
|
104
|
+
@listener.receive_data("Content-Length: 3\n\nOk\n\n")
|
105
|
+
@listener.state_machine_test.should.equal "three"
|
106
|
+
done
|
107
|
+
end
|
14
108
|
|
15
|
-
|
16
|
-
|
109
|
+
should "be able to update an existing session" do
|
110
|
+
@listener.receive_data("Content-Length: 0\nUnique-ID: abcd-1234-efgh-5678\n\n")
|
111
|
+
@listener.session.headers[:unique_id].should.equal "abcd-1234-efgh-5678"
|
112
|
+
@listener.session.headers[:test_var].should.equal nil
|
113
|
+
@listener.update_session
|
114
|
+
@listener.receive_data("Content-Length: 74\n\nEvent-Name: CHANNEL_DATA\nUnique-ID: abcd-1234-efgh-5678\nTest-Var: foobar\n\n")
|
115
|
+
@listener.session.headers[:test_var].should.equal "foobar"
|
116
|
+
done
|
17
117
|
end
|
18
118
|
|
19
119
|
end
|
data/spec/fsr/loading.rb
CHANGED
@@ -16,7 +16,7 @@ describe "Testing FSR module loading methods" do
|
|
16
16
|
|
17
17
|
# When you add commands you must modify the expected cmds_loaded behavior
|
18
18
|
it "Loads all commands" do
|
19
|
-
all_commands = [:originate, :sofia, :fsctl, :sofia_contact, :status, :calls] # If you add a command add it to this set
|
19
|
+
all_commands = [:uuid_dump, :originate, :sofia, :fsctl, :sofia_contact, :status, :calls] # If you add a command add it to this set
|
20
20
|
cmds_loaded = FSR.load_all_commands
|
21
21
|
cmds_loaded.kind_of?(Array).should == true
|
22
22
|
all_commands.each do |cmd|
|