class Opensips::MI::Transport::Fifo
Constants
- PERMISIONS
Attributes
fifo_name[RW]
reply_dir[RW]
reply_fifo[RW]
Public Class Methods
finalize(reply_file)
click to toggle source
# File lib/opensips/mi/transport/fifo.rb, line 83 def self.finalize(reply_file) File.unlink(reply_file) if File.exist?(reply_file) end
init(params)
click to toggle source
# File lib/opensips/mi/transport/fifo.rb, line 11 def init(params) fifo = Fifo.new params fifo.open end
new(params)
click to toggle source
# File lib/opensips/mi/transport/fifo.rb, line 17 def initialize(params) # set default values @reply_fifo = if params[:reply_fifo].nil? "opensips_reply_" << SecureRandom.hex[0,8] else @reply_fifo = params[:reply_fifo] end @reply_dir = if params[:reply_dir].nil? '/tmp/' else params[:reply_dir] end raise ArgumentError, "Fifo reply directory does not exists #{@reply_dir}" unless Dir.exist? @reply_dir # fifo_name is required parameter raise ArgumentError, 'Missing required parameter fifo_name' if params[:fifo_name].nil? @fifo_name = params[:fifo_name] raise ArgumentError, "OpenSIPs fifo_name file does not exist: #{@fifo_name}" unless File.exist? @fifo_name raise ArgumentError, "File #{@fifo_name} is not pipe" unless File.pipe? @fifo_name # set finalizing method reply_file = File.expand_path(@reply_fifo, @reply_dir) ObjectSpace.define_finalizer(self, proc{self.class.finalize(reply_file)}) end
Public Instance Methods
command(cmd, params = [])
click to toggle source
# File lib/opensips/mi/transport/fifo.rb, line 57 def command(cmd, params = []) fd_w = IO::sysopen(@fifo_name, Fcntl::O_WRONLY) fifo_w = IO.open(fd_w) request = ":#{cmd}:#{@reply_fifo}\n" params.each do |c| request << "#{c}\n" end # additional new line to terminate command request << ?\n fifo_w.syswrite request # read response file = File.expand_path(File.expand_path(@reply_fifo,@reply_dir)) fd_r = IO::sysopen(file, Fcntl::O_RDONLY ) fifo_r = IO.open(fd_r) response = Array[] response << $_.chomp while fifo_r.gets Opensips::MI::Response.new response ensure # make sure we always close files' descriptors fifo_r.close if fifo_r fifo_w.close if fifo_w end
open()
click to toggle source
# File lib/opensips/mi/transport/fifo.rb, line 48 def open # create fifo file fifo_file = File.expand_path(@reply_fifo, @reply_dir) Kernel.system "mkfifo -m #{PERMISIONS} #{fifo_file}" raise SystemCallError, "Can not create reply pipe: #{fifo_file}" unless File.pipe?(fifo_file) self end