ethon 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +16 -1
- data/lib/ethon/curl.rb +24 -537
- data/lib/ethon/curls/auth_types.rb +25 -0
- data/lib/ethon/curls/classes.rb +42 -0
- data/lib/ethon/curls/codes.rb +122 -0
- data/lib/ethon/curls/constants.rb +48 -0
- data/lib/ethon/curls/form_options.rb +36 -0
- data/lib/ethon/curls/functions.rb +46 -0
- data/lib/ethon/curls/infos.rb +154 -0
- data/lib/ethon/curls/messages.rb +18 -0
- data/lib/ethon/curls/options.rb +174 -0
- data/lib/ethon/curls/proxy_types.rb +25 -0
- data/lib/ethon/curls/settings.rb +7 -0
- data/lib/ethon/curls/ssl_versions.rb +23 -0
- data/lib/ethon/easies/callbacks.rb +3 -1
- data/lib/ethon/easies/form.rb +3 -33
- data/lib/ethon/easies/operations.rb +1 -0
- data/lib/ethon/easies/params.rb +2 -31
- data/lib/ethon/easies/queryable.rb +100 -0
- data/lib/ethon/easies/util.rb +3 -49
- data/lib/ethon/easy.rb +24 -6
- data/lib/ethon/loggable.rb +58 -0
- data/lib/ethon/multies/operations.rb +4 -0
- data/lib/ethon/version.rb +1 -1
- data/lib/ethon.rb +2 -1
- metadata +17 -5
- data/lib/ethon/extensions/string.rb +0 -40
- data/lib/ethon/extensions.rb +0 -1
@@ -0,0 +1,122 @@
|
|
1
|
+
module Ethon
|
2
|
+
module Curls # :nodoc:
|
3
|
+
|
4
|
+
# This module contains all easy and
|
5
|
+
# multi return codes.
|
6
|
+
module Codes
|
7
|
+
|
8
|
+
# Libcurl error codes, refer
|
9
|
+
# https://github.com/bagder/curl/blob/master/include/curl/curl.h for details
|
10
|
+
def easy_codes
|
11
|
+
[
|
12
|
+
:ok,
|
13
|
+
:unsupported_protocol,
|
14
|
+
:failed_init,
|
15
|
+
:url_malformat,
|
16
|
+
:not_built_in,
|
17
|
+
:couldnt_resolve_proxy,
|
18
|
+
:couldnt_resolve_host,
|
19
|
+
:couldnt_connect,
|
20
|
+
:ftp_weird_server_reply,
|
21
|
+
:remote_access_denied,
|
22
|
+
:ftp_accept_failed,
|
23
|
+
:ftp_weird_pass_reply,
|
24
|
+
:ftp_accept_timeout,
|
25
|
+
:ftp_weird_pasv_reply,
|
26
|
+
:ftp_weird_227_format,
|
27
|
+
:ftp_cant_get_host,
|
28
|
+
:obsolete16,
|
29
|
+
:ftp_couldnt_set_type,
|
30
|
+
:partial_file,
|
31
|
+
:ftp_couldnt_retr_file,
|
32
|
+
:obsolete20,
|
33
|
+
:quote_error,
|
34
|
+
:http_returned_error,
|
35
|
+
:write_error,
|
36
|
+
:obsolete24,
|
37
|
+
:upload_failed,
|
38
|
+
:read_error,
|
39
|
+
:out_of_memory,
|
40
|
+
:operation_timedout,
|
41
|
+
:obsolete29,
|
42
|
+
:ftp_port_failed,
|
43
|
+
:ftp_couldnt_use_rest,
|
44
|
+
:obsolete32,
|
45
|
+
:range_error,
|
46
|
+
:http_post_error,
|
47
|
+
:ssl_connect_error,
|
48
|
+
:bad_download_resume,
|
49
|
+
:file_couldnt_read_file,
|
50
|
+
:ldap_cannot_bind,
|
51
|
+
:ldap_search_failed,
|
52
|
+
:obsolete40,
|
53
|
+
:function_not_found,
|
54
|
+
:aborted_by_callback,
|
55
|
+
:bad_function_argument,
|
56
|
+
:obsolete44,
|
57
|
+
:interface_failed,
|
58
|
+
:obsolete46,
|
59
|
+
:too_many_redirects ,
|
60
|
+
:unknown_option,
|
61
|
+
:telnet_option_syntax ,
|
62
|
+
:obsolete50,
|
63
|
+
:peer_failed_verification,
|
64
|
+
:got_nothing,
|
65
|
+
:ssl_engine_notfound,
|
66
|
+
:ssl_engine_setfailed,
|
67
|
+
:send_error,
|
68
|
+
:recv_error,
|
69
|
+
:obsolete57,
|
70
|
+
:ssl_certproblem,
|
71
|
+
:ssl_cipher,
|
72
|
+
:ssl_cacert,
|
73
|
+
:bad_content_encoding,
|
74
|
+
:ldap_invalid_url,
|
75
|
+
:filesize_exceeded,
|
76
|
+
:use_ssl_failed,
|
77
|
+
:send_fail_rewind,
|
78
|
+
:ssl_engine_initfailed,
|
79
|
+
:login_denied,
|
80
|
+
:tftp_notfound,
|
81
|
+
:tftp_perm,
|
82
|
+
:remote_disk_full,
|
83
|
+
:tftp_illegal,
|
84
|
+
:tftp_unknownid,
|
85
|
+
:remote_file_exists,
|
86
|
+
:tftp_nosuchuser,
|
87
|
+
:conv_failed,
|
88
|
+
:conv_reqd,
|
89
|
+
:ssl_cacert_badfile,
|
90
|
+
:remote_file_not_found,
|
91
|
+
:ssh,
|
92
|
+
:ssl_shutdown_failed,
|
93
|
+
:again,
|
94
|
+
:ssl_crl_badfile,
|
95
|
+
:ssl_issuer_error,
|
96
|
+
:ftp_pret_failed,
|
97
|
+
:rtsp_cseq_error,
|
98
|
+
:rtsp_session_error,
|
99
|
+
:ftp_bad_file_list,
|
100
|
+
:chunk_failed,
|
101
|
+
:last
|
102
|
+
]
|
103
|
+
end
|
104
|
+
|
105
|
+
# Curl-Multi socket error codes, refer
|
106
|
+
# https://github.com/bagder/curl/blob/master/include/curl/multi.h for details
|
107
|
+
def multi_codes
|
108
|
+
[
|
109
|
+
:call_multi_perform, -1,
|
110
|
+
:ok,
|
111
|
+
:bad_handle,
|
112
|
+
:bad_easy_handle,
|
113
|
+
:out_of_memory,
|
114
|
+
:internal_error,
|
115
|
+
:bad_socket,
|
116
|
+
:unknown_option,
|
117
|
+
:last
|
118
|
+
]
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Ethon
|
2
|
+
module Curl
|
3
|
+
# :nodoc:
|
4
|
+
VERSION_NOW = 3
|
5
|
+
|
6
|
+
# Flag. Initialize SSL.
|
7
|
+
GLOBAL_SSL = 0x01
|
8
|
+
# Flag. Initialize win32 socket libraries.
|
9
|
+
GLOBAL_WIN32 = 0x02
|
10
|
+
# Flag. Initialize everything possible.
|
11
|
+
GLOBAL_ALL = (GLOBAL_SSL | GLOBAL_WIN32)
|
12
|
+
# Flag. Initialize everything by default.
|
13
|
+
GLOBAL_DEFAULT = GLOBAL_ALL
|
14
|
+
|
15
|
+
# :nodoc:
|
16
|
+
EasyCode = enum(:easy_code, easy_codes)
|
17
|
+
# :nodoc:
|
18
|
+
MultiCode = enum(:multi_code, multi_codes)
|
19
|
+
|
20
|
+
# :nodoc:
|
21
|
+
Option = enum(:option, options.to_a.flatten)
|
22
|
+
# :nodoc:
|
23
|
+
OptionType = enum(option_types.to_a.flatten)
|
24
|
+
|
25
|
+
# :nodoc:
|
26
|
+
InfoType = enum(info_types.to_a.flatten)
|
27
|
+
|
28
|
+
# Info details, refer
|
29
|
+
# https://github.com/bagder/curl/blob/master/src/tool_writeout.c#L66 for details
|
30
|
+
Info = enum(:info, infos.to_a.flatten)
|
31
|
+
|
32
|
+
# Form options, used by FormAdd for temporary storage, refer
|
33
|
+
# https://github.com/bagder/curl/blob/master/lib/formdata.h#L51 for details
|
34
|
+
FormOption = enum(:form_option, form_options)
|
35
|
+
|
36
|
+
# :nodoc:
|
37
|
+
Auth = enum(auth_types.to_a.flatten)
|
38
|
+
|
39
|
+
# :nodoc:
|
40
|
+
Proxy = enum(proxy_types.to_a.flatten)
|
41
|
+
|
42
|
+
# :nodoc:
|
43
|
+
SSLVersion = enum(ssl_versions.to_a.flatten)
|
44
|
+
|
45
|
+
# :nodoc:
|
46
|
+
MsgCode = enum(:msg_code, msg_codes)
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Ethon
|
2
|
+
module Curls
|
3
|
+
|
4
|
+
# This module contains the available options for forms.
|
5
|
+
module FormOptions
|
6
|
+
|
7
|
+
# Form options, used by FormAdd for temporary storage, refer
|
8
|
+
# https://github.com/bagder/curl/blob/master/lib/formdata.h#L51 for details
|
9
|
+
def form_options
|
10
|
+
[
|
11
|
+
:none,
|
12
|
+
:copyname,
|
13
|
+
:ptrname,
|
14
|
+
:namelength,
|
15
|
+
:copycontents,
|
16
|
+
:ptrcontents,
|
17
|
+
:contentslength,
|
18
|
+
:filecontent,
|
19
|
+
:array,
|
20
|
+
:obsolete,
|
21
|
+
:file,
|
22
|
+
:buffer,
|
23
|
+
:bufferptr,
|
24
|
+
:bufferlength,
|
25
|
+
:contenttype,
|
26
|
+
:contentheader,
|
27
|
+
:filename,
|
28
|
+
:end,
|
29
|
+
:obsolete2,
|
30
|
+
:stream,
|
31
|
+
:last
|
32
|
+
]
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Ethon
|
2
|
+
module Curls
|
3
|
+
|
4
|
+
# This module contains the functions to be attached in order to work with
|
5
|
+
# libcurl.
|
6
|
+
module Functions
|
7
|
+
|
8
|
+
# :nodoc:
|
9
|
+
def self.extended(base)
|
10
|
+
base.attach_function :global_init, :curl_global_init, [:long], :int
|
11
|
+
|
12
|
+
base.attach_function :easy_init, :curl_easy_init, [], :pointer
|
13
|
+
base.attach_function :easy_cleanup, :curl_easy_cleanup, [:pointer], :void
|
14
|
+
base.attach_function :easy_getinfo, :curl_easy_getinfo, [:pointer, :info, :pointer], :easy_code
|
15
|
+
base.attach_function :easy_setopt, :curl_easy_setopt, [:pointer, :option, :pointer], :easy_code
|
16
|
+
base.attach_function :easy_setopt_ffipointer, :curl_easy_setopt, [:pointer, :option, :pointer], :easy_code
|
17
|
+
base.attach_function :easy_setopt_string, :curl_easy_setopt, [:pointer, :option, :string], :easy_code
|
18
|
+
base.attach_function :easy_setopt_long, :curl_easy_setopt, [:pointer, :option, :long], :easy_code
|
19
|
+
base.attach_function :easy_setopt_fixnum, :curl_easy_setopt, [:pointer, :option, :long], :easy_code
|
20
|
+
base.attach_function :easy_setopt_callback, :curl_easy_setopt, [:pointer, :option, :callback], :easy_code
|
21
|
+
base.attach_function :easy_setopt_proc, :curl_easy_setopt, [:pointer, :option, :callback], :easy_code
|
22
|
+
base.attach_function :easy_perform, :curl_easy_perform, [:pointer], :easy_code
|
23
|
+
base.attach_function :easy_strerror, :curl_easy_strerror, [:int], :string
|
24
|
+
base.attach_function :easy_escape, :curl_easy_escape, [:pointer, :pointer, :int], :string
|
25
|
+
base.attach_function :easy_reset, :curl_easy_reset, [:pointer], :void
|
26
|
+
|
27
|
+
base.attach_function :formadd, :curl_formadd, [:pointer, :pointer, :varargs], :int
|
28
|
+
|
29
|
+
base.attach_function :multi_init, :curl_multi_init, [], :pointer
|
30
|
+
base.attach_function :multi_cleanup, :curl_multi_cleanup, [:pointer], :void
|
31
|
+
base.attach_function :multi_add_handle, :curl_multi_add_handle, [:pointer, :pointer], :multi_code
|
32
|
+
base.attach_function :multi_remove_handle, :curl_multi_remove_handle, [:pointer, :pointer], :multi_code
|
33
|
+
base.attach_function :multi_info_read, :curl_multi_info_read, [:pointer, :pointer], Curl::Msg.ptr
|
34
|
+
base.attach_function :multi_perform, :curl_multi_perform, [:pointer, :pointer], :multi_code
|
35
|
+
base.attach_function :multi_timeout, :curl_multi_timeout, [:pointer, :pointer], :multi_code
|
36
|
+
base.attach_function :multi_fdset, :curl_multi_fdset, [:pointer, Curl::FDSet.ptr, Curl::FDSet.ptr, Curl::FDSet.ptr, :pointer], :multi_code
|
37
|
+
base.attach_function :multi_strerror, :curl_multi_strerror, [:int], :string
|
38
|
+
|
39
|
+
base.attach_function :version, :curl_version, [], :string
|
40
|
+
base.attach_function :slist_append, :curl_slist_append, [:pointer, :string], :pointer
|
41
|
+
base.attach_function :slist_free_all, :curl_slist_free_all, [:pointer], :void
|
42
|
+
base.attach_function :select, [:int, Curl::FDSet.ptr, Curl::FDSet.ptr, Curl::FDSet.ptr, Curl::Timeval.ptr], :int
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
module Ethon
|
2
|
+
module Curls
|
3
|
+
|
4
|
+
# This module contains logic for the available informations
|
5
|
+
# on an easy, eg.: connect_time.
|
6
|
+
module Infos
|
7
|
+
|
8
|
+
# Return info types.
|
9
|
+
#
|
10
|
+
# @example Return info types.
|
11
|
+
# Ethon::Curl.info_types
|
12
|
+
#
|
13
|
+
# @return [ Hash ] The info types.
|
14
|
+
def info_types
|
15
|
+
{
|
16
|
+
:string =>0x100000,
|
17
|
+
:long => 0x200000,
|
18
|
+
:double =>0x300000,
|
19
|
+
:slist => 0x400000
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
# Return Info details, refer
|
24
|
+
# https://github.com/bagder/curl/blob/master/src/tool_writeout.c#L66 for details
|
25
|
+
#
|
26
|
+
# @example Return infos.
|
27
|
+
# Ethon::Curl.infos
|
28
|
+
#
|
29
|
+
# @return [ Hash ] The infos.
|
30
|
+
def infos
|
31
|
+
{
|
32
|
+
:effective_url => info_types[:string] + 1,
|
33
|
+
:response_code => info_types[:long] + 2,
|
34
|
+
:total_time => info_types[:double] + 3,
|
35
|
+
:namelookup_time => info_types[:double] + 4,
|
36
|
+
:connect_time => info_types[:double] + 5,
|
37
|
+
:pretransfer_time => info_types[:double] + 6,
|
38
|
+
:size_upload => info_types[:double] + 7,
|
39
|
+
:size_download => info_types[:double] + 8,
|
40
|
+
:speed_download => info_types[:double] + 9,
|
41
|
+
:speed_upload => info_types[:double] + 10,
|
42
|
+
:header_size => info_types[:long] + 11,
|
43
|
+
:request_size => info_types[:long] + 12,
|
44
|
+
:ssl_verifyresult => info_types[:long] + 13,
|
45
|
+
:filetime => info_types[:long] + 14,
|
46
|
+
:content_length_download =>info_types[:double] + 15,
|
47
|
+
:content_length_upload => info_types[:double] + 16,
|
48
|
+
:starttransfer_time => info_types[:double] + 17,
|
49
|
+
:content_type => info_types[:string] + 18,
|
50
|
+
:redirect_time => info_types[:double] + 19,
|
51
|
+
:redirect_count => info_types[:long] + 20,
|
52
|
+
:private => info_types[:string] + 21,
|
53
|
+
:http_connectcode => info_types[:long] + 22,
|
54
|
+
:httpauth_avail => info_types[:long] + 23,
|
55
|
+
:proxyauth_avail => info_types[:long] + 24,
|
56
|
+
:os_errno => info_types[:long] + 25,
|
57
|
+
:num_connects => info_types[:long] + 26,
|
58
|
+
:ssl_engines => info_types[:slist] + 27,
|
59
|
+
:cookielist => info_types[:slist] + 28,
|
60
|
+
:lastsocket => info_types[:long] + 29,
|
61
|
+
:ftp_entry_path => info_types[:string] + 30,
|
62
|
+
:redirect_url => info_types[:string] + 31,
|
63
|
+
:primary_ip => info_types[:string] + 32,
|
64
|
+
:appconnect_time => info_types[:double] + 33,
|
65
|
+
:certinfo => info_types[:slist] + 34,
|
66
|
+
:condition_unmet => info_types[:long] + 35,
|
67
|
+
:rtsp_session_id => info_types[:string] + 36,
|
68
|
+
:rtsp_client_cseq => info_types[:long] + 37,
|
69
|
+
:rtsp_server_cseq => info_types[:long] + 38,
|
70
|
+
:rtsp_cseq_recv => info_types[:long] + 39,
|
71
|
+
:primary_port => info_types[:long] + 40,
|
72
|
+
:local_ip => info_types[:string] + 41,
|
73
|
+
:local_port => info_types[:long] + 42,
|
74
|
+
:last =>42
|
75
|
+
}
|
76
|
+
end
|
77
|
+
|
78
|
+
# Return info as string.
|
79
|
+
#
|
80
|
+
# @example Return info.
|
81
|
+
# Curl.get_info_string(:primary_ip, easy)
|
82
|
+
#
|
83
|
+
# @param [ Symbol ] option The option name.
|
84
|
+
# @param [ ::FFI::Pointer ] handle The easy handle.
|
85
|
+
#
|
86
|
+
# @return [ String ] The info.
|
87
|
+
def get_info_string(option, handle)
|
88
|
+
if easy_getinfo(handle, option, string_ptr) == :ok
|
89
|
+
string_ptr.read_pointer.read_string
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# Return info as integer.
|
94
|
+
#
|
95
|
+
# @example Return info.
|
96
|
+
# Curl.get_info_long(:response_code, easy)
|
97
|
+
#
|
98
|
+
# @param [ Symbol ] option The option name.
|
99
|
+
# @param [ ::FFI::Pointer ] handle The easy handle.
|
100
|
+
#
|
101
|
+
# @return [ Integer ] The info.
|
102
|
+
def get_info_long(option, handle)
|
103
|
+
if easy_getinfo(handle, option, long_ptr) == :ok
|
104
|
+
long_ptr.read_long
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# Return info as float
|
109
|
+
#
|
110
|
+
# @example Return info.
|
111
|
+
# Curl.get_info_double(:response_code, easy)
|
112
|
+
#
|
113
|
+
# @param [ Symbol ] option The option name.
|
114
|
+
# @param [ ::FFI::Pointer ] handle The easy handle.
|
115
|
+
#
|
116
|
+
# @return [ Float ] The info.
|
117
|
+
def get_info_double(option, handle)
|
118
|
+
if easy_getinfo(handle, option, double_ptr) == :ok
|
119
|
+
double_ptr.read_double
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
# Return a string pointer.
|
124
|
+
#
|
125
|
+
# @example Return a string pointer.
|
126
|
+
# Curl.string_ptr
|
127
|
+
#
|
128
|
+
# @return [ ::FFI::Pointer ] The string pointer.
|
129
|
+
def string_ptr
|
130
|
+
@string_ptr ||= ::FFI::MemoryPointer.new(:pointer)
|
131
|
+
end
|
132
|
+
|
133
|
+
# Return a long pointer.
|
134
|
+
#
|
135
|
+
# @example Return a long pointer.
|
136
|
+
# Curl.long_ptr
|
137
|
+
#
|
138
|
+
# @return [ ::FFI::Pointer ] The long pointer.
|
139
|
+
def long_ptr
|
140
|
+
@long_ptr ||= ::FFI::MemoryPointer.new(:long)
|
141
|
+
end
|
142
|
+
|
143
|
+
# Return a double pointer.
|
144
|
+
#
|
145
|
+
# @example Return a double pointer.
|
146
|
+
# Curl.double_ptr
|
147
|
+
#
|
148
|
+
# @return [ ::FFI::Pointer ] The double pointer.
|
149
|
+
def double_ptr
|
150
|
+
@double_ptr ||= ::FFI::MemoryPointer.new(:double)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Ethon
|
2
|
+
module Curls
|
3
|
+
|
4
|
+
# This module contains available message codes.
|
5
|
+
module Messages
|
6
|
+
|
7
|
+
# Return message codes.
|
8
|
+
#
|
9
|
+
# @example Return message codes.
|
10
|
+
# Ethon::Curl.msg_codes
|
11
|
+
#
|
12
|
+
# @return [ Array ] The messages codes.
|
13
|
+
def msg_codes
|
14
|
+
[:none, :done, :last]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,174 @@
|
|
1
|
+
module Ethon
|
2
|
+
module Curls
|
3
|
+
|
4
|
+
# This module contains logic for setting options on
|
5
|
+
# easy or multi interface.
|
6
|
+
module Options
|
7
|
+
|
8
|
+
# Sets appropriate option for easy, depending on value type.
|
9
|
+
def set_option(option, value, handle)
|
10
|
+
return unless value
|
11
|
+
|
12
|
+
name = "easy_setopt_#{value.class.to_s.downcase.delete(':')}"
|
13
|
+
send(name, handle, option, value)
|
14
|
+
end
|
15
|
+
|
16
|
+
# :nodoc:
|
17
|
+
def option_types
|
18
|
+
{
|
19
|
+
:long => 0,
|
20
|
+
:object_point => 10000,
|
21
|
+
:function_point => 20000,
|
22
|
+
:off_t => 30000
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
# Curl options, refer
|
27
|
+
# https://github.com/bagder/curl/blob/master/src/tool_cfgable.h for details
|
28
|
+
def options
|
29
|
+
{
|
30
|
+
:file => option_types[:object_point] + 1,
|
31
|
+
:writedata => option_types[:object_point] + 1,
|
32
|
+
:url => option_types[:object_point] + 2,
|
33
|
+
:port => option_types[:long] + 3,
|
34
|
+
:proxy => option_types[:object_point] + 4,
|
35
|
+
:userpwd => option_types[:object_point] + 5,
|
36
|
+
:proxyuserpwd => option_types[:object_point] + 6,
|
37
|
+
:range => option_types[:object_point] + 7,
|
38
|
+
:infile => option_types[:object_point] + 9,
|
39
|
+
:readdata => option_types[:object_point] + 9,
|
40
|
+
:errorbuffer => option_types[:object_point] + 10,
|
41
|
+
:writefunction => option_types[:function_point] + 11,
|
42
|
+
:readfunction => option_types[:function_point] + 12,
|
43
|
+
:timeout => option_types[:long] + 13,
|
44
|
+
:infilesize => option_types[:long] + 14,
|
45
|
+
:postfields => option_types[:object_point] + 15,
|
46
|
+
:referer => option_types[:object_point] + 16,
|
47
|
+
:ftpport => option_types[:object_point] + 17,
|
48
|
+
:useragent => option_types[:object_point] + 18,
|
49
|
+
:low_speed_time => option_types[:long] + 20,
|
50
|
+
:resume_from => option_types[:long] + 21,
|
51
|
+
:cookie => option_types[:object_point] + 22,
|
52
|
+
:httpheader => option_types[:object_point] + 23,
|
53
|
+
:httppost => option_types[:object_point] + 24,
|
54
|
+
:sslcert => option_types[:object_point] + 25,
|
55
|
+
:sslcertpasswd => option_types[:object_point] + 26,
|
56
|
+
:sslkeypasswd => option_types[:object_point] + 26,
|
57
|
+
:crlf => option_types[:long] + 27,
|
58
|
+
:quote => option_types[:object_point] + 28,
|
59
|
+
:writeheader => option_types[:object_point] + 29,
|
60
|
+
:headerdata => option_types[:object_point] + 29,
|
61
|
+
:cookiefile => option_types[:object_point] + 31,
|
62
|
+
:sslversion => option_types[:long] + 32,
|
63
|
+
:timecondition => option_types[:long] + 33,
|
64
|
+
:timevalue => option_types[:long] + 34,
|
65
|
+
:customrequest => option_types[:object_point] + 36,
|
66
|
+
:stderr => option_types[:object_point] + 37,
|
67
|
+
:postquote => option_types[:object_point] + 39,
|
68
|
+
:writeinfo => option_types[:object_point] + 40,
|
69
|
+
:verbose => option_types[:long] + 41,
|
70
|
+
:header => option_types[:long] + 42,
|
71
|
+
:noprogress => option_types[:long] + 43,
|
72
|
+
:nobody => option_types[:long] + 44,
|
73
|
+
:failonerror => option_types[:long] + 45,
|
74
|
+
:upload => option_types[:long] + 46,
|
75
|
+
:post => option_types[:long] + 47,
|
76
|
+
:ftplistonly => option_types[:long] + 48,
|
77
|
+
:ftpappend => option_types[:long] + 50,
|
78
|
+
:netrc => option_types[:long] + 51,
|
79
|
+
:followlocation => option_types[:long] + 52,
|
80
|
+
:transfertext => option_types[:long] + 53,
|
81
|
+
:put => option_types[:long] + 54,
|
82
|
+
:progressfunction => option_types[:function_point] + 56,
|
83
|
+
:progressdata => option_types[:object_point] + 57,
|
84
|
+
:autoreferer => option_types[:long] + 58,
|
85
|
+
:proxyport => option_types[:long] + 59,
|
86
|
+
:postfieldsize => option_types[:long] + 60,
|
87
|
+
:httpproxytunnel => option_types[:long] + 61,
|
88
|
+
:interface => option_types[:object_point] + 62,
|
89
|
+
:ssl_verifypeer => option_types[:long] + 64,
|
90
|
+
:cainfo => option_types[:object_point] + 65,
|
91
|
+
:maxredirs => option_types[:long] + 68,
|
92
|
+
:filetime => option_types[:long] + 69,
|
93
|
+
:telnetoptions => option_types[:object_point] + 70,
|
94
|
+
:maxconnects => option_types[:long] + 71,
|
95
|
+
:closepolicy => option_types[:long] + 72,
|
96
|
+
:fresh_connect => option_types[:long] + 74,
|
97
|
+
:forbid_reuse => option_types[:long] + 75,
|
98
|
+
:random_file => option_types[:object_point] + 76,
|
99
|
+
:egdsocket => option_types[:object_point] + 77,
|
100
|
+
:connecttimeout => option_types[:long] + 78,
|
101
|
+
:headerfunction => option_types[:function_point] + 79,
|
102
|
+
:httpget => option_types[:long] + 80,
|
103
|
+
:ssl_verifyhost => option_types[:long] + 81,
|
104
|
+
:cookiejar => option_types[:object_point] + 82,
|
105
|
+
:ssl_cipher_list => option_types[:object_point] + 83,
|
106
|
+
:http_version => option_types[:long] + 84,
|
107
|
+
:ftp_use_epsv => option_types[:long] + 85,
|
108
|
+
:sslcerttype => option_types[:object_point] + 86,
|
109
|
+
:sslkey => option_types[:object_point] + 87,
|
110
|
+
:sslkeytype => option_types[:object_point] + 88,
|
111
|
+
:sslengine => option_types[:object_point] + 89,
|
112
|
+
:sslengine_default => option_types[:long] + 90,
|
113
|
+
:dns_use_global_cache => option_types[:long] + 91,
|
114
|
+
:dns_cache_timeout => option_types[:long] + 92,
|
115
|
+
:prequote => option_types[:object_point] + 93,
|
116
|
+
:debugfunction => option_types[:function_point] + 94,
|
117
|
+
:debugdata => option_types[:object_point] + 95,
|
118
|
+
:cookiesession => option_types[:long] + 96,
|
119
|
+
:capath => option_types[:object_point] + 97,
|
120
|
+
:buffersize => option_types[:long] + 98,
|
121
|
+
:nosignal => option_types[:long] + 99,
|
122
|
+
:share => option_types[:object_point] + 100,
|
123
|
+
:proxytype => option_types[:long] + 101,
|
124
|
+
:encoding => option_types[:object_point] + 102,
|
125
|
+
:private => option_types[:object_point] + 103,
|
126
|
+
:unrestricted_auth => option_types[:long] + 105,
|
127
|
+
:ftp_use_eprt => option_types[:long] + 106,
|
128
|
+
:httpauth => option_types[:long] + 107,
|
129
|
+
:ssl_ctx_function => option_types[:function_point] + 108,
|
130
|
+
:ssl_ctx_data => option_types[:object_point] + 109,
|
131
|
+
:ftp_create_missing_dirs => option_types[:long] + 110,
|
132
|
+
:proxyauth => option_types[:long] + 111,
|
133
|
+
:ipresolve => option_types[:long] + 113,
|
134
|
+
:maxfilesize => option_types[:long] + 114,
|
135
|
+
:infilesize_large => option_types[:off_t] + 115,
|
136
|
+
:resume_from_large => option_types[:off_t] + 116,
|
137
|
+
:maxfilesize_large => option_types[:off_t] + 117,
|
138
|
+
:netrc_file => option_types[:object_point] + 118,
|
139
|
+
:ftp_ssl => option_types[:long] + 119,
|
140
|
+
:postfieldsize_large => option_types[:off_t] + 120,
|
141
|
+
:tcp_nodelay => option_types[:long] + 121,
|
142
|
+
:ftpsslauth => option_types[:long] + 129,
|
143
|
+
:ioctlfunction => option_types[:function_point] + 130,
|
144
|
+
:ioctldata => option_types[:object_point] + 131,
|
145
|
+
:ftp_account => option_types[:object_point] + 134,
|
146
|
+
:cookielist => option_types[:object_point] + 135,
|
147
|
+
:ignore_content_length => option_types[:long] + 136,
|
148
|
+
:ftp_skip_pasv_ip => option_types[:long] + 137,
|
149
|
+
:ftp_filemethod => option_types[:long] + 138,
|
150
|
+
:localport => option_types[:long] + 139,
|
151
|
+
:localportrange => option_types[:long] + 140,
|
152
|
+
:connect_only => option_types[:long] + 141,
|
153
|
+
:conv_from_network_function => option_types[:function_point] + 142,
|
154
|
+
:conv_to_network_function => option_types[:function_point] + 143,
|
155
|
+
:max_send_speed_large => option_types[:off_t] + 145,
|
156
|
+
:max_recv_speed_large => option_types[:off_t] + 146,
|
157
|
+
:ftp_alternative_to_user => option_types[:object_point] + 147,
|
158
|
+
:sockoptfunction => option_types[:function_point] + 148,
|
159
|
+
:sockoptdata => option_types[:object_point] + 149,
|
160
|
+
:ssl_sessionid_cache => option_types[:long] + 150,
|
161
|
+
:ssh_auth_types => option_types[:long] + 151,
|
162
|
+
:ssh_public_keyfile => option_types[:object_point] + 152,
|
163
|
+
:ssh_private_keyfile => option_types[:object_point] + 153,
|
164
|
+
:ftp_ssl_ccc => option_types[:long] + 154,
|
165
|
+
:timeout_ms => option_types[:long] + 155,
|
166
|
+
:connecttimeout_ms => option_types[:long] + 156,
|
167
|
+
:http_transfer_decoding => option_types[:long] + 157,
|
168
|
+
:http_content_decoding => option_types[:long] + 158,
|
169
|
+
:copypostfields => option_types[:object_point] + 165
|
170
|
+
}
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Ethon
|
2
|
+
module Curls
|
3
|
+
|
4
|
+
# This module contains the available proxy types.
|
5
|
+
module ProxyTypes
|
6
|
+
|
7
|
+
# Return proxy types.
|
8
|
+
#
|
9
|
+
# @example Return proxy types.
|
10
|
+
# Ethon::Curl.proxy_types
|
11
|
+
#
|
12
|
+
# @return [ Hash ] The proxy_types.
|
13
|
+
def proxy_types
|
14
|
+
{
|
15
|
+
:http => 0,
|
16
|
+
:http_1_0 => 1,
|
17
|
+
:socks4 => 4,
|
18
|
+
:socks5 => 5,
|
19
|
+
:socks4a => 6,
|
20
|
+
:socks5_hostname =>7
|
21
|
+
}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Ethon
|
2
|
+
module Curls
|
3
|
+
|
4
|
+
# This module contains the ssl version.
|
5
|
+
module SslVersions
|
6
|
+
|
7
|
+
# Return the ssl versions.
|
8
|
+
#
|
9
|
+
# @example Retur the ssl versions.
|
10
|
+
# Ethon::Curl.ssl_versions
|
11
|
+
#
|
12
|
+
# @return [ Hash ] The versions.
|
13
|
+
def ssl_versions
|
14
|
+
{
|
15
|
+
:default =>0,
|
16
|
+
:tlsv1 => 1,
|
17
|
+
:sslv2 => 2,
|
18
|
+
:sslv3 => 3
|
19
|
+
}
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -63,7 +63,9 @@ module Ethon
|
|
63
63
|
left = body.bytesize - @request_body_read
|
64
64
|
size = left if size > left
|
65
65
|
if size > 0
|
66
|
-
stream.write_string(
|
66
|
+
stream.write_string(
|
67
|
+
body.respond_to?(:byteslice) ? body.byteslice(@request_body_read, size) : body[@request_body_read, size], size
|
68
|
+
)
|
67
69
|
@request_body_read += size
|
68
70
|
end
|
69
71
|
size
|