ruby-agi 0.0.3 → 1.0.0

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/lib/command.rb DELETED
@@ -1,486 +0,0 @@
1
- #
2
- # File: command.rb
3
- #
4
- # ruby-agi: Ruby Language API for Asterisk
5
- #
6
- # Copyright (C) <2005> Mohammad Khan <info@beeplove.com>
7
- #
8
- # This program is free software; you can redistribute it and/or modify
9
- # it under the terms of the GNU General Public License as published by
10
- # the Free Software Foundation; either version 2 of the License, or
11
- # (at your option) any later version.
12
- #
13
- # This program is distributed in the hope that it will be useful,
14
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- # GNU General Public License for more details.
17
- #
18
- # You should have received a copy of the GNU General Public License
19
- # along with this program; if not, write to the Free Software
20
- # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
- #
22
-
23
- # this would be the most used class
24
-
25
- # most common arguements
26
- # timeout: nil=forever,
27
- # escape_digit, by default #, if nil passed as argument there will not have any escape
28
- # escape_digits, by default #, if nil passed as argument there will not have any escape
29
- # channel, current channel otherwise mentioned
30
- # max_digit, maximum number of digits would be accepted from user, always 255 otherwise mentioned
31
- # filename, name of file to be streamed, recoreds ..
32
- # beep, always yes, otherwise passed false or nil as argument
33
- # format, always gsm otherwise mentioned
34
- # secs, all methods need time as an argument are passed as seconds
35
-
36
- require 'agi.rb'
37
- require 'return_status.rb'
38
- require 'error.rb'
39
- require 'sync'
40
-
41
- class AGI
42
- end
43
-
44
-
45
- class Command < AGI
46
-
47
- # answer: Asserts answer
48
- public
49
- def answer
50
- cmd = 'ANSWER'
51
- rs = exec_command(cmd)
52
- raise CommandError, rs.to_s if rs.command_error?
53
- return rs
54
- end
55
-
56
- # set autohangup: Autohangup channel in some time
57
- public
58
- def set_auto_hangup(secs=0)
59
- cmd = 'SET AUTOHANGUP ' + secs.to_s
60
- rs = exec_command(cmd)
61
- raise CommandError, rs.to_s if rs.command_error?
62
- return rs
63
- end
64
-
65
- # channel status: Returns status of the connected channel
66
- # we are returing channel object
67
- public
68
- def channel_status(channel=nil)
69
- cmd = 'CHANNEL STATUS'
70
- cmd = cmd + ' ' + channel.to_s if not channel.nil?
71
- rs = exec_command(cmd)
72
- raise CommandError, rs.to_s if rs.command_error?
73
- return rs
74
- end
75
-
76
- # database del: Removes database key/value
77
- #def database_del
78
- # I am not quite sure how it works and what it do
79
- # I will update code once I about this
80
- #end
81
-
82
- # database deltree: Removes database keytree/value
83
- #def database_deltree
84
- # I am not quite sure how it works and what it do
85
- # I will update code once I about this
86
- #end
87
-
88
- # database get: Gets database value
89
- #def database_get
90
- # I am not quite sure how it works and what it do
91
- # I will update code once I about this
92
- #end
93
-
94
- # database put: Adds/updates database value
95
- #def database_put
96
- # I am not quite sure how it works and what it do
97
- # I will update code once I about this
98
- #end
99
-
100
- # exec: Executes a given Application. (Applications are the functions you use to create a dial plan in extensions.conf ).
101
- # returns the message like 200, result=0
102
- # to get result use rs.result
103
- # exec return whatever the asterisk command returns
104
- public
105
- def exec(asterisk_application, options=nil)
106
- cmd = 'EXEC ' + asterisk_application.to_s
107
- cmd = cmd + ' ' + options.to_s if not options.nil?
108
- rs = exec_command(cmd)
109
- raise CommandError, rs.to_s if rs.command_error?
110
- return rs
111
- end
112
-
113
- # get data: Gets data on a channel
114
- public
115
- def get_data(filename, timeout=nil, max_digit=nil)
116
- cmd = 'GET DATA' + ' ' + filename.to_s
117
- timeout = timeout.to_i * 1000 if not timeout.nil?
118
- if (timeout.nil? and (not max_digit.nil?))
119
- cmd = cmd + ' -1 ' + max_digit.to_s
120
- elsif max_digit.nil?
121
- cmd = cmd + ' ' + timeout.to_s
122
- else
123
- cmd = cmd + ' ' + timeout.to_s + ' ' + max_digit.to_s
124
- end
125
-
126
- rs = exec_command(cmd)
127
- raise CommandError, rs.to_s if rs.command_error?
128
- return rs
129
- end
130
-
131
- # get variable: Gets a channel variable
132
- public
133
- def get_variable(name)
134
- cmd = 'GET VARIABLE ' + name.to_s
135
- rs = exec_command(cmd)
136
- raise CommandError, rs.to_s if rs.command_error?
137
- return rs
138
- end
139
-
140
- # hangup: Hangup the current channel
141
- public
142
- def hangup(channel=nil)
143
- cmd = 'HANGUP'
144
- cmd = cmd + ' ' + channel.to_s if channel.nil?
145
- rs = exec_command(cmd)
146
- raise CommandError, rs.to_s if rs.command_error?
147
- return rs
148
- end
149
-
150
- # noop: Does nothing
151
- public
152
- def noop(msg)
153
- cmd = 'NOOP ' + msg.to_s
154
- rs = exec_command(cmd)
155
- raise CommandError, rs.to_s if rs.command_error?
156
- return rs
157
- end
158
-
159
- # receive char: Receives one character from channels supporting it
160
- public
161
- def receive_char(timeout=0)
162
- cmd = 'RECEIVE CHAR'
163
- if not timeout.zero?
164
- timeout = timeout * 1000
165
- cmd = cmd + ' ' + timeout.to_s
166
- end
167
- rs = exec_command(cmd)
168
- raise CommandError, rs.to_s if rs.command_error?
169
- return rs
170
- end
171
-
172
- # receive text: Receives text from channels supporting it
173
- public
174
- def receive_text(timeout=0)
175
- cmd = 'RECEIVE TEXT'
176
- if not timeout.zero?
177
- timeout = timeout * 1000
178
- cmd = cmd + ' ' + timeout.to_s
179
- end
180
- rs = exec_command(cmd)
181
- raise CommandError, rs.to_s if rs.command_error?
182
- return rs
183
- end
184
-
185
- # record file: Records to a given file
186
- public
187
- def record_file(filename, format='gsm', escape_digits=nil, timeout=nil, beep=true)
188
- cmd = 'RECORD FILE ' + filename.to_s + ' ' + format.to_s + ' '
189
- if escape_digits.nil?
190
- cmd = cmd + ' ' + '#'
191
- else
192
- cmd = cmd + ' ' + escape_digits.to_s
193
- end
194
-
195
- if timeout.nil?
196
- timeout = -1
197
- else
198
- timeout = timeout * 1000 if timeout.to_i > 0
199
- end
200
-
201
- cmd = cmd + ' ' + timeout.to_s
202
- cmd = cmd + ' ' + 'beep' if beep
203
- rs = exec_command(cmd)
204
- raise CommandError, rs.to_s if rs.command_error?
205
- return rs
206
- end
207
-
208
- # say digits: Says a given digit string
209
- public
210
- def say_digits(digit_string, escape_digits=nil)
211
- cmd = 'SAY DIGITS ' + digit_string.to_s + ' '
212
- if escape_digits.nil?
213
- cmd = cmd + '""'
214
- else
215
- cmd = cmd + escape_digits.to_s
216
- end
217
- rs = exec_command(cmd)
218
- raise CommandError, rs.to_s if rs.command_error?
219
- return rs
220
- end
221
-
222
- # say number: Says a given number
223
- public
224
- def say_number(number, escape_digits=nil)
225
- cmd = 'SAY NUMBER ' + number.to_s + ' '
226
- if escape_digits.nil?
227
- cmd = cmd + '""'
228
- else
229
- cmd = cmd + escape_digits.to_s
230
- end
231
- rs = exec_command(cmd)
232
- raise CommandError, rs.to_s if rs.command_error?
233
- return rs
234
- end
235
-
236
- # say phonetic: Say the given character string.
237
- public
238
- def say_phonetic(string, escape_digits=nil)
239
- cmd = 'SAY PHONETIC ' + '"' + string.to_s + '"'
240
- cmd = cmd + ' ' + escape_digits.to_s if not escape_digits.nil?
241
- rs = exec_command(cmd)
242
- raise CommandError, rs.to_s if rs.command_error?
243
- return rs
244
- end
245
-
246
- # say time: Say a time
247
- # SAY TIME <time> <escape digits>
248
- # <time> is number of seconds elapsed since 00:00:00 on January 1, 1970, Coordinated Universal Time (UTC).
249
- public
250
- def say_time(time=Time.now.to_i, escape_digits='#')
251
- cmd = 'SAY TIME ' + time.to_s
252
- cmd = cmd + ' ' + escape_digits.to_s
253
- rs = exec_command(cmd)
254
- raise CommandError, rs.to_s if rs.command_error?
255
- return rs
256
- end
257
-
258
- # send image: Sends images to channels supporting it
259
- public
260
- def send_image(image)
261
- cmd = 'SEND IMAGE ' + image.to_s
262
- rs = exec_command(cmd)
263
- raise CommandError, rs.to_s if rs.command_error?
264
- return rs
265
- end
266
-
267
- # send text: Sends text to channels supporting it
268
- public
269
- def send_text(text)
270
- cmd = 'SEND TEXT ' + text.to_s
271
- rs = exec_command(cmd)
272
- raise CommandError, rs.to_s if rs.command_error?
273
- return rs
274
- end
275
-
276
- # set callerid: Sets callerid for the current channel
277
- public
278
- def set_caller_id(number)
279
- cmd = 'SET CALLERID ' + number.to_s
280
- rs = exec_command(cmd)
281
- raise CommandError, rs.to_s if rs.command_error?
282
- return rs
283
- end
284
-
285
- # set context: Sets channel context
286
- public
287
- def set_context(context)
288
- cmd = 'SET CONTEXT ' + context.to_s
289
- rs = exec_command(cmd)
290
- raise CommandError, rs.to_s if rs.command_error?
291
- return rs
292
- end
293
-
294
- # set extension: Changes channel extension
295
- public
296
- def set_extension(extension)
297
- cmd = 'SET EXTENSION ' + extension.to_s
298
- rs = exec_command(cmd)
299
- raise CommandError, rs.to_s if rs.command_error?
300
- return rs
301
- end
302
-
303
- # set music: Enable/Disable Music on hold generator, example "SET MUSIC ON default"
304
- public
305
- def set_music(mode=true, moh_class='default')
306
- if mode
307
- mode = 'ON'
308
- else
309
- mode = 'OFF'
310
- end
311
- cmd = 'SET MUSIC ' + mode.to_s + ' ' + moh_class.to_s
312
- rs = exec_command(cmd)
313
- raise CommandError, rs.to_s if rs.command_error?
314
- return rs
315
- end
316
-
317
- # set priority: Prioritizes the channel
318
- public
319
- def set_priority(priority)
320
- cmd = 'SET PRIORITY ' + priority.to_i.to_s
321
- rs = exec_command(cmd)
322
- raise CommandError, rs.to_s if rs.command_error?
323
- return rs
324
- end
325
-
326
- # set variable: Sets a channel variable
327
- public
328
- def set_variable(name, value)
329
- cmd = 'SET VARIABLE ' + name.to_s + ' ' + '"' + value.to_s + '"'
330
- rs = exec_command(cmd)
331
- raise CommandError, rs.to_s if rs.command_error?
332
- return rs
333
- end
334
-
335
- # stream file: Sends audio file on channel
336
- public
337
- def stream_file(filename, escape_digits='#')
338
- cmd = 'STREAM FILE ' + filename.to_s
339
- cmd = cmd + ' ' + '"' + escape_digits.to_s + '"'
340
- rs = exec_command(cmd)
341
- raise CommandError, rs.to_s if rs.command_error?
342
- return rs
343
- end
344
-
345
- # tdd mode: Activates TDD mode on channels supporting it, to enable communication with TDDs.
346
- public
347
- def tdd_mode(settings=true)
348
- if settings
349
- settings = 'ON'
350
- else
351
- settings = 'OFF'
352
- end
353
- cmd = 'TDD MODE ' + settings.to_s
354
- rs = exec_command(cmd)
355
- raise CommandError, rs.to_s if rs.command_error?
356
- return rs
357
- end
358
-
359
- # verbose: Logs a message to the asterisk verbose log
360
- public
361
- def verbose(message, level=3)
362
- cmd = 'VERBOSE ' + '"' + message.to_s + '"' + ' ' + level.to_s
363
- rs = exec_command(cmd)
364
- raise CommandError, rs.to_s if rs.command_error?
365
- return rs
366
- end
367
-
368
- # wait for digit: Waits for a digit to be pressed
369
- public
370
- def wait_for_digit(timeout=nil)
371
- cmd = 'WAIT FOR DIGIT'
372
-
373
- if timeout.nil?
374
- timeout = -1
375
- else
376
- timeout = timeout * 1000
377
- end
378
- cmd = cmd + ' ' + timeout.to_i.to_s
379
- rs = exec_command(cmd)
380
- raise CommandError, rs.to_s if rs.command_error?
381
- return rs
382
- end
383
-
384
- ####### More commands ######
385
-
386
- # record is just an enhancement of record file
387
- # after each record, caller will get an option
388
- # to record or accept. also this method would be
389
- # called by max_tries argument, which can not
390
- # be more than 255
391
- def record(filename, format='gsm', escape_digits=nil, timeout=nil, beep=true, max_tries=255)
392
- try_count = 0
393
- try_again = true
394
-
395
- while (try_again and (try_count < max_tries))
396
- self.record_file(filename, format, escape_digits, timeout, beep)
397
-
398
- replay = true
399
-
400
- while replay
401
- status = stream_file("ruby-agi/record-menu", "123#*")
402
- $stderr.puts status.to_s
403
- if status.result.zero?
404
- status = self.wait_for_digit(10)
405
- $stderr.puts status.to_s
406
- end
407
- if status.digit == '1' # accept record
408
- try_again = false
409
- replay = false
410
- elsif status.digit == '2' # listen record
411
- self.stream_file(filename)
412
- replay = true
413
- elsif status.digit == '3' # re-record
414
- # we need to make sure to delete previously recored file
415
- max_tries = max_tries.next
416
- replay = false
417
- elsif status.digit == '*' # replay menu
418
- replay = true
419
- elsif status.digit == '#' # quit
420
- replay = false
421
- try_again = false
422
- else
423
- end
424
- end
425
- end
426
- end
427
-
428
-
429
- def dial(telephone_number=nil, protocol=nil, username=nil, context='default', extension=nil, timeout=nil, options=nil)
430
- dial_string = nil
431
-
432
- if protocol == 'LOCAL'
433
- return nil if (extension.nil? or context.nil?)
434
- dial_string = "LOCAL/#{extension}@#{context}"
435
- elsif protocol == 'IAX2'
436
- return nil if (telephone_number.nil? or username.nil? or context.nil?)
437
- telephone_number.strip!
438
- dial_string = "IAX2/#{username}@#{context}/#{telephone_number}"
439
- elsif protocol == 'SIP'
440
- else
441
- return nil
442
- end
443
-
444
- timeout.nil? ? dial_string += "|" : dial_string += "|#{timeout}"
445
- options.nil? ? dial_string += "|" : dial_string += "|#{options}"
446
- rs = exec('DIAL', dial_string)
447
- return rs
448
- end
449
-
450
- ###### Process methods #######
451
-
452
- public
453
- def raw_command(cmd)
454
- rs = exec_command(cmd)
455
- raise CommandError, rs.to_s if rs.command_error?
456
- return rs
457
- end
458
-
459
- private
460
- def escape(str)
461
- rxp = Regexp.new(/\"/)
462
- return str.gsub(rxp, '\"')
463
- end
464
-
465
- private
466
- def exec_command(cmd)
467
- rs = nil
468
- begin
469
- semaphore do
470
- $stdout.puts cmd
471
- responses = $stdin.gets
472
- rs = ReturnStatus.new(cmd, responses)
473
- if debug?
474
- $stderr.puts " -- ruby-agi << #{cmd}"
475
- $stderr.puts " -- ruby-agi >> #{rs.message}"
476
- end
477
- end
478
-
479
- rescue Errno::EPIPE
480
- raise HangupError, "Line hung up during command execution!!"
481
- end
482
-
483
- return rs
484
- end
485
-
486
- end
data.tar.gz.sig DELETED
@@ -1 +0,0 @@
1
- wv(�8z��?{�1�K �M��vx��Sˤ f���-M?E�_��2pt31��)1���w�ɝ�� }�ع���}��?*�@!�] i�6f��i�&�cc��@��Kl�k��+��O{�h�o s�I��2����,3���d˜uM�����Y���5�(O��Rbos�ޤ����/�<����t=�x�_c�l1<��rn �B߰ӳ�]� �#6��UZm]':���G���a���̂��6����$�1���6
metadata.gz.sig DELETED
Binary file
File without changes