ethon 0.9.1 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.github/workflows/ruby.yml +41 -0
- data/.gitignore +1 -0
- data/CHANGELOG.md +20 -1
- data/Gemfile +14 -4
- data/Guardfile +1 -0
- data/README.md +4 -1
- data/Rakefile +1 -0
- data/ethon.gemspec +2 -1
- data/lib/ethon.rb +2 -0
- data/lib/ethon/curl.rb +1 -0
- data/lib/ethon/curls/classes.rb +2 -1
- data/lib/ethon/curls/codes.rb +1 -1
- data/lib/ethon/curls/constants.rb +1 -0
- data/lib/ethon/curls/form_options.rb +1 -0
- data/lib/ethon/curls/functions.rb +4 -12
- data/lib/ethon/curls/infos.rb +4 -3
- data/lib/ethon/curls/messages.rb +1 -0
- data/lib/ethon/curls/options.rb +35 -23
- data/lib/ethon/curls/settings.rb +2 -0
- data/lib/ethon/easy.rb +3 -1
- data/lib/ethon/easy/callbacks.rb +25 -3
- data/lib/ethon/easy/debug_info.rb +1 -0
- data/lib/ethon/easy/features.rb +1 -0
- data/lib/ethon/easy/form.rb +7 -4
- data/lib/ethon/easy/header.rb +1 -0
- data/lib/ethon/easy/http.rb +1 -0
- data/lib/ethon/easy/http/actionable.rb +2 -1
- data/lib/ethon/easy/http/custom.rb +1 -0
- data/lib/ethon/easy/http/delete.rb +1 -0
- data/lib/ethon/easy/http/get.rb +1 -0
- data/lib/ethon/easy/http/head.rb +1 -0
- data/lib/ethon/easy/http/options.rb +1 -0
- data/lib/ethon/easy/http/patch.rb +1 -0
- data/lib/ethon/easy/http/post.rb +1 -0
- data/lib/ethon/easy/http/postable.rb +1 -0
- data/lib/ethon/easy/http/put.rb +1 -0
- data/lib/ethon/easy/http/putable.rb +1 -0
- data/lib/ethon/easy/informations.rb +1 -0
- data/lib/ethon/easy/mirror.rb +1 -0
- data/lib/ethon/easy/operations.rb +16 -1
- data/lib/ethon/easy/options.rb +11 -2
- data/lib/ethon/easy/params.rb +1 -0
- data/lib/ethon/easy/queryable.rb +4 -1
- data/lib/ethon/easy/response_callbacks.rb +27 -0
- data/lib/ethon/easy/util.rb +1 -0
- data/lib/ethon/errors.rb +1 -0
- data/lib/ethon/errors/ethon_error.rb +1 -0
- data/lib/ethon/errors/global_init.rb +1 -0
- data/lib/ethon/errors/invalid_option.rb +1 -0
- data/lib/ethon/errors/invalid_value.rb +1 -0
- data/lib/ethon/errors/multi_add.rb +1 -0
- data/lib/ethon/errors/multi_fdset.rb +1 -0
- data/lib/ethon/errors/multi_remove.rb +1 -0
- data/lib/ethon/errors/multi_timeout.rb +1 -0
- data/lib/ethon/errors/select.rb +1 -0
- data/lib/ethon/libc.rb +16 -1
- data/lib/ethon/loggable.rb +1 -0
- data/lib/ethon/multi.rb +1 -0
- data/lib/ethon/multi/operations.rb +1 -0
- data/lib/ethon/multi/options.rb +2 -1
- data/lib/ethon/multi/stack.rb +1 -0
- data/lib/ethon/version.rb +2 -1
- data/profile/benchmarks.rb +1 -0
- data/profile/memory_leaks.rb +1 -0
- data/profile/perf_spec_helper.rb +1 -0
- data/profile/support/memory_test_helpers.rb +1 -0
- data/profile/support/os_memory_leak_tracker.rb +1 -0
- data/profile/support/ruby_object_leak_tracker.rb +1 -0
- data/spec/ethon/curl_spec.rb +1 -0
- data/spec/ethon/easy/callbacks_spec.rb +8 -1
- data/spec/ethon/easy/debug_info_spec.rb +2 -0
- data/spec/ethon/easy/features_spec.rb +1 -0
- data/spec/ethon/easy/form_spec.rb +28 -0
- data/spec/ethon/easy/header_spec.rb +1 -0
- data/spec/ethon/easy/http/custom_spec.rb +1 -0
- data/spec/ethon/easy/http/delete_spec.rb +1 -0
- data/spec/ethon/easy/http/get_spec.rb +1 -0
- data/spec/ethon/easy/http/head_spec.rb +1 -0
- data/spec/ethon/easy/http/options_spec.rb +1 -0
- data/spec/ethon/easy/http/patch_spec.rb +1 -0
- data/spec/ethon/easy/http/post_spec.rb +1 -0
- data/spec/ethon/easy/http/put_spec.rb +1 -0
- data/spec/ethon/easy/http_spec.rb +1 -0
- data/spec/ethon/easy/informations_spec.rb +1 -0
- data/spec/ethon/easy/mirror_spec.rb +1 -0
- data/spec/ethon/easy/operations_spec.rb +1 -0
- data/spec/ethon/easy/options_spec.rb +31 -1
- data/spec/ethon/easy/queryable_spec.rb +14 -3
- data/spec/ethon/easy/response_callbacks_spec.rb +58 -1
- data/spec/ethon/easy/util_spec.rb +1 -0
- data/spec/ethon/easy_spec.rb +8 -2
- data/spec/ethon/libc_spec.rb +4 -3
- data/spec/ethon/loggable_spec.rb +1 -0
- data/spec/ethon/multi/operations_spec.rb +1 -0
- data/spec/ethon/multi/options_spec.rb +1 -0
- data/spec/ethon/multi/stack_spec.rb +1 -0
- data/spec/ethon/multi_spec.rb +1 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/support/localhost_server.rb +2 -1
- data/spec/support/server.rb +1 -0
- metadata +6 -7
- data/.travis.yml +0 -27
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 558abec878f87a7e13113e513faf1dc5970cfcc12d3b0a8d4faaec50e847e1c9
|
|
4
|
+
data.tar.gz: 979dbda54e8b12f1a93fee6bb16db05c1960719f44c7d2152e5d9aaddd783d4e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 63339cb7a38df43138df7fb52c88d8764d7b1f04bea134781338a676a6a567e8850b9ef24f5db1268a126f9d43b31f6d0ecc6b1441bd8bb6ef7572e7d2c366bd
|
|
7
|
+
data.tar.gz: f516c95eb23a3dd70d4ee25e76bd100d2cb5d2cf38fd8d626c584c2b71e9307084b0d07598d01c595447c5b241b50a58259aca7da29cdc65db404ebf9fb622f7
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# This workflow uses actions that are not certified by GitHub.
|
|
2
|
+
# They are provided by a third-party and are governed by
|
|
3
|
+
# separate terms of service, privacy policy, and support
|
|
4
|
+
# documentation.
|
|
5
|
+
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
|
6
|
+
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
|
7
|
+
|
|
8
|
+
name: Ruby
|
|
9
|
+
|
|
10
|
+
on:
|
|
11
|
+
push:
|
|
12
|
+
branches: [ master ]
|
|
13
|
+
pull_request:
|
|
14
|
+
branches: [ master ]
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
test:
|
|
18
|
+
runs-on: ${{ matrix.os }}-latest
|
|
19
|
+
strategy:
|
|
20
|
+
fail-fast: false
|
|
21
|
+
matrix:
|
|
22
|
+
os: [ubuntu, macos]
|
|
23
|
+
ruby-version: [2.5, 2.6, 2.7, 3.0, head, debug, truffleruby, truffleruby-head]
|
|
24
|
+
continue-on-error: ${{ endsWith(matrix.ruby, 'head') || matrix.ruby == 'debug' }}
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v2
|
|
27
|
+
- name: Install libcurl header
|
|
28
|
+
run: |
|
|
29
|
+
if ${{ matrix.os == 'macos' }}
|
|
30
|
+
then
|
|
31
|
+
brew install curl
|
|
32
|
+
else
|
|
33
|
+
sudo apt install -y libcurl4-openssl-dev
|
|
34
|
+
fi
|
|
35
|
+
- name: Set up Ruby
|
|
36
|
+
uses: ruby/setup-ruby@v1
|
|
37
|
+
with:
|
|
38
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
39
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
|
40
|
+
- name: Run tests
|
|
41
|
+
run: bundle exec rake
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -2,7 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
## Master
|
|
4
4
|
|
|
5
|
-
[Full Changelog](https://github.com/typhoeus/ethon/compare/v0.
|
|
5
|
+
[Full Changelog](https://github.com/typhoeus/ethon/compare/v0.12.0...master)
|
|
6
|
+
|
|
7
|
+
## 0.12.0
|
|
8
|
+
|
|
9
|
+
[Full Changelog](https://github.com/typhoeus/ethon/compare/v0.11.0...v0.12.0)
|
|
10
|
+
|
|
11
|
+
- Removed deprecated `CURLE_SSL_CACERT` pinned in curl v7.62.0 ([@arku](https://github.com/arku) in [#158](https://github.com/typhoeus/ethon/pull/158))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## 0.11.0
|
|
15
|
+
|
|
16
|
+
[Full Changelog](https://github.com/typhoeus/ethon/compare/v0.10.1...v0.11.0)
|
|
17
|
+
|
|
18
|
+
## 0.10.1
|
|
19
|
+
|
|
20
|
+
[Full Changelog](https://github.com/typhoeus/ethon/compare/v0.10.0...v0.10.1)
|
|
21
|
+
|
|
22
|
+
## 0.10.0
|
|
23
|
+
|
|
24
|
+
[Full Changelog](https://github.com/typhoeus/ethon/compare/v0.9.1...v0.10.0)
|
|
6
25
|
|
|
7
26
|
## 0.9.1
|
|
8
27
|
|
data/Gemfile
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
source "https://rubygems.org"
|
|
2
3
|
gemspec
|
|
3
4
|
|
|
@@ -18,11 +19,20 @@ group :development, :test do
|
|
|
18
19
|
gem "json"
|
|
19
20
|
end
|
|
20
21
|
|
|
21
|
-
|
|
22
|
+
if Gem.ruby_version >= Gem::Version.new("2.0.0")
|
|
23
|
+
gem "mime-types", "~> 1.18"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
if Gem.ruby_version >= Gem::Version.new("2.2.0")
|
|
27
|
+
gem "mustermann"
|
|
28
|
+
elsif Gem.ruby_version >= Gem::Version.new("2.1.0")
|
|
29
|
+
gem "mustermann", "0.4.0"
|
|
30
|
+
elsif Gem.ruby_version >= Gem::Version.new("2.0.0")
|
|
31
|
+
gem "mustermann", "0.3.1"
|
|
32
|
+
end
|
|
22
33
|
|
|
23
|
-
|
|
24
|
-
gem "
|
|
25
|
-
gem "rb-fsevent", "~> 0.9.1"
|
|
34
|
+
if Gem.ruby_version >= Gem::Version.new("3.0.0")
|
|
35
|
+
gem "webrick"
|
|
26
36
|
end
|
|
27
37
|
end
|
|
28
38
|
|
data/Guardfile
CHANGED
data/README.md
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
[](https://badge.fury.io/rb/ethon)
|
|
2
|
+
[](https://github.com/typhoeus/ethon/actions/workflows/ruby.yml)
|
|
3
|
+
|
|
4
|
+
# Ethon
|
|
2
5
|
|
|
3
6
|
In Greek mythology, Ethon, the son of Typhoeus and Echidna, is a gigantic eagle. So much for the history.
|
|
4
7
|
In the modern world, Ethon is a very basic libcurl wrapper using ffi.
|
data/Rakefile
CHANGED
data/ethon.gemspec
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
lib = File.expand_path('../lib/', __FILE__)
|
|
3
4
|
$:.unshift lib unless $:.include?(lib)
|
|
4
5
|
|
|
@@ -17,7 +18,7 @@ Gem::Specification.new do |s|
|
|
|
17
18
|
s.required_rubygems_version = ">= 1.3.6"
|
|
18
19
|
s.license = 'MIT'
|
|
19
20
|
|
|
20
|
-
s.add_dependency('ffi', ['>= 1.
|
|
21
|
+
s.add_dependency('ffi', ['>= 1.15.0'])
|
|
21
22
|
|
|
22
23
|
s.files = `git ls-files`.split("\n")
|
|
23
24
|
s.test_files = `git ls-files -- spec/*`.split("\n")
|
data/lib/ethon.rb
CHANGED
data/lib/ethon/curl.rb
CHANGED
data/lib/ethon/curls/classes.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Ethon
|
|
2
3
|
module Curl
|
|
3
4
|
# :nodoc:
|
|
@@ -32,7 +33,7 @@ module Ethon
|
|
|
32
33
|
def clear; self[:fd_count] = 0; end
|
|
33
34
|
else
|
|
34
35
|
# FD Set size.
|
|
35
|
-
FD_SETSIZE = ::Ethon::Libc.
|
|
36
|
+
FD_SETSIZE = ::Ethon::Libc.sysconf(:open_max)
|
|
36
37
|
layout :fds_bits, [:long, FD_SETSIZE / ::FFI::Type::LONG.size]
|
|
37
38
|
|
|
38
39
|
# :nodoc:
|
data/lib/ethon/curls/codes.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Ethon
|
|
2
3
|
module Curls
|
|
3
4
|
|
|
@@ -13,13 +14,8 @@ module Ethon
|
|
|
13
14
|
|
|
14
15
|
base.attach_function :easy_init, :curl_easy_init, [], :pointer
|
|
15
16
|
base.attach_function :easy_cleanup, :curl_easy_cleanup, [:pointer], :void
|
|
16
|
-
base.attach_function :easy_getinfo, :curl_easy_getinfo, [:pointer, :info, :
|
|
17
|
-
base.attach_function :
|
|
18
|
-
base.attach_function :easy_setopt_string, :curl_easy_setopt, [:pointer, :easy_option, :string], :easy_code
|
|
19
|
-
base.attach_function :easy_setopt_long, :curl_easy_setopt, [:pointer, :easy_option, :long], :easy_code
|
|
20
|
-
base.attach_function :easy_setopt_callback, :curl_easy_setopt, [:pointer, :easy_option, :callback], :easy_code
|
|
21
|
-
base.attach_function :easy_setopt_debug_callback, :curl_easy_setopt, [:pointer, :easy_option, :debug_callback], :easy_code
|
|
22
|
-
base.attach_function :easy_setopt_off_t, :curl_easy_setopt, [:pointer, :easy_option, :int64], :easy_code
|
|
17
|
+
base.attach_function :easy_getinfo, :curl_easy_getinfo, [:pointer, :info, :varargs], :easy_code
|
|
18
|
+
base.attach_function :easy_setopt, :curl_easy_setopt, [:pointer, :easy_option, :varargs], :easy_code
|
|
23
19
|
base.instance_variable_set(:@blocking, true)
|
|
24
20
|
base.attach_function :easy_perform, :curl_easy_perform, [:pointer], :easy_code
|
|
25
21
|
base.attach_function :easy_strerror, :curl_easy_strerror, [:easy_code], :string
|
|
@@ -39,11 +35,7 @@ module Ethon
|
|
|
39
35
|
base.attach_function :multi_timeout, :curl_multi_timeout, [:pointer, :pointer], :multi_code
|
|
40
36
|
base.attach_function :multi_fdset, :curl_multi_fdset, [:pointer, Curl::FDSet.ptr, Curl::FDSet.ptr, Curl::FDSet.ptr, :pointer], :multi_code
|
|
41
37
|
base.attach_function :multi_strerror, :curl_multi_strerror, [:int], :string
|
|
42
|
-
base.attach_function :
|
|
43
|
-
base.attach_function :multi_setopt_string, :curl_multi_setopt, [:pointer, :multi_option, :string], :multi_code
|
|
44
|
-
base.attach_function :multi_setopt_long, :curl_multi_setopt, [:pointer, :multi_option, :long], :multi_code
|
|
45
|
-
base.attach_function :multi_setopt_callback, :curl_multi_setopt, [:pointer, :multi_option, :callback], :multi_code
|
|
46
|
-
base.attach_function :multi_setopt_off_t, :curl_multi_setopt, [:pointer, :multi_option, :int64], :multi_code
|
|
38
|
+
base.attach_function :multi_setopt, :curl_multi_setopt, [:pointer, :multi_option, :varargs], :multi_code
|
|
47
39
|
|
|
48
40
|
base.attach_function :version, :curl_version, [], :string
|
|
49
41
|
base.attach_function :version_info, :curl_version_info, [], Curl::VersionInfoData.ptr
|
data/lib/ethon/curls/infos.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Ethon
|
|
2
3
|
module Curls
|
|
3
4
|
|
|
@@ -106,7 +107,7 @@ module Ethon
|
|
|
106
107
|
def get_info_string(option, handle)
|
|
107
108
|
string_ptr = ::FFI::MemoryPointer.new(:pointer)
|
|
108
109
|
|
|
109
|
-
if easy_getinfo(handle, option, string_ptr) == :ok
|
|
110
|
+
if easy_getinfo(handle, option, :pointer, string_ptr) == :ok
|
|
110
111
|
ptr=string_ptr.read_pointer
|
|
111
112
|
ptr.null? ? nil : ptr.read_string
|
|
112
113
|
end
|
|
@@ -124,7 +125,7 @@ module Ethon
|
|
|
124
125
|
def get_info_long(option, handle)
|
|
125
126
|
long_ptr = ::FFI::MemoryPointer.new(:long)
|
|
126
127
|
|
|
127
|
-
if easy_getinfo(handle, option, long_ptr) == :ok
|
|
128
|
+
if easy_getinfo(handle, option, :pointer, long_ptr) == :ok
|
|
128
129
|
long_ptr.read_long
|
|
129
130
|
end
|
|
130
131
|
end
|
|
@@ -141,7 +142,7 @@ module Ethon
|
|
|
141
142
|
def get_info_double(option, handle)
|
|
142
143
|
double_ptr = ::FFI::MemoryPointer.new(:double)
|
|
143
144
|
|
|
144
|
-
if easy_getinfo(handle, option, double_ptr) == :ok
|
|
145
|
+
if easy_getinfo(handle, option, :pointer, double_ptr) == :ok
|
|
145
146
|
double_ptr.read_double
|
|
146
147
|
end
|
|
147
148
|
end
|
data/lib/ethon/curls/messages.rb
CHANGED
data/lib/ethon/curls/options.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Ethon
|
|
2
3
|
module Curls
|
|
3
4
|
|
|
@@ -7,8 +8,7 @@ module Ethon
|
|
|
7
8
|
|
|
8
9
|
OPTION_STRINGS = { :easy => 'easy_options', :multi => 'multi_options' }.freeze
|
|
9
10
|
FOPTION_STRINGS = { :easy => 'EASY_OPTIONS', :multi => 'MULTI_OPTIONS' }.freeze
|
|
10
|
-
|
|
11
|
-
FUNCS = Hash[*[:easy, :multi].zip([:easy, :multi].map { |t| Hash[*FTYPES.zip(FTYPES.map { |ft| "#{t}_setopt_#{ft}" }).flatten] }).flatten]
|
|
11
|
+
FUNCS = { :easy => 'easy_setopt', :multi => 'multi_setopt' }.freeze
|
|
12
12
|
# Sets appropriate option for easy, depending on value type.
|
|
13
13
|
def set_option(option, value, handle, type = :easy)
|
|
14
14
|
type = type.to_sym unless type.is_a?(Symbol)
|
|
@@ -20,22 +20,22 @@ module Ethon
|
|
|
20
20
|
when :none
|
|
21
21
|
return if value.nil?
|
|
22
22
|
value=1
|
|
23
|
-
|
|
23
|
+
va_type=:long
|
|
24
24
|
when :int
|
|
25
25
|
return if value.nil?
|
|
26
|
-
|
|
26
|
+
va_type=:long
|
|
27
27
|
value=value.to_i
|
|
28
28
|
when :bool
|
|
29
29
|
return if value.nil?
|
|
30
|
-
|
|
30
|
+
va_type=:long
|
|
31
31
|
value=(value&&value!=0) ? 1 : 0
|
|
32
32
|
when :time
|
|
33
33
|
return if value.nil?
|
|
34
|
-
|
|
34
|
+
va_type=:long
|
|
35
35
|
value=value.to_i
|
|
36
36
|
when :enum
|
|
37
37
|
return if value.nil?
|
|
38
|
-
|
|
38
|
+
va_type=:long
|
|
39
39
|
value = case value
|
|
40
40
|
when Symbol
|
|
41
41
|
opthash[option][:opts][value]
|
|
@@ -46,7 +46,7 @@ module Ethon
|
|
|
46
46
|
end.to_i
|
|
47
47
|
when :bitmask
|
|
48
48
|
return if value.nil?
|
|
49
|
-
|
|
49
|
+
va_type=:long
|
|
50
50
|
value = case value
|
|
51
51
|
when Symbol
|
|
52
52
|
opthash[option][:opts][value]
|
|
@@ -56,22 +56,22 @@ module Ethon
|
|
|
56
56
|
value
|
|
57
57
|
end.to_i
|
|
58
58
|
when :string
|
|
59
|
-
|
|
59
|
+
va_type=:string
|
|
60
60
|
value=value.to_s unless value.nil?
|
|
61
61
|
when :string_as_pointer
|
|
62
|
-
|
|
62
|
+
va_type = :pointer
|
|
63
63
|
s = ''
|
|
64
64
|
s = value.to_s unless value.nil?
|
|
65
65
|
value = FFI::MemoryPointer.new(:char, s.bytesize)
|
|
66
66
|
value.put_bytes(0, s)
|
|
67
67
|
when :string_escape_null
|
|
68
|
-
|
|
68
|
+
va_type=:string
|
|
69
69
|
value=Util.escape_zero_byte(value) unless value.nil?
|
|
70
70
|
when :ffipointer
|
|
71
|
-
|
|
71
|
+
va_type=:pointer
|
|
72
72
|
raise Errors::InvalidValue.new(option,value) unless value.nil? or value.is_a? FFI::Pointer
|
|
73
73
|
when :curl_slist
|
|
74
|
-
|
|
74
|
+
va_type=:pointer
|
|
75
75
|
raise Errors::InvalidValue.new(option,value) unless value.nil? or value.is_a? FFI::Pointer
|
|
76
76
|
when :buffer
|
|
77
77
|
raise NotImplementedError, "Ethon::Curls::Options option #{option} buffer type not implemented."
|
|
@@ -80,24 +80,26 @@ module Ethon
|
|
|
80
80
|
when :cbdata
|
|
81
81
|
raise NotImplementedError, "Ethon::Curls::Options option #{option} callback data type not implemented. Use Ruby closures."
|
|
82
82
|
when :callback
|
|
83
|
-
|
|
83
|
+
va_type=:callback
|
|
84
84
|
raise Errors::InvalidValue.new(option,value) unless value.nil? or value.is_a? Proc
|
|
85
85
|
when :debug_callback
|
|
86
|
-
|
|
86
|
+
va_type=:debug_callback
|
|
87
|
+
raise Errors::InvalidValue.new(option,value) unless value.nil? or value.is_a? Proc
|
|
88
|
+
when :progress_callback
|
|
89
|
+
va_type=:progress_callback
|
|
87
90
|
raise Errors::InvalidValue.new(option,value) unless value.nil? or value.is_a? Proc
|
|
88
91
|
when :off_t
|
|
89
92
|
return if value.nil?
|
|
90
|
-
|
|
93
|
+
va_type=:int64
|
|
91
94
|
value=value.to_i
|
|
92
95
|
end
|
|
93
96
|
|
|
94
|
-
if
|
|
95
|
-
bits=FFI.type_size(
|
|
96
|
-
bits=FFI.type_size(:int64)*8 if func==:off_t
|
|
97
|
+
if va_type==:long or va_type==:int64 then
|
|
98
|
+
bits=FFI.type_size(va_type)*8
|
|
97
99
|
tv=((value<0) ? value.abs-1 : value)
|
|
98
100
|
raise Errors::InvalidValue.new(option,value) unless tv<(1<<bits)
|
|
99
101
|
end
|
|
100
|
-
send(FUNCS[type]
|
|
102
|
+
send(FUNCS[type], handle, opthash[option][:opt], va_type, value)
|
|
101
103
|
end
|
|
102
104
|
|
|
103
105
|
OPTION_TYPE_BASE = {
|
|
@@ -136,6 +138,7 @@ module Ethon
|
|
|
136
138
|
:cbdata => :objectpoint,
|
|
137
139
|
:callback => :functionpoint,
|
|
138
140
|
:debug_callback => :functionpoint,
|
|
141
|
+
:progress_callback => :functionpoint,
|
|
139
142
|
:off_t => :off_t,
|
|
140
143
|
}
|
|
141
144
|
|
|
@@ -207,7 +210,7 @@ module Ethon
|
|
|
207
210
|
|
|
208
211
|
option :multi, :socketfunction, :callback, 1
|
|
209
212
|
option :multi, :socketdata, :cbdata, 2
|
|
210
|
-
option :multi, :pipelining, :
|
|
213
|
+
option :multi, :pipelining, :int, 3
|
|
211
214
|
option :multi, :timerfunction, :callback, 4
|
|
212
215
|
option :multi, :timerdata, :cbdata, 5
|
|
213
216
|
option :multi, :maxconnects, :int, 6
|
|
@@ -247,7 +250,8 @@ module Ethon
|
|
|
247
250
|
option :easy, :opensocketdata, :cbdata, 164
|
|
248
251
|
option :easy, :closesocketfunction, :callback, 208
|
|
249
252
|
option :easy, :closesocketdata, :cbdata, 209
|
|
250
|
-
option :easy, :
|
|
253
|
+
option :easy, :path_as_is, :bool, 234
|
|
254
|
+
option :easy, :progressfunction, :progress_callback, 56
|
|
251
255
|
option :easy, :progressdata, :cbdata, 57
|
|
252
256
|
option :easy, :headerfunction, :callback, 79
|
|
253
257
|
option :easy, :writeheader, :cbdata, 29
|
|
@@ -266,6 +270,8 @@ module Ethon
|
|
|
266
270
|
option :easy, :chunk_data, :cbdata, 201
|
|
267
271
|
option :easy, :fnmatch_function, :callback, 200
|
|
268
272
|
option :easy, :fnmatch_data, :cbdata, 202
|
|
273
|
+
option :easy, :xferinfofunction, :progress_callback, 219
|
|
274
|
+
option :easy, :xferinfodata, :cbdata, 57
|
|
269
275
|
## ERROR OPTIONS
|
|
270
276
|
option :easy, :errorbuffer, :buffer, 10, 256
|
|
271
277
|
option :easy, :stderr, :dontuse_object, 37
|
|
@@ -286,6 +292,9 @@ module Ethon
|
|
|
286
292
|
option :easy, :localportrange, :int, 140
|
|
287
293
|
option :easy, :dns_cache_timeout, :int, 92
|
|
288
294
|
option :easy, :dns_use_global_cache, :bool, 91 # Obsolete
|
|
295
|
+
option :easy, :dns_interface, :string, 221
|
|
296
|
+
option :easy, :dns_local_ip4, :string, 222
|
|
297
|
+
option :easy, :dns_shuffle_addresses, :bool, 275
|
|
289
298
|
option :easy, :buffersize, :int, 98
|
|
290
299
|
option :easy, :port, :int, 3
|
|
291
300
|
option :easy, :tcp_nodelay, :bool, 121
|
|
@@ -335,7 +344,7 @@ module Ethon
|
|
|
335
344
|
option :easy, :cookiesession, :bool, 96
|
|
336
345
|
option :easy, :cookielist, :string, 135
|
|
337
346
|
option :easy, :httpget, :bool, 80
|
|
338
|
-
option :easy, :http_version, :enum, 84, [:none, :httpv1_0, :httpv1_1]
|
|
347
|
+
option :easy, :http_version, :enum, 84, [:none, :httpv1_0, :httpv1_1, :httpv2_0]
|
|
339
348
|
option :easy, :ignore_content_length, :bool, 136
|
|
340
349
|
option :easy, :http_content_decoding, :bool, 158
|
|
341
350
|
option :easy, :http_transfer_decoding, :bool, 157
|
|
@@ -411,6 +420,7 @@ module Ethon
|
|
|
411
420
|
option :easy, :dns_servers, :string, 211
|
|
412
421
|
option :easy, :accepttimeout_ms, :int, 212
|
|
413
422
|
option :easy, :unix_socket_path, :string, 231
|
|
423
|
+
option :easy, :pipewait, :bool, 237
|
|
414
424
|
option_alias :easy, :unix_socket_path, :unix_socket
|
|
415
425
|
## SSL and SECURITY OPTIONS
|
|
416
426
|
option :easy, :sslcert, :string, 25
|
|
@@ -438,6 +448,8 @@ module Ethon
|
|
|
438
448
|
option :easy, :krblevel, :string, 63
|
|
439
449
|
option_alias :easy, :krblevel, :krb4level
|
|
440
450
|
option :easy, :gssapi_delegation, :bitmask, 210, [:none, :policy_flag, :flag]
|
|
451
|
+
option :easy, :pinnedpublickey, :string, 230
|
|
452
|
+
option_alias :easy, :pinnedpublickey, :pinned_public_key
|
|
441
453
|
## SSH OPTIONS
|
|
442
454
|
option :easy, :ssh_auth_types, :bitmask, 151, [:none, :publickey, :password, :host, :keyboard, :agent, {:any => [:all], :default => [:any]}]
|
|
443
455
|
option :easy, :ssh_host_public_key_md5, :string, 162
|