lib/ruby-agi/command.rb in ruby-agi-1.1.2 vs lib/ruby-agi/command.rb in ruby-agi-2.0.0

- old
+ new

@@ -34,17 +34,23 @@ # secs, all methods need time as an argument are passed as seconds require 'sync' require 'ruby-agi/agi.rb' -require 'ruby-agi/return_status.rb' require 'ruby-agi/error.rb' +require 'ruby-agi/return_status.rb' class AGI end +class ReturnStatus +end +class Answer < ReturnStatus +end + + class Command < AGI def initialize end # @@ -61,11 +67,11 @@ # Command Reference: ANSWER # public def answer cmd = "ANSWER" - rs = exec_command(cmd) + rs = exec_command(cmd, Answer) raise CommandError, rs.to_s if rs.command_error? return rs end # @@ -83,11 +89,11 @@ # Command Reference: SET AUTOHANGUP <time> # public def set_auto_hangup(secs=0) cmd = "SET AUTOHANGUP #{secs.to_s}" - rs = exec_command(cmd) + rs = exec_command(cmd, SetAutoHangup) raise CommandError, rs.to_s if rs.command_error? return rs end # @@ -118,11 +124,11 @@ if channel.nil? channel = "" end cmd = "CHANNEL STATUS #{channel.to_s}" - rs = exec_command(cmd) + rs = exec_command(cmd, ChannelStatus) raise CommandError, rs.to_s if rs.command_error? return rs end # @@ -144,11 +150,11 @@ def exec(application, options=nil) if options.nil? options = "" end cmd = "EXEC #{application.to_s} #{options.to_s}" - rs = exec_command(cmd) + rs = exec_command(cmd, Exec) raise CommandError, rs.to_s if rs.command_error? return rs end @@ -177,11 +183,11 @@ timeout = sanitize_timeout(timeout) max_digit = sanitize_max_digit(max_digit) cmd = "GET DATA #{filename.to_s} #{timeout.to_s} #{max_digit.to_s}" - rs = exec_command(cmd) + rs = exec_command(cmd, WaitForDigits) raise CommandError, rs.to_s if rs.command_error? return rs end # @@ -199,11 +205,11 @@ # Command Reference: GET VARIABLE <variablename> # public def get_variable(name) cmd = "GET VARIABLE #{name.to_s}" - rs = exec_command(cmd) + rs = exec_command(cmd, GetVariable) raise CommandError, rs.to_s if rs.command_error? return rs end # @@ -224,11 +230,11 @@ if channel.nil? channel = "" end cmd = "HANGUP #{channel.to_s}" - rs = exec_command(cmd) + rs = exec_command(cmd, Hangup) raise CommandError, rs.to_s if rs.command_error? return rs end # @@ -243,11 +249,11 @@ # Command Reference: Usage: NOOP # public def noop(msg) cmd = "NOOP #{msg.to_s}" - rs = exec_command(cmd) + rs = exec_command(cmd, Noop) raise CommandError, rs.to_s if rs.command_error? return rs end # @@ -271,11 +277,11 @@ def receive_char(timeout) timeout = sanitize_timeout(timeout) raise(ArgumentError, "timeout need to be positive") if (timeout < 1) cmd = "RECEIVE CHAR #{timeout.to_s}" - rs = exec_command(cmd) + rs = exec_command(cmd, ReceiveChar) raise CommandError, rs.to_s if rs.command_error? return rs end # @@ -298,11 +304,11 @@ def receive_text(timeout) timeout = sanitize_timeout(timeout) raise(ArgumentError, "timeout need to be positive") if (timeout < 1) cmd = "RECEIVE TEXT #{timeout.to_s}" - rs = exec_command(cmd) + rs = exec_command(cmd, ReceiveText) raise CommandError, rs.to_s if rs.command_error? return rs end # @@ -347,11 +353,11 @@ raise(ArgumentError, "need at least one valid escape digit or timeout need te positive") end cmd = "RECORD FILE #{filename} #{format} #{escape_digits} #{timeout}" cmd = "#{cmd} beep" if beep == true - rs = exec_command(cmd) + rs = exec_command(cmd, RecordFile) raise CommandError, rs.to_s if rs.command_error? return rs end @@ -375,11 +381,11 @@ public def say_digits(digit_string, escape_digits=nil) escape_digits = sanitize_escape_digits(escape_digits) cmd = "SAY DIGITS #{digit_string.to_s} #{escape_digits}" - rs = exec_command(cmd) + rs = exec_command(cmd, SayDigits) raise CommandError, rs.to_s if rs.command_error? return rs end # @@ -401,11 +407,11 @@ # public def say_number(number, escape_digits=nil) escape_digits = sanitize_escape_digits(escape_digits) cmd = "SAY NUMBER #{number.to_s} #{escape_digits.to_s}" - rs = exec_command(cmd) + rs = exec_command(cmd, SayNumber) raise CommandError, rs.to_s if rs.command_error? return rs end # @@ -427,11 +433,11 @@ # public def say_phonetic(string, escape_digits=nil) escape_digits = sanitize_escape_digits(escape_digits) cmd = "SAY PHONETIC #{string.to_s} #{escape_digits}" - rs = exec_command(cmd) + rs = exec_command(cmd, SayPhonetic) raise CommandError, rs.to_s if rs.command_error? return rs end # @@ -453,11 +459,11 @@ # public def say_time(time=Time.now.to_i, escape_digits='#') escape_digits = sanitize_escape_digits(escape_digits) cmd = "SAY TIME #{time.to_s} #{escape_digits.to_s}" - rs = exec_command(cmd) + rs = exec_command(cmd, SayTime) raise CommandError, rs.to_s if rs.command_error? return rs end # @@ -477,11 +483,11 @@ # Command Reference: SEND IMAGE <image> # public def send_image(image) cmd = "SEND IMAGE #{image.to_s}" - rs = exec_command(cmd) + rs = exec_command(cmd, SendImage) raise CommandError, rs.to_s if rs.command_error? return rs end # @@ -501,11 +507,11 @@ # Command Reference: SEND TEXT "<text to send>" # public def send_text(text) cmd = "SEND TEXT #{text.to_s}" - rs = exec_command(cmd) + rs = exec_command(cmd, SendText) raise CommandError, rs.to_s if rs.command_error? return rs end # @@ -522,11 +528,11 @@ # Command Reference: SET CALLERID <number> # public def set_caller_id(number) cmd = "SET CALLERID #{number.to_s}" - rs = exec_command(cmd) + rs = exec_command(cmd, SetCallerID) raise CommandError, rs.to_s if rs.command_error? return rs end # @@ -545,11 +551,11 @@ # Command Reference: SET CONTEXT <desired context> # public def set_context(context) cmd = "SET CONTEXT #{context.to_s}" - rs = exec_command(cmd) + rs = exec_command(cmd, SetContext) raise CommandError, rs.to_s if rs.command_error? return rs end # @@ -569,11 +575,11 @@ # Command Reference: SET EXTENSION <new extension> # public def set_extension(extension) cmd = "SET EXTENSION #{extension.to_s}" - rs = exec_command(cmd) + rs = exec_command(cmd, SetExtension) raise CommandError, rs.to_s if rs.command_error? return rs end # @@ -596,11 +602,11 @@ mode = 'ON' else mode = 'OFF' end cmd = "SET MUSIC #{mode.to_s} #{moh_class.to_s}" - rs = exec_command(cmd) + rs = exec_command(cmd, SetMusic) raise CommandError, rs.to_s if rs.command_error? return rs end # @@ -616,11 +622,11 @@ # Command Reference: SET PRIORITY <num> # public def set_priority(priority) cmd = "SET PRIORITY #{priority.to_s}" - rs = exec_command(cmd) + rs = exec_command(cmd, SetPriority) raise CommandError, rs.to_s if rs.command_error? return rs end # @@ -642,11 +648,11 @@ # Command Reference: SET VARIABLE <variablename> <value> # public def set_variable(name, value) cmd = "SET VARIABLE #{name.to_s} \"#{value.to_s}\"" - rs = exec_command(cmd) + rs = exec_command(cmd, SetVariable) raise CommandError, rs.to_s if rs.command_error? return rs end @@ -676,11 +682,11 @@ def stream_file(filename, escape_digits='#') escape_digits = sanitize_escape_digits(escape_digits) cmd = "STREAM FILE #{filename.to_s} #{escape_digits}" - rs = exec_command(cmd) + rs = exec_command(cmd, StreamFile) raise CommandError, rs.to_s if rs.command_error? return rs end @@ -710,11 +716,11 @@ mode = 'ON' else mode = 'OFF' end cmd = "TDD MODE #{mode.to_s}" - rs = exec_command(cmd) + rs = exec_command(cmd, TDDMode) raise CommandError, rs.to_s if rs.command_error? return rs end # @@ -743,11 +749,11 @@ # Command Reference: VERBOSE <message> [level] # public def verbose(message, level=3) cmd = "VERBOSE \"#{message.to_s}\" #{level.to_s}" - rs = exec_command(cmd) + rs = exec_command(cmd, Verbose) raise CommandError, rs.to_s if rs.command_error? return rs end # @@ -770,11 +776,11 @@ public def wait_for_digit(timeout=nil) timeout = sanitize_timeout(timeout) cmd = "WAIT FOR DIGIT #{timeout.to_s}" - rs = exec_command(cmd) + rs = exec_command(cmd, WaitForDigit) raise CommandError, rs.to_s if rs.command_error? return rs end # @@ -821,26 +827,23 @@ rs = exec_command(cmd) raise CommandError, rs.to_s if rs.command_error? return rs end - #private - #def escape(str) - # rxp = Regexp.new(/\"/) - # return str.gsub(rxp, '\"') - #end - protected - def exec_command(cmd) + def exec_command(cmd, return_status=nil) rs = nil begin semaphore do $stderr.puts " -- ruby-agi << #{cmd}" if debug? $stdout.puts cmd responses = $stdin.gets $stderr.puts " -- ruby-agi >> #{responses}" if debug? - rs = ReturnStatus.new(cmd, responses) - + if return_status.nil? + rs = ReturnStatus.new(cmd, responses) + else + rs = return_status.new(cmd, responses) + end end rescue Errno::EPIPE raise HangupError, "Line hung up during command execution!!" end