Sha256: 34943b225b7453bf67c817c005f1ce0032f2d0a07c7f47562075e14ce02aa046

Contents?: true

Size: 1.45 KB

Versions: 11

Compression:

Stored size: 1.45 KB

Contents

# Copyright (c) 2020 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
# frozen_string_literal: true

module Contrast
  module Api
    # Behavior common to all sockets used
    # to communicate with the Contrast Service.
    module Socket
      SOCKET_MONITOR = Monitor.new

      # Send a message across the socket and read back the response.
      # @param marshaled [String] some marshaled form of data to be sent across
      #   the socket. Typically an encoded form of Contrast::Api::Dtm::Message.
      # @return [String] some marshalled form of data returned by the socket.
      #   Typically an encoded form of Contrast::Api::Settings::AgentSettings.
      def send_marshaled marshaled
        SOCKET_MONITOR.synchronize do
          socket = new_socket

          # write message length
          len = marshaled.length
          socket.write([len].pack(Contrast::Api::ENCODING_STRING))

          # write the entire message
          socket.write(marshaled)
          socket.close_write

          # read the response length
          len = socket.read(4).unpack1(Contrast::Api::ENCODING_STRING)

          # read expected response to end
          socket.read(len)
        end
      end

      # Override this method to return a socket.
      # Should be interface compatible with TCPSocket, UNIXSocket, etc.
      def new_socket
        raise NotImplementedError, 'This is abstract, override it.'
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
contrast-agent-3.12.2 lib/contrast/api/socket.rb
contrast-agent-3.12.1 lib/contrast/api/socket.rb
contrast-agent-3.12.0 lib/contrast/api/socket.rb
contrast-agent-3.11.0 lib/contrast/api/socket.rb
contrast-agent-3.10.2 lib/contrast/api/socket.rb
contrast-agent-3.10.1 lib/contrast/api/socket.rb
contrast-agent-3.10.0 lib/contrast/api/socket.rb
contrast-agent-3.9.1 lib/contrast/api/socket.rb
contrast-agent-3.9.0 lib/contrast/api/socket.rb
contrast-agent-3.8.5 lib/contrast/api/socket.rb
contrast-agent-3.8.4 lib/contrast/api/socket.rb