module Ethon::Curls::Infos

This module contains logic for the available informations on an easy, eg.: connect_time.

Public Instance Methods

debug_info_types() click to toggle source

curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTDEBUGFUNCTION github.com/bagder/curl/blob/master/include/curl/curl.h#L378

@example Return debug info types.

Ethon::Curl.debug_info_types

@return [ Hash ] The info types available to curl_debug_callback.

# File lib/ethon/curls/infos.rb, line 31
def debug_info_types
  [
    :text, 0,
    :header_in,
    :header_out,
    :data_in,
    :data_out,
    :ssl_data_in,
    :ssl_data_out
  ]
end
get_info_double(option, handle) click to toggle source

Return info as float

@example Return info.

Curl.get_info_double(:response_code, easy)

@param [ Symbol ] option The option name. @param [ ::FFI::Pointer ] handle The easy handle.

@return [ Float ] The info.

# File lib/ethon/curls/infos.rb, line 142
def get_info_double(option, handle)
  double_ptr = ::FFI::MemoryPointer.new(:double)

  if easy_getinfo(handle, option, :pointer, double_ptr) == :ok
    double_ptr.read_double
  end
end
get_info_long(option, handle) click to toggle source

Return info as integer.

@example Return info.

Curl.get_info_long(:response_code, easy)

@param [ Symbol ] option The option name. @param [ ::FFI::Pointer ] handle The easy handle.

@return [ Integer ] The info.

# File lib/ethon/curls/infos.rb, line 125
def get_info_long(option, handle)
  long_ptr = ::FFI::MemoryPointer.new(:long)

  if easy_getinfo(handle, option, :pointer, long_ptr) == :ok
    long_ptr.read_long
  end
end
get_info_string(option, handle) click to toggle source

Return info as string.

@example Return info.

Curl.get_info_string(:primary_ip, easy)

@param [ Symbol ] option The option name. @param [ ::FFI::Pointer ] handle The easy handle.

@return [ String ] The info.

# File lib/ethon/curls/infos.rb, line 107
def get_info_string(option, handle)
  string_ptr = ::FFI::MemoryPointer.new(:pointer)

  if easy_getinfo(handle, option, :pointer, string_ptr) == :ok
    ptr=string_ptr.read_pointer
    ptr.null? ? nil : ptr.read_string
  end
end
info_types() click to toggle source

Return info types.

@example Return info types.

Ethon::Curl.info_types

@return [ Hash ] The info types.

# File lib/ethon/curls/infos.rb, line 15
def info_types
  {
    :string =>0x100000,
    :long =>  0x200000,
    :double =>0x300000,
    :slist => 0x400000
  }
end
infos() click to toggle source

Return Info details, refer github.com/bagder/curl/blob/master/src/tool_writeout.c#L66 for details

@example Return infos.

Ethon::Curl.infos

@return [ Hash ] The infos.

# File lib/ethon/curls/infos.rb, line 50
def infos
  {
    :effective_url =>          info_types[:string] + 1,
    :response_code =>          info_types[:long]   + 2,
    :total_time =>             info_types[:double] + 3,
    :namelookup_time =>        info_types[:double] + 4,
    :connect_time =>           info_types[:double] + 5,
    :pretransfer_time =>       info_types[:double] + 6,
    :size_upload =>            info_types[:double] + 7,
    :size_download =>          info_types[:double] + 8,
    :speed_download =>         info_types[:double] + 9,
    :speed_upload =>           info_types[:double] + 10,
    :header_size =>            info_types[:long]   + 11,
    :request_size =>           info_types[:long]   + 12,
    :ssl_verifyresult =>       info_types[:long]   + 13,
    :filetime =>               info_types[:long]   + 14,
    :content_length_download =>info_types[:double] + 15,
    :content_length_upload =>  info_types[:double] + 16,
    :starttransfer_time =>     info_types[:double] + 17,
    :content_type =>           info_types[:string] + 18,
    :redirect_time =>          info_types[:double] + 19,
    :redirect_count =>         info_types[:long]   + 20,
    :private =>                info_types[:string] + 21,
    :http_connectcode =>       info_types[:long]   + 22,
    :httpauth_avail =>         info_types[:long]   + 23,
    :proxyauth_avail =>        info_types[:long]   + 24,
    :os_errno =>               info_types[:long]   + 25,
    :num_connects =>           info_types[:long]   + 26,
    :ssl_engines =>            info_types[:slist]  + 27,
    :cookielist =>             info_types[:slist]  + 28,
    :lastsocket =>             info_types[:long]   + 29,
    :ftp_entry_path =>         info_types[:string] + 30,
    :redirect_url =>           info_types[:string] + 31,
    :primary_ip =>             info_types[:string] + 32,
    :appconnect_time =>        info_types[:double] + 33,
    :certinfo =>               info_types[:slist]  + 34,
    :condition_unmet =>        info_types[:long]   + 35,
    :rtsp_session_id =>        info_types[:string] + 36,
    :rtsp_client_cseq =>       info_types[:long]   + 37,
    :rtsp_server_cseq =>       info_types[:long]   + 38,
    :rtsp_cseq_recv =>         info_types[:long]   + 39,
    :primary_port =>           info_types[:long]   + 40,
    :local_ip =>               info_types[:string] + 41,
    :local_port =>             info_types[:long]   + 42,
    :last =>42
  }
end