staskobzar/opensips-mi

View on GitHub
lib/opensips/mi/transport/http.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

require "net/http"
require_relative "abstract"

module Opensips
  module MI
    module Transport
      # HTTP transport to communicate with MI
      class HTTP < Abstract
        def initialize(args)
          super()
          raise_invalid_params unless args.is_a?(Hash)
          url, @timeout = args.values_at(:url, :timeout)
          raise_invalid_params if url.nil?
          seturi(url)
          @timeout ||= 5
          connect
        end

        def send(cmd)
          resp = @client.post(@uri.path, cmd, { "Content-Type" => "application/json" })
          unless resp.code.eql? "200"
            raise Opensips::MI::ErrorHTTPReq,
                  "invalid MI HTTP response: #{resp.message}"
          end
          resp.body
        end

        private

        def connect
          @client = Net::HTTP.new(@uri.host, @uri.port)
          @client.read_timeout = @timeout
          @client.write_timeout = @timeout
        end
      end
    end
  end
end