class Opensips::MI::Response
Attributes
code[R]
message[R]
rawdata[R]
result[R]
success[R]
Public Class Methods
new(data)
click to toggle source
# File lib/opensips/mi/response.rb, line 8 def initialize(data) raise InvalidResponseData, 'Invalid parameter' unless data.is_a? Array raise EmptyResponseData, 'Empty parameter array' if data.empty? if /^(?<code>\d+) (?<message>.+)$/ =~ data.shift.to_s @code = code.to_i @message = message else raise InvalidResponseData, 'Invalid response parameter. Can not parse' end @success = (200..299).include?(@code) # successfull responses have additional new line @rawdata = data @result = nil end
Public Instance Methods
cache_fetch()
click to toggle source
returns struct
# File lib/opensips/mi/response.rb, line 73 def cache_fetch res = Hash.new @rawdata.each do |r| if /^(?'label'[^=]+)=\s+\[(?'value'[^\]]+)\]/ =~ r label.strip! res[label.to_sym] = value end end @result = OpenStruct.new res self end
dlg_list()
click to toggle source
returns hash of dialogs
# File lib/opensips/mi/response.rb, line 106 def dlg_list # parse dialogs information into array # assuming new block always starts with "dialog:: hash=..." calls, key = Hash.new, nil @rawdata.each do |l| l.strip! if l.match(/^dialog::\s+hash=(.*)$/) key = $1 calls[key] = Hash.new next end # building dialog array if l.match(/^([^:]+)::\s+(.*)$/) calls[key][$1.to_sym] = $2 end end @result = calls self end
dr_gw_status()
click to toggle source
# File lib/opensips/mi/response.rb, line 126 def dr_gw_status return self if @rawdata.empty? if /\AEnabled::\s+(?<status>yes|no)/ =~ @rawdata[0] self.class.send(:define_method, :enabled, proc{status.eql?('yes')}) return self end @result = dr_gws_hash self end
ps()
click to toggle source
returns array containing list of opensips processes
# File lib/opensips/mi/response.rb, line 137 def ps processes = [] @rawdata.each do |l| l.slice! "Process:: " h = {} l.split(" ", 3).each do |x| key, val = x.split("=", 2) h[key.downcase.to_sym] = val end processes << OpenStruct.new(h) end @result = processes self end
ul_dump()
click to toggle source
Parse user locations records to Hash
# File lib/opensips/mi/response.rb, line 30 def ul_dump res = {} aor = nil contact = nil @rawdata.each do |r| next if r.start_with?("Domain") r = r.strip key, val = r.split(":: ") if key == "AOR" aor = val res[aor] = [] next elsif key == "Contact" contact = {} res[aor] << contact end contact[key.gsub(?-, ?_).downcase.to_sym] = val if key end @result = res self end
ul_show_contact()
click to toggle source
returns Array of registered contacts
# File lib/opensips/mi/response.rb, line 86 def ul_show_contact result = [] @rawdata.each do |r| _, contact = r.strip.split("Contact:: ") next unless contact params = contact.split(';') res = {contact: params.shift} params.each do |p| key, val = p.split('=') res[key.gsub(?-, ?_).downcase.to_sym] = val end result << res end @result = result end
uptime()
click to toggle source
returns struct
# File lib/opensips/mi/response.rb, line 57 def uptime res = Hash.new @rawdata.each do |r| next if /^Now::/ =~ r if /^Up since:: [^\s]+ (?'mon'[^\s]+)\s+(?'d'\d+) (?'h'\d+):(?'m'\d+):(?'s'\d+) (?'y'\d+)/ =~ r res[:since] = Time.local(y,mon,d,h,m,s) end if /^Up time:: (?'sec'\d+) / =~ r res[:uptime] = sec.to_i end end @result = OpenStruct.new res self end
Private Instance Methods
dr_gws_hash()
click to toggle source
# File lib/opensips/mi/response.rb, line 156 def dr_gws_hash return nil if @rawdata.empty? res = {} @rawdata.map do |gw| if /\AID::\s+(?<id>[^\s]+)\s+IP=(?<ip>[^:\s]+):?(?<port>\d+)?\s+Enabled=(?<status>yes|no)/ =~ gw res[id] = { enabled: status.eql?('yes'), ipaddr: ip, port: port } end end res.empty? ? nil : res end