lib/ethon/easies/informations.rb



module Ethon
  module Easies

    # This module contains the methods to return informations
    # from the easy handle. See http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html
    # for more information.
    module Informations

      # Holds available informations and their type, which is needed to
      # request the informations from libcurl.
      AVAILABLE_INFORMATIONS = {
        # Return the available http auth methods.
        :httpauth_avail => :long,

        # Return the total time in seconds for the previous
        # transfer, including name resolving, TCP connect etc.
        :total_time => :double,

        # Return the time, in seconds, it took from the start
        # until the first byte is received by libcurl. This
        # includes pretransfer time and also the time the
        # server needs to calculate the result.
        :starttransfer_time => :double,

        # Return the time, in seconds, it took from the start
        # until the SSL/SSH connect/handshake to the remote
        # host was completed. This time is most often very near
        # to the pre transfer time, except for cases such as HTTP
        # pippelining where the pretransfer time can be delayed
        # due to waits in line for the pipeline and more.
        :appconnect_time => :double,

        # Return the time, in seconds, it took from the start
        # until the file transfer is just about to begin. This
        # includes all pre-transfer commands and negotiations
        # that are specific to the particular protocol(s) involved.
        # It does not involve the sending of the protocol-
        # specific request that triggers a transfer.
        :pretransfer_time => :double,

        # Return the time, in seconds, it took from the start
        # until the connect to the remote host (or proxy) was completed.
        :connect_time => :double,

        # Return the time, in seconds, it took from the
        # start until the name resolving was completed.
        :namelookup_time => :double,

        # Return the last used effective url.
        :effective_url => :string,

        # Return the string holding the IP address of the most recent
        # connection done with this curl handle. This string
        # may be IPv6 if that's enabled.
        :primary_ip => :string,

        # Return the last received HTTP, FTP or SMTP response code.
        # The value will be zero if no server response code has
        # been received. Note that a proxy's CONNECT response should
        # be read with http_connect_code and not this.
        :response_code => :long,

        # Return the total number of redirections that were
        # actually followed
        :redirect_count => :long
      }

      AVAILABLE_INFORMATIONS.each do |name, type|
        define_method(name) do
          Curl.method("get_info_#{type}").call(name, handle)
        end
      end

      # Returns this curl version supports zlib.
      #
      # @example Return wether zlib is supported.
      #   easy.supports_zlib?
      #
      # @return [ Boolean ] True if supported, else false.
      def supports_zlib?
        !!(Curl.version.match(/zlib/))
      end
    end
  end
end