jicksta-adhearsion 0.7.999
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/CHANGELOG +6 -0
- data/EVENTS +11 -0
- data/LICENSE +456 -0
- data/README.txt +5 -0
- data/Rakefile +120 -0
- data/adhearsion.gemspec +146 -0
- data/app_generators/ahn/USAGE +5 -0
- data/app_generators/ahn/ahn_generator.rb +87 -0
- data/app_generators/ahn/templates/.ahnrc +34 -0
- data/app_generators/ahn/templates/README +8 -0
- data/app_generators/ahn/templates/Rakefile +23 -0
- data/app_generators/ahn/templates/components/ami_remote/ami_remote.rb +15 -0
- data/app_generators/ahn/templates/components/disabled/HOW_TO_ENABLE +7 -0
- data/app_generators/ahn/templates/components/disabled/stomp_gateway/README.markdown +47 -0
- data/app_generators/ahn/templates/components/disabled/stomp_gateway/config.yml +12 -0
- data/app_generators/ahn/templates/components/disabled/stomp_gateway/stomp_gateway.rb +34 -0
- data/app_generators/ahn/templates/components/restful_rpc/README.markdown +11 -0
- data/app_generators/ahn/templates/components/restful_rpc/config.yml +34 -0
- data/app_generators/ahn/templates/components/restful_rpc/example-client.rb +48 -0
- data/app_generators/ahn/templates/components/restful_rpc/restful_rpc.rb +87 -0
- data/app_generators/ahn/templates/components/simon_game/simon_game.rb +56 -0
- data/app_generators/ahn/templates/config/startup.rb +53 -0
- data/app_generators/ahn/templates/dialplan.rb +3 -0
- data/app_generators/ahn/templates/events.rb +32 -0
- data/bin/ahn +28 -0
- data/bin/ahnctl +68 -0
- data/bin/jahn +42 -0
- data/examples/asterisk_manager_interface/standalone.rb +51 -0
- data/lib/adhearsion/cli.rb +223 -0
- data/lib/adhearsion/component_manager/spec_framework.rb +24 -0
- data/lib/adhearsion/component_manager.rb +208 -0
- data/lib/adhearsion/events_support.rb +84 -0
- data/lib/adhearsion/foundation/all.rb +9 -0
- data/lib/adhearsion/foundation/blank_slate.rb +5 -0
- data/lib/adhearsion/foundation/custom_daemonizer.rb +45 -0
- data/lib/adhearsion/foundation/event_socket.rb +203 -0
- data/lib/adhearsion/foundation/future_resource.rb +36 -0
- data/lib/adhearsion/foundation/global.rb +1 -0
- data/lib/adhearsion/foundation/metaprogramming.rb +17 -0
- data/lib/adhearsion/foundation/numeric.rb +13 -0
- data/lib/adhearsion/foundation/pseudo_guid.rb +10 -0
- data/lib/adhearsion/foundation/relationship_properties.rb +42 -0
- data/lib/adhearsion/foundation/string.rb +26 -0
- data/lib/adhearsion/foundation/synchronized_hash.rb +96 -0
- data/lib/adhearsion/foundation/thread_safety.rb +7 -0
- data/lib/adhearsion/host_definitions.rb +67 -0
- data/lib/adhearsion/initializer/asterisk.rb +81 -0
- data/lib/adhearsion/initializer/configuration.rb +254 -0
- data/lib/adhearsion/initializer/database.rb +49 -0
- data/lib/adhearsion/initializer/drb.rb +31 -0
- data/lib/adhearsion/initializer/freeswitch.rb +22 -0
- data/lib/adhearsion/initializer/rails.rb +40 -0
- data/lib/adhearsion/initializer.rb +373 -0
- data/lib/adhearsion/logging.rb +92 -0
- data/lib/adhearsion/tasks/database.rb +5 -0
- data/lib/adhearsion/tasks/deprecations.rb +59 -0
- data/lib/adhearsion/tasks/generating.rb +20 -0
- data/lib/adhearsion/tasks/lint.rb +4 -0
- data/lib/adhearsion/tasks/testing.rb +37 -0
- data/lib/adhearsion/tasks.rb +16 -0
- data/lib/adhearsion/version.rb +9 -0
- data/lib/adhearsion/voip/asterisk/agi_server.rb +81 -0
- data/lib/adhearsion/voip/asterisk/commands.rb +1284 -0
- data/lib/adhearsion/voip/asterisk/config_generators/agents.conf.rb +140 -0
- data/lib/adhearsion/voip/asterisk/config_generators/config_generator.rb +101 -0
- data/lib/adhearsion/voip/asterisk/config_generators/queues.conf.rb +250 -0
- data/lib/adhearsion/voip/asterisk/config_generators/voicemail.conf.rb +240 -0
- data/lib/adhearsion/voip/asterisk/config_manager.rb +71 -0
- data/lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb +1754 -0
- data/lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb +286 -0
- data/lib/adhearsion/voip/asterisk/manager_interface/ami_messages.rb +78 -0
- data/lib/adhearsion/voip/asterisk/manager_interface/ami_protocol_lexer_machine.rl +87 -0
- data/lib/adhearsion/voip/asterisk/manager_interface.rb +562 -0
- data/lib/adhearsion/voip/asterisk/special_dial_plan_managers.rb +80 -0
- data/lib/adhearsion/voip/asterisk/super_manager.rb +19 -0
- data/lib/adhearsion/voip/asterisk.rb +4 -0
- data/lib/adhearsion/voip/call.rb +440 -0
- data/lib/adhearsion/voip/call_routing.rb +64 -0
- data/lib/adhearsion/voip/commands.rb +9 -0
- data/lib/adhearsion/voip/constants.rb +39 -0
- data/lib/adhearsion/voip/conveniences.rb +18 -0
- data/lib/adhearsion/voip/dial_plan.rb +218 -0
- data/lib/adhearsion/voip/dsl/dialing_dsl/dialing_dsl_monkey_patches.rb +37 -0
- data/lib/adhearsion/voip/dsl/dialing_dsl.rb +151 -0
- data/lib/adhearsion/voip/dsl/dialplan/control_passing_exception.rb +27 -0
- data/lib/adhearsion/voip/dsl/dialplan/dispatcher.rb +124 -0
- data/lib/adhearsion/voip/dsl/dialplan/parser.rb +71 -0
- data/lib/adhearsion/voip/dsl/dialplan/thread_mixin.rb +16 -0
- data/lib/adhearsion/voip/dsl/numerical_string.rb +117 -0
- data/lib/adhearsion/voip/freeswitch/basic_connection_manager.rb +48 -0
- data/lib/adhearsion/voip/freeswitch/event_handler.rb +58 -0
- data/lib/adhearsion/voip/freeswitch/freeswitch_dialplan_command_factory.rb +129 -0
- data/lib/adhearsion/voip/freeswitch/inbound_connection_manager.rb +38 -0
- data/lib/adhearsion/voip/freeswitch/oes_server.rb +195 -0
- data/lib/adhearsion/voip/menu_state_machine/calculated_match.rb +80 -0
- data/lib/adhearsion/voip/menu_state_machine/matchers.rb +123 -0
- data/lib/adhearsion/voip/menu_state_machine/menu_builder.rb +58 -0
- data/lib/adhearsion/voip/menu_state_machine/menu_class.rb +149 -0
- data/lib/adhearsion.rb +37 -0
- data/lib/theatre/README.markdown +64 -0
- data/lib/theatre/callback_definition_loader.rb +84 -0
- data/lib/theatre/guid.rb +23 -0
- data/lib/theatre/invocation.rb +121 -0
- data/lib/theatre/namespace_manager.rb +153 -0
- data/lib/theatre/version.rb +2 -0
- data/lib/theatre.rb +151 -0
- metadata +177 -0
@@ -0,0 +1,153 @@
|
|
1
|
+
module Theatre
|
2
|
+
|
3
|
+
##
|
4
|
+
# Manages the hierarchial namespaces of a Theatre. This class is Thread-safe.
|
5
|
+
#
|
6
|
+
class ActorNamespaceManager
|
7
|
+
|
8
|
+
VALID_NAMESPACE = %r{^(/[\w_]+)+$}
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def valid_namespace_path?(namespace_path)
|
12
|
+
namespace_path =~ VALID_NAMESPACE
|
13
|
+
end
|
14
|
+
|
15
|
+
##
|
16
|
+
# Since there are a couple ways to represent namespaces, this is a helper method which will normalize
|
17
|
+
# them into the most practical: an Array of Symbols
|
18
|
+
# @param [String, Array] paths The namespace to register. Can be in "/foo/bar" or *[foo,bar] format
|
19
|
+
def normalize_path_to_array(paths)
|
20
|
+
paths = paths.is_a?(Array) ? paths.flatten : Array(paths)
|
21
|
+
paths.map! { |path_segment| path_segment.kind_of?(String) ? path_segment.split('/') : path_segment }
|
22
|
+
paths.flatten!
|
23
|
+
paths.reject! { |path| path.nil? || (path.kind_of?(String) && path.empty?) }
|
24
|
+
paths.map { |path| path.to_sym }
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
def initialize
|
30
|
+
@registry_lock = Mutex.new
|
31
|
+
@root = RootNamespaceNode.new
|
32
|
+
end
|
33
|
+
|
34
|
+
##
|
35
|
+
# Have this registry recognize a new path and prepare it for callback registrations. All path segements will be created
|
36
|
+
# in order. For example, when registering "/foo/bar/qaz" when no namespaces at all have been registered, this method will
|
37
|
+
# first register "foo", then "bar", then "qaz". If the namespace was already registered, it will not be affected.
|
38
|
+
#
|
39
|
+
# @param [String, Array] paths The namespace to register. Can be in "/foo/bar" or *[foo,bar] format
|
40
|
+
# @return [NamespaceNode] The NamespaceNode representing the path given.
|
41
|
+
# @raise NamespaceNotFound if a segment has not been registered yet
|
42
|
+
#
|
43
|
+
def register_namespace_name(*paths)
|
44
|
+
paths = self.class.normalize_path_to_array paths
|
45
|
+
|
46
|
+
paths.inject(@root) do |node, name|
|
47
|
+
node.register_namespace_name name
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
##
|
52
|
+
# Returns a Proc found after searching with the namespace you provide
|
53
|
+
#
|
54
|
+
# @raise NamespaceNotFound if a segment has not been registered yet
|
55
|
+
#
|
56
|
+
def callbacks_for_namespaces(*paths)
|
57
|
+
search_for_namespace(paths).callbacks
|
58
|
+
end
|
59
|
+
|
60
|
+
##
|
61
|
+
# Find a namespace in the tree.
|
62
|
+
#
|
63
|
+
# @param [Array, String] paths Must be an Array of segments or a name like "/foo/bar/qaz"
|
64
|
+
# @raise NamespaceNotFound if a segment has not been registered yet
|
65
|
+
#
|
66
|
+
def search_for_namespace(paths)
|
67
|
+
paths = self.class.normalize_path_to_array paths
|
68
|
+
path_string = "/"
|
69
|
+
|
70
|
+
found_namespace = paths.inject(@root) do |last_node,this_node_name|
|
71
|
+
raise NamespaceNotFound.new(path_string) if last_node.nil?
|
72
|
+
path_string << this_node_name.to_s
|
73
|
+
last_node.child_named this_node_name
|
74
|
+
end
|
75
|
+
raise NamespaceNotFound.new("/#{paths.join('/')}") unless found_namespace
|
76
|
+
found_namespace
|
77
|
+
end
|
78
|
+
|
79
|
+
##
|
80
|
+
# Registers the given callback at a namespace, assuming the namespace was already registered.
|
81
|
+
#
|
82
|
+
# @param [Array] paths Must be an Array of segments
|
83
|
+
# @param [Proc] callback
|
84
|
+
# @raise NamespaceNotFound if a segment has not been registered yet
|
85
|
+
#
|
86
|
+
def register_callback_at_namespace(paths, callback)
|
87
|
+
raise ArgumentError, "callback must be a Proc" unless callback.kind_of? Proc
|
88
|
+
search_for_namespace(paths).register_callback callback
|
89
|
+
end
|
90
|
+
|
91
|
+
protected
|
92
|
+
|
93
|
+
##
|
94
|
+
# Used by NamespaceManager to build a tree of namespaces. Has a Hash of children which is not
|
95
|
+
# Thread-safe. For Thread-safety, all access should semaphore through the NamespaceManager.
|
96
|
+
class NamespaceNode
|
97
|
+
|
98
|
+
attr_reader :name
|
99
|
+
def initialize(name)
|
100
|
+
@name = name.freeze
|
101
|
+
@children = {}
|
102
|
+
@callbacks = []
|
103
|
+
end
|
104
|
+
|
105
|
+
def register_namespace_name(name)
|
106
|
+
@children[name] ||= NamespaceNode.new(name)
|
107
|
+
end
|
108
|
+
|
109
|
+
def register_callback(callback)
|
110
|
+
@callbacks << callback
|
111
|
+
callback
|
112
|
+
end
|
113
|
+
|
114
|
+
def callbacks
|
115
|
+
@callbacks.clone
|
116
|
+
end
|
117
|
+
|
118
|
+
def delete_callback(callback)
|
119
|
+
@callbacks.delete callback
|
120
|
+
end
|
121
|
+
|
122
|
+
def child_named(name)
|
123
|
+
@children[name]
|
124
|
+
end
|
125
|
+
|
126
|
+
def destroy_namespace(name)
|
127
|
+
@children.delete name
|
128
|
+
end
|
129
|
+
|
130
|
+
def root?
|
131
|
+
false
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
135
|
+
|
136
|
+
class RootNamespaceNode < NamespaceNode
|
137
|
+
def initialize
|
138
|
+
super :ROOT
|
139
|
+
end
|
140
|
+
def root?
|
141
|
+
true
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
end
|
146
|
+
|
147
|
+
class NamespaceNotFound < Exception
|
148
|
+
def initialize(full_path)
|
149
|
+
super "Could not find #{full_path.inspect} in the namespace registry. Did you register it yet?"
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
data/lib/theatre.rb
ADDED
@@ -0,0 +1,151 @@
|
|
1
|
+
require 'thread'
|
2
|
+
require 'rubygems'
|
3
|
+
|
4
|
+
$: << File.expand_path(File.dirname(__FILE__))
|
5
|
+
|
6
|
+
require 'theatre/version'
|
7
|
+
require 'theatre/namespace_manager'
|
8
|
+
require 'theatre/invocation'
|
9
|
+
require 'theatre/callback_definition_loader'
|
10
|
+
|
11
|
+
module Theatre
|
12
|
+
|
13
|
+
class Theatre
|
14
|
+
|
15
|
+
attr_reader :namespace_manager
|
16
|
+
|
17
|
+
##
|
18
|
+
# Creates a new stopped Theatre. You must call start!() after you instantiate this for it to begin processing events.
|
19
|
+
#
|
20
|
+
# @param [Fixnum] thread_count Number of Threads to spawn when started.
|
21
|
+
#
|
22
|
+
def initialize(thread_count=6)
|
23
|
+
@thread_count = thread_count
|
24
|
+
@started = false
|
25
|
+
@namespace_manager = ActorNamespaceManager.new
|
26
|
+
@thread_group = ThreadGroup.new
|
27
|
+
@master_queue = Queue.new
|
28
|
+
@loader_mixins = []
|
29
|
+
end
|
30
|
+
|
31
|
+
##
|
32
|
+
# Send a message to this Theatre for asynchronous processing.
|
33
|
+
#
|
34
|
+
# @param [String] namespace The namespace to which the payload should be sent
|
35
|
+
# @param [Object] payload The actual content to be sent to the callback. Optional.
|
36
|
+
# @return [Array<Theatre::Invocation>] An Array of Invocation objects
|
37
|
+
# @raise Theatre::NamespaceNotFound Raised when told to enqueue an unrecognized namespace
|
38
|
+
#
|
39
|
+
def trigger(namespace, payload=:argument_undefined)
|
40
|
+
@namespace_manager.callbacks_for_namespaces(namespace).map do |callback|
|
41
|
+
invocation = if payload.equal?(:argument_undefined)
|
42
|
+
Invocation.new(namespace, callback)
|
43
|
+
else
|
44
|
+
Invocation.new(namespace, callback, payload)
|
45
|
+
end
|
46
|
+
invocation.queued
|
47
|
+
@master_queue << invocation
|
48
|
+
invocation
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
##
|
53
|
+
# Send a message to this Theatre for synchronous processing. The execution of this will not go through this Theatre's
|
54
|
+
# Thread pool. If an error occurred in any of callbacks, the Exception object will be placed in the returned Array
|
55
|
+
# instead for you to act upon.
|
56
|
+
#
|
57
|
+
# @param [String] namespace The namespace to which the payload should be sent
|
58
|
+
# @param [Object] payload The actual content to be sent to the callback. Optional.
|
59
|
+
# @return [Array] An Array containing each callback's return value (or Exception raised, if any) when given the payload
|
60
|
+
# @raise Theatre::NamespaceNotFound Raised when told to enqueue an unrecognized namespace
|
61
|
+
#
|
62
|
+
def trigger_immediately(namespace, payload=:argument_undefined)
|
63
|
+
@namespace_manager.callbacks_for_namespaces(namespace).map do |callback|
|
64
|
+
begin
|
65
|
+
invocation = if payload.equal?(:argument_undefined)
|
66
|
+
callback.call
|
67
|
+
else
|
68
|
+
callback.call payload
|
69
|
+
end
|
70
|
+
rescue => captured_error_to_be_returned
|
71
|
+
captured_error_to_be_returned
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def load_events_code(code, *args)
|
77
|
+
loader = CallbackDefinitionLoader.new(self, *args)
|
78
|
+
loader.load_events_code code
|
79
|
+
end
|
80
|
+
|
81
|
+
def load_events_file(file, *args)
|
82
|
+
loader = CallbackDefinitionLoader.new(self, *args)
|
83
|
+
loader.load_events_file file
|
84
|
+
end
|
85
|
+
|
86
|
+
def register_namespace_name(*args)
|
87
|
+
@namespace_manager.register_namespace_name(*args)
|
88
|
+
end
|
89
|
+
|
90
|
+
def register_callback_at_namespace(*args)
|
91
|
+
@namespace_manager.register_callback_at_namespace(*args)
|
92
|
+
end
|
93
|
+
|
94
|
+
def register_loader_mixin(mod)
|
95
|
+
@loader_mixins << mod
|
96
|
+
end
|
97
|
+
|
98
|
+
def join
|
99
|
+
@thread_group.list.each do |thread|
|
100
|
+
begin
|
101
|
+
thread.join
|
102
|
+
rescue
|
103
|
+
# Ignore any exceptions
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
##
|
109
|
+
# Starts this Theatre.
|
110
|
+
#
|
111
|
+
# When this method is called, the Threads are spawned and begin pulling messages off this Theatre's master queue.
|
112
|
+
#
|
113
|
+
def start!
|
114
|
+
return false if @thread_group.list.any? # Already started
|
115
|
+
@started_time = Time.now
|
116
|
+
@thread_count.times do
|
117
|
+
@thread_group.add Thread.new(&method(:thread_loop))
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
##
|
122
|
+
# Notifies all Threads for this Theatre to stop by sending them special messages. Any messages which were queued and
|
123
|
+
# untriggered when this method is received will still be processed. Note: you may start this Theatre again later once it
|
124
|
+
# has been stopped.
|
125
|
+
#
|
126
|
+
def graceful_stop!
|
127
|
+
@thread_count.times { @master_queue << :THEATRE_SHUTDOWN! }
|
128
|
+
@started_time = nil
|
129
|
+
end
|
130
|
+
|
131
|
+
protected
|
132
|
+
|
133
|
+
# This will use the Adhearsion logger eventually.
|
134
|
+
def warn(exception)
|
135
|
+
# STDERR.puts exception.message, *exception.backtrace
|
136
|
+
end
|
137
|
+
|
138
|
+
def thread_loop
|
139
|
+
loop do
|
140
|
+
begin
|
141
|
+
next_invocation = @master_queue.pop
|
142
|
+
return :stopped if next_invocation.equal? :THEATRE_SHUTDOWN!
|
143
|
+
next_invocation.start
|
144
|
+
rescue => error
|
145
|
+
warn error
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
end
|
151
|
+
end
|
metadata
ADDED
@@ -0,0 +1,177 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jicksta-adhearsion
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.7.999
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jay Phillips
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-08-21 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rubigen
|
17
|
+
version_requirement:
|
18
|
+
version_requirements: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.0.6
|
23
|
+
version:
|
24
|
+
- !ruby/object:Gem::Dependency
|
25
|
+
name: log4r
|
26
|
+
version_requirement:
|
27
|
+
version_requirements: !ruby/object:Gem::Requirement
|
28
|
+
requirements:
|
29
|
+
- - ">="
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: 1.0.5
|
32
|
+
version:
|
33
|
+
description: Adhearsion is an open-source telephony development framework
|
34
|
+
email: Jay -at- Codemecca.com
|
35
|
+
executables:
|
36
|
+
- ahn
|
37
|
+
- ahnctl
|
38
|
+
- jahn
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files: []
|
42
|
+
|
43
|
+
files:
|
44
|
+
- adhearsion.gemspec
|
45
|
+
- app_generators/ahn/ahn_generator.rb
|
46
|
+
- app_generators/ahn/templates/.ahnrc
|
47
|
+
- app_generators/ahn/templates/components/ami_remote/ami_remote.rb
|
48
|
+
- app_generators/ahn/templates/components/disabled/HOW_TO_ENABLE
|
49
|
+
- app_generators/ahn/templates/components/disabled/stomp_gateway/config.yml
|
50
|
+
- app_generators/ahn/templates/components/disabled/stomp_gateway/README.markdown
|
51
|
+
- app_generators/ahn/templates/components/disabled/stomp_gateway/stomp_gateway.rb
|
52
|
+
- app_generators/ahn/templates/components/restful_rpc/config.yml
|
53
|
+
- app_generators/ahn/templates/components/restful_rpc/example-client.rb
|
54
|
+
- app_generators/ahn/templates/components/restful_rpc/README.markdown
|
55
|
+
- app_generators/ahn/templates/components/restful_rpc/restful_rpc.rb
|
56
|
+
- app_generators/ahn/templates/components/simon_game/simon_game.rb
|
57
|
+
- app_generators/ahn/templates/config/startup.rb
|
58
|
+
- app_generators/ahn/templates/dialplan.rb
|
59
|
+
- app_generators/ahn/templates/events.rb
|
60
|
+
- app_generators/ahn/templates/Rakefile
|
61
|
+
- app_generators/ahn/templates/README
|
62
|
+
- app_generators/ahn/USAGE
|
63
|
+
- bin/ahn
|
64
|
+
- bin/ahnctl
|
65
|
+
- bin/jahn
|
66
|
+
- CHANGELOG
|
67
|
+
- EVENTS
|
68
|
+
- examples/asterisk_manager_interface/standalone.rb
|
69
|
+
- lib/adhearsion.rb
|
70
|
+
- lib/adhearsion/cli.rb
|
71
|
+
- lib/adhearsion/component_manager.rb
|
72
|
+
- lib/adhearsion/component_manager/spec_framework.rb
|
73
|
+
- lib/adhearsion/events_support.rb
|
74
|
+
- lib/adhearsion/foundation/all.rb
|
75
|
+
- lib/adhearsion/foundation/blank_slate.rb
|
76
|
+
- lib/adhearsion/foundation/custom_daemonizer.rb
|
77
|
+
- lib/adhearsion/foundation/event_socket.rb
|
78
|
+
- lib/adhearsion/foundation/future_resource.rb
|
79
|
+
- lib/adhearsion/foundation/global.rb
|
80
|
+
- lib/adhearsion/foundation/metaprogramming.rb
|
81
|
+
- lib/adhearsion/foundation/numeric.rb
|
82
|
+
- lib/adhearsion/foundation/pseudo_guid.rb
|
83
|
+
- lib/adhearsion/foundation/relationship_properties.rb
|
84
|
+
- lib/adhearsion/foundation/string.rb
|
85
|
+
- lib/adhearsion/foundation/synchronized_hash.rb
|
86
|
+
- lib/adhearsion/foundation/thread_safety.rb
|
87
|
+
- lib/adhearsion/host_definitions.rb
|
88
|
+
- lib/adhearsion/initializer.rb
|
89
|
+
- lib/adhearsion/initializer/asterisk.rb
|
90
|
+
- lib/adhearsion/initializer/configuration.rb
|
91
|
+
- lib/adhearsion/initializer/database.rb
|
92
|
+
- lib/adhearsion/initializer/drb.rb
|
93
|
+
- lib/adhearsion/initializer/freeswitch.rb
|
94
|
+
- lib/adhearsion/initializer/rails.rb
|
95
|
+
- lib/adhearsion/logging.rb
|
96
|
+
- lib/adhearsion/tasks.rb
|
97
|
+
- lib/adhearsion/tasks/database.rb
|
98
|
+
- lib/adhearsion/tasks/deprecations.rb
|
99
|
+
- lib/adhearsion/tasks/generating.rb
|
100
|
+
- lib/adhearsion/tasks/lint.rb
|
101
|
+
- lib/adhearsion/tasks/testing.rb
|
102
|
+
- lib/adhearsion/version.rb
|
103
|
+
- lib/adhearsion/voip/asterisk.rb
|
104
|
+
- lib/adhearsion/voip/asterisk/agi_server.rb
|
105
|
+
- lib/adhearsion/voip/asterisk/commands.rb
|
106
|
+
- lib/adhearsion/voip/asterisk/config_generators/agents.conf.rb
|
107
|
+
- lib/adhearsion/voip/asterisk/config_generators/config_generator.rb
|
108
|
+
- lib/adhearsion/voip/asterisk/config_generators/queues.conf.rb
|
109
|
+
- lib/adhearsion/voip/asterisk/config_generators/voicemail.conf.rb
|
110
|
+
- lib/adhearsion/voip/asterisk/config_manager.rb
|
111
|
+
- lib/adhearsion/voip/asterisk/manager_interface.rb
|
112
|
+
- lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb
|
113
|
+
- lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb
|
114
|
+
- lib/adhearsion/voip/asterisk/manager_interface/ami_messages.rb
|
115
|
+
- lib/adhearsion/voip/asterisk/manager_interface/ami_protocol_lexer_machine.rl
|
116
|
+
- lib/adhearsion/voip/asterisk/special_dial_plan_managers.rb
|
117
|
+
- lib/adhearsion/voip/asterisk/super_manager.rb
|
118
|
+
- lib/adhearsion/voip/call.rb
|
119
|
+
- lib/adhearsion/voip/call_routing.rb
|
120
|
+
- lib/adhearsion/voip/commands.rb
|
121
|
+
- lib/adhearsion/voip/constants.rb
|
122
|
+
- lib/adhearsion/voip/conveniences.rb
|
123
|
+
- lib/adhearsion/voip/dial_plan.rb
|
124
|
+
- lib/adhearsion/voip/dsl/dialing_dsl.rb
|
125
|
+
- lib/adhearsion/voip/dsl/dialing_dsl/dialing_dsl_monkey_patches.rb
|
126
|
+
- lib/adhearsion/voip/dsl/dialplan/control_passing_exception.rb
|
127
|
+
- lib/adhearsion/voip/dsl/dialplan/dispatcher.rb
|
128
|
+
- lib/adhearsion/voip/dsl/dialplan/parser.rb
|
129
|
+
- lib/adhearsion/voip/dsl/dialplan/thread_mixin.rb
|
130
|
+
- lib/adhearsion/voip/dsl/numerical_string.rb
|
131
|
+
- lib/adhearsion/voip/freeswitch/basic_connection_manager.rb
|
132
|
+
- lib/adhearsion/voip/freeswitch/event_handler.rb
|
133
|
+
- lib/adhearsion/voip/freeswitch/freeswitch_dialplan_command_factory.rb
|
134
|
+
- lib/adhearsion/voip/freeswitch/inbound_connection_manager.rb
|
135
|
+
- lib/adhearsion/voip/freeswitch/oes_server.rb
|
136
|
+
- lib/adhearsion/voip/menu_state_machine/calculated_match.rb
|
137
|
+
- lib/adhearsion/voip/menu_state_machine/matchers.rb
|
138
|
+
- lib/adhearsion/voip/menu_state_machine/menu_builder.rb
|
139
|
+
- lib/adhearsion/voip/menu_state_machine/menu_class.rb
|
140
|
+
- lib/theatre.rb
|
141
|
+
- lib/theatre/callback_definition_loader.rb
|
142
|
+
- lib/theatre/guid.rb
|
143
|
+
- lib/theatre/invocation.rb
|
144
|
+
- lib/theatre/namespace_manager.rb
|
145
|
+
- lib/theatre/README.markdown
|
146
|
+
- lib/theatre/version.rb
|
147
|
+
- LICENSE
|
148
|
+
- Rakefile
|
149
|
+
- README.txt
|
150
|
+
has_rdoc: false
|
151
|
+
homepage: http://adhearsion.com
|
152
|
+
post_install_message:
|
153
|
+
rdoc_options: []
|
154
|
+
|
155
|
+
require_paths:
|
156
|
+
- lib
|
157
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
158
|
+
requirements:
|
159
|
+
- - ">="
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
version: "0"
|
162
|
+
version:
|
163
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
164
|
+
requirements:
|
165
|
+
- - ">="
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: "0"
|
168
|
+
version:
|
169
|
+
requirements: []
|
170
|
+
|
171
|
+
rubyforge_project: adhearsion
|
172
|
+
rubygems_version: 1.2.0
|
173
|
+
signing_key:
|
174
|
+
specification_version: 2
|
175
|
+
summary: Adhearsion, open-source telephony development framework
|
176
|
+
test_files: []
|
177
|
+
|