class HrrRbNetconf::Server::Capability::Base_1_0::Receiver

Public Class Methods

new(io_r, logger: nil) click to toggle source
# File lib/hrr_rb_netconf/server/capability/base_1_0.rb, line 139
def initialize io_r, logger: nil
  self.logger = logger
  @io_r = io_r
end

Public Instance Methods

receive_message() click to toggle source
# File lib/hrr_rb_netconf/server/capability/base_1_0.rb, line 144
def receive_message
  buf = String.new
  loop do
    begin
      tmp = @io_r.read(1)
    rescue => e
      log_info { "Receiver IO closed: #{e.class}: #{e.message}" }
      return nil
    end
    if tmp.nil?
      log_info { "Receiver IO closed" }
      return nil
    end
    buf += tmp
    if buf[-6..-1] == ']]>]]>'
      break
    end
  end
  log_debug { "Received message: #{buf[0..-7].inspect}" }
  begin
    received_msg = REXML::Document.new(buf[0..-7], {:ignore_whitespace_nodes => :all}).root
    validate_received_msg received_msg
    received_msg
  rescue => e
    info = "Invalid received message: #{e.message.split("\n").first}: #{buf[0..-7].inspect}"
    log_info { info }
    raise info
  end
end
validate_received_msg(received_msg) click to toggle source
# File lib/hrr_rb_netconf/server/capability/base_1_0.rb, line 174
def validate_received_msg received_msg
  unless received_msg
    raise "No valid root tag interpreted"
  end
  unless "rpc" == received_msg.name
    raise "Invalid message: expected #{"rpc".inspect}, but got #{received_msg.name.inspect}"
  end
  unless "urn:ietf:params:xml:ns:netconf:base:1.0" == received_msg.namespace
    raise "Invalid namespace: expected #{"urn:ietf:params:xml:ns:netconf:base:1.0".inspect}, but got #{received_msg.namespace.inspect}"
  end
end