curb 0.8.8 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b76360d30b92902398314af1674ec02db1ad9f74
4
- data.tar.gz: 05ae393053e953fa773dcca22b50d18252c90244
3
+ metadata.gz: 05b2aed0c904477e11533547620bc7e29a83d4fa
4
+ data.tar.gz: f4dd037db2c1018f2fe5c5a281e49df1179c129b
5
5
  SHA512:
6
- metadata.gz: e8777897444b5ad6dad48f0a56d78d9826d96a4e3cd3cd53d318c3f733d0242f8b7ece9600c6aa06f53125c37f4f7c144bd82da62f9619a0a94b560f1546617b
7
- data.tar.gz: 77a42a5ad6b26233a3c7917c945d694d560474c54eab71023439ad840ef5af1fd0f5037d6e4dcae680273785e8870ab952d9dab6955c11b127533e2ef60b0adc
6
+ metadata.gz: 2a604239fe8d5808d8ab3da005e1124a4bf1350038a50147e7dc27fcb4021cdfd14ed0d99a3a962c99f27f96ee81915dd520bccdcf69ac022cdafe56e1106460
7
+ data.tar.gz: 3f40806f07ea74cbafa75b3b346bb37cc03a6960064950c8e95bbf39b2c71283d09091acb27036fe057718387275700e5f0bdbc13c43ccfdd68c81729353ead3
@@ -1,7 +1,6 @@
1
1
  # Curb - Libcurl bindings for Ruby
2
2
 
3
- * [rubyforge rdoc](http://curb.rubyforge.org/)
4
- * [rubyforge project](http://rubyforge.org/projects/curb)
3
+ * [rubydoc rdoc](http://www.rubydoc.info/github/taf2/curb/)
5
4
  * [github project](http://github.com/taf2/curb/tree/master)
6
5
 
7
6
  Curb (probably CUrl-RuBy or something) provides Ruby-language bindings for the
data/ext/curb.c CHANGED
@@ -219,6 +219,22 @@ static VALUE ruby_curl_conv_q(VALUE mod) {
219
219
  #endif
220
220
  }
221
221
 
222
+ /*
223
+ * call-seq:
224
+ * Curl.http2? => true or false
225
+ *
226
+ * Returns true if the installed libcurl was built with support for HTTP2.
227
+ * For libcurl versions < 7.33.0, always returns false.
228
+ */
229
+ static VALUE ruby_curl_http2_q(VALUE mod) {
230
+ #ifdef HAVE_CURL_VERSION_HTTP2
231
+ curl_version_info_data *ver = curl_version_info(CURLVERSION_NOW);
232
+ return((ver->features & CURL_VERSION_HTTP2) ? Qtrue : Qfalse);
233
+ #else
234
+ return Qfalse;
235
+ #endif
236
+ }
237
+
222
238
  void Init_curb_core() {
223
239
  // TODO we need to call curl_global_cleanup at exit!
224
240
  curl_version_info_data *ver;
@@ -970,7 +986,13 @@ void Init_curb_core() {
970
986
  CURB_DEFINE(CURLGSSAPI_DELEGATION_POLICY_FLAG);
971
987
  #endif
972
988
 
989
+ #if HAVE_CURLOPT_UNIX_SOCKET_PATH
990
+ CURB_DEFINE(CURLOPT_UNIX_SOCKET_PATH);
991
+ #endif
973
992
 
993
+ #if LIBCURL_VERSION_NUM >= 0x072100 /* 7.33.0 */
994
+ rb_define_const(mCurl, "HTTP_2_0", LONG2NUM(CURL_HTTP_VERSION_2_0));
995
+ #endif
974
996
  rb_define_const(mCurl, "HTTP_1_1", LONG2NUM(CURL_HTTP_VERSION_1_1));
975
997
  rb_define_const(mCurl, "HTTP_1_0", LONG2NUM(CURL_HTTP_VERSION_1_0));
976
998
  rb_define_const(mCurl, "HTTP_NONE", LONG2NUM(CURL_HTTP_VERSION_NONE));
@@ -988,6 +1010,7 @@ void Init_curb_core() {
988
1010
  rb_define_singleton_method(mCurl, "idn?", ruby_curl_idn_q, 0);
989
1011
  rb_define_singleton_method(mCurl, "sspi?", ruby_curl_sspi_q, 0);
990
1012
  rb_define_singleton_method(mCurl, "conv?", ruby_curl_conv_q, 0);
1013
+ rb_define_singleton_method(mCurl, "http2?", ruby_curl_http2_q, 0);
991
1014
 
992
1015
  init_curb_errors();
993
1016
  init_curb_easy();
data/ext/curb.h CHANGED
@@ -20,11 +20,11 @@
20
20
  #include "curb_macros.h"
21
21
 
22
22
  // These should be managed from the Rake 'release' task.
23
- #define CURB_VERSION "0.8.8"
24
- #define CURB_VER_NUM 808
23
+ #define CURB_VERSION "0.9.0"
24
+ #define CURB_VER_NUM 900
25
25
  #define CURB_VER_MAJ 0
26
- #define CURB_VER_MIN 8
27
- #define CURB_VER_MIC 8
26
+ #define CURB_VER_MIN 0
27
+ #define CURB_VER_MIC 0
28
28
  #define CURB_VER_PATCH 0
29
29
 
30
30
 
@@ -255,7 +255,9 @@ static void ruby_curl_easy_zero(ruby_curl_easy *rbce) {
255
255
  rbce->proxy_auth_types = 0;
256
256
  rbce->max_redirs = -1;
257
257
  rbce->timeout = 0;
258
+ rbce->timeout_ms = 0;
258
259
  rbce->connect_timeout = 0;
260
+ rbce->connect_timeout_ms = 0;
259
261
  rbce->dns_cache_timeout = 60;
260
262
  rbce->ftp_response_timeout = 0;
261
263
  rbce->low_speed_limit = 0;
@@ -1116,6 +1118,33 @@ static VALUE ruby_curl_easy_timeout_get(VALUE self, VALUE timeout) {
1116
1118
  CURB_IMMED_GETTER(ruby_curl_easy, timeout, 0);
1117
1119
  }
1118
1120
 
1121
+ /*
1122
+ * call-seq:
1123
+ * easy.timeout_ms = fixnum or nil => fixnum or nil
1124
+ *
1125
+ * Set the maximum time in milliseconds that you allow the libcurl transfer
1126
+ * operation to take. Normally, name lookups can take a considerable time
1127
+ * and limiting operations to less than a few minutes risk aborting
1128
+ * perfectly normal operations.
1129
+ *
1130
+ * Set to nil (or zero) to disable timeout (it will then only timeout
1131
+ * on the system's internal timeouts).
1132
+ */
1133
+ static VALUE ruby_curl_easy_timeout_ms_set(VALUE self, VALUE timeout_ms) {
1134
+ CURB_IMMED_SETTER(ruby_curl_easy, timeout_ms, 0);
1135
+ }
1136
+
1137
+ /*
1138
+ * call-seq:
1139
+ * easy.timeout_ms => fixnum or nil
1140
+ *
1141
+ * Obtain the maximum time in milliseconds that you allow the libcurl transfer
1142
+ * operation to take.
1143
+ */
1144
+ static VALUE ruby_curl_easy_timeout_ms_get(VALUE self, VALUE timeout_ms) {
1145
+ CURB_IMMED_GETTER(ruby_curl_easy, timeout_ms, 0);
1146
+ }
1147
+
1119
1148
  /*
1120
1149
  * call-seq:
1121
1150
  * easy.connect_timeout = fixnum or nil => fixnum or nil
@@ -1142,6 +1171,32 @@ static VALUE ruby_curl_easy_connect_timeout_get(VALUE self, VALUE connect_timeou
1142
1171
  CURB_IMMED_GETTER(ruby_curl_easy, connect_timeout, 0);
1143
1172
  }
1144
1173
 
1174
+ /*
1175
+ * call-seq:
1176
+ * easy.connect_timeout_ms = fixnum or nil => fixnum or nil
1177
+ *
1178
+ * Set the maximum time in milliseconds that you allow the connection to the
1179
+ * server to take. This only limits the connection phase, once it has
1180
+ * connected, this option is of no more use.
1181
+ *
1182
+ * Set to nil (or zero) to disable connection timeout (it will then only
1183
+ * timeout on the system's internal timeouts).
1184
+ */
1185
+ static VALUE ruby_curl_easy_connect_timeout_ms_set(VALUE self, VALUE connect_timeout_ms) {
1186
+ CURB_IMMED_SETTER(ruby_curl_easy, connect_timeout_ms, 0);
1187
+ }
1188
+
1189
+ /*
1190
+ * call-seq:
1191
+ * easy.connect_timeout_ms => fixnum or nil
1192
+ *
1193
+ * Obtain the maximum time in milliseconds that you allow the connection to the
1194
+ * server to take.
1195
+ */
1196
+ static VALUE ruby_curl_easy_connect_timeout_ms_get(VALUE self, VALUE connect_timeout_ms) {
1197
+ CURB_IMMED_GETTER(ruby_curl_easy, connect_timeout_ms, 0);
1198
+ }
1199
+
1145
1200
  /*
1146
1201
  * call-seq:
1147
1202
  * easy.dns_cache_timeout = fixnum or nil => fixnum or nil
@@ -2052,7 +2107,9 @@ VALUE ruby_curl_easy_setup(ruby_curl_easy *rbce) {
2052
2107
  curl_easy_setopt(curl, CURLOPT_UNRESTRICTED_AUTH, rbce->unrestricted_auth);
2053
2108
 
2054
2109
  curl_easy_setopt(curl, CURLOPT_TIMEOUT, rbce->timeout);
2110
+ curl_easy_setopt(curl, CURLOPT_TIMEOUT_MS, rbce->timeout_ms);
2055
2111
  curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, rbce->connect_timeout);
2112
+ curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, rbce->connect_timeout_ms);
2056
2113
  curl_easy_setopt(curl, CURLOPT_DNS_CACHE_TIMEOUT, rbce->dns_cache_timeout);
2057
2114
 
2058
2115
  curl_easy_setopt(curl, CURLOPT_IGNORE_CONTENT_LENGTH, rbce->ignore_content_length);
@@ -2103,11 +2160,12 @@ VALUE ruby_curl_easy_setup(ruby_curl_easy *rbce) {
2103
2160
  #endif
2104
2161
  }
2105
2162
 
2163
+ /*
2164
+ * NOTE: we used to set CURLAUTH_ANY but see: http://curl.haxx.se/mail/lib-2015-06/0033.html
2165
+ */
2106
2166
  if (rbce->http_auth_types > 0) {
2107
2167
  #if LIBCURL_VERSION_NUM >= 0x070a06
2108
2168
  curl_easy_setopt(curl, CURLOPT_HTTPAUTH, rbce->http_auth_types);
2109
- } else {
2110
- curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
2111
2169
  #else
2112
2170
  rb_warn("Installed libcurl is too old to support http_auth_types");
2113
2171
  #endif
@@ -2116,8 +2174,6 @@ VALUE ruby_curl_easy_setup(ruby_curl_easy *rbce) {
2116
2174
  if (rbce->proxy_auth_types > 0) {
2117
2175
  #if LIBCURL_VERSION_NUM >= 0x070a07
2118
2176
  curl_easy_setopt(curl, CURLOPT_PROXYAUTH, rbce->proxy_auth_types);
2119
- } else {
2120
- curl_easy_setopt(curl, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
2121
2177
  #else
2122
2178
  rb_warn("Installed libcurl is too old to support proxy_auth_types");
2123
2179
  #endif
@@ -3082,7 +3138,7 @@ static VALUE ruby_curl_easy_last_result(VALUE self) {
3082
3138
  * call-seq:
3083
3139
  * easy.setopt Fixnum, value => value
3084
3140
  *
3085
- * Iniital access to libcurl curl_easy_setopt
3141
+ * Initial access to libcurl curl_easy_setopt
3086
3142
  */
3087
3143
  static VALUE ruby_curl_easy_set_opt(VALUE self, VALUE opt, VALUE val) {
3088
3144
  ruby_curl_easy *rbce;
@@ -3125,13 +3181,6 @@ static VALUE ruby_curl_easy_set_opt(VALUE self, VALUE opt, VALUE val) {
3125
3181
  case CURLOPT_NOPROGRESS:
3126
3182
  case CURLOPT_NOSIGNAL:
3127
3183
  case CURLOPT_HTTPGET:
3128
- break;
3129
- case CURLOPT_POST: {
3130
- curl_easy_setopt(rbce->curl, CURLOPT_POST, rb_type(val) == T_TRUE);
3131
- } break;
3132
- case CURLOPT_POSTFIELDS: {
3133
- curl_easy_setopt(rbce->curl, CURLOPT_POSTFIELDS, NIL_P(val) ? NULL : StringValueCStr(val));
3134
- } break;
3135
3184
  case CURLOPT_NOBODY: {
3136
3185
  int type = rb_type(val);
3137
3186
  VALUE value;
@@ -3144,6 +3193,12 @@ static VALUE ruby_curl_easy_set_opt(VALUE self, VALUE opt, VALUE val) {
3144
3193
  }
3145
3194
  curl_easy_setopt(rbce->curl, option, FIX2INT(value));
3146
3195
  } break;
3196
+ case CURLOPT_POST: {
3197
+ curl_easy_setopt(rbce->curl, CURLOPT_POST, rb_type(val) == T_TRUE);
3198
+ } break;
3199
+ case CURLOPT_POSTFIELDS: {
3200
+ curl_easy_setopt(rbce->curl, CURLOPT_POSTFIELDS, NIL_P(val) ? NULL : StringValueCStr(val));
3201
+ } break;
3147
3202
  case CURLOPT_USERPWD: {
3148
3203
  VALUE userpwd = val;
3149
3204
  CURB_OBJECT_HSETTER(ruby_curl_easy, userpwd);
@@ -3180,6 +3235,11 @@ static VALUE ruby_curl_easy_set_opt(VALUE self, VALUE opt, VALUE val) {
3180
3235
  case CURLOPT_GSSAPI_DELEGATION: {
3181
3236
  curl_easy_setopt(rbce->curl, CURLOPT_GSSAPI_DELEGATION, FIX2LONG(val));
3182
3237
  } break;
3238
+ #endif
3239
+ #if HAVE_CURLOPT_UNIX_SOCKET_PATH
3240
+ case CURLOPT_UNIX_SOCKET_PATH: {
3241
+ curl_easy_setopt(rbce->curl, CURLOPT_UNIX_SOCKET_PATH, StringValueCStr(val));
3242
+ } break;
3183
3243
  #endif
3184
3244
  default:
3185
3245
  rb_raise(rb_eTypeError, "Curb unsupported option");
@@ -3356,8 +3416,12 @@ void init_curb_easy() {
3356
3416
  rb_define_method(cCurlEasy, "max_redirects", ruby_curl_easy_max_redirects_get, 0);
3357
3417
  rb_define_method(cCurlEasy, "timeout=", ruby_curl_easy_timeout_set, 1);
3358
3418
  rb_define_method(cCurlEasy, "timeout", ruby_curl_easy_timeout_get, 0);
3419
+ rb_define_method(cCurlEasy, "timeout_ms=", ruby_curl_easy_timeout_ms_set, 1);
3420
+ rb_define_method(cCurlEasy, "timeout_ms", ruby_curl_easy_timeout_ms_get, 0);
3359
3421
  rb_define_method(cCurlEasy, "connect_timeout=", ruby_curl_easy_connect_timeout_set, 1);
3360
3422
  rb_define_method(cCurlEasy, "connect_timeout", ruby_curl_easy_connect_timeout_get, 0);
3423
+ rb_define_method(cCurlEasy, "connect_timeout_ms=", ruby_curl_easy_connect_timeout_ms_set, 1);
3424
+ rb_define_method(cCurlEasy, "connect_timeout_ms", ruby_curl_easy_connect_timeout_ms_get, 0);
3361
3425
  rb_define_method(cCurlEasy, "dns_cache_timeout=", ruby_curl_easy_dns_cache_timeout_set, 1);
3362
3426
  rb_define_method(cCurlEasy, "dns_cache_timeout", ruby_curl_easy_dns_cache_timeout_get, 0);
3363
3427
  rb_define_method(cCurlEasy, "ftp_response_timeout=", ruby_curl_easy_ftp_response_timeout_set, 1);
@@ -48,7 +48,9 @@ typedef struct {
48
48
  long proxy_auth_types;
49
49
  long max_redirs;
50
50
  unsigned long timeout;
51
+ unsigned long timeout_ms;
51
52
  unsigned long connect_timeout;
53
+ unsigned long connect_timeout_ms;
52
54
  long dns_cache_timeout;
53
55
  unsigned long ftp_response_timeout;
54
56
  long low_speed_limit;
@@ -67,12 +67,14 @@ rb_hash_clear_i(VALUE key, VALUE value, VALUE dummy) {
67
67
  }
68
68
 
69
69
  static void curl_multi_free(ruby_curl_multi *rbcm) {
70
+ VALUE hash = rbcm->requests;
70
71
 
71
- if (rbcm && !rbcm->requests == Qnil && rb_type(rbcm->requests) == T_HASH && RHASH_SIZE(rbcm->requests) > 0) {
72
+ if (rbcm && !NIL_P(hash) && rb_type(hash) == T_HASH && RHASH_SIZE(hash) > 0) {
72
73
 
73
- rb_hash_foreach( rbcm->requests, (int (*)())curl_multi_flush_easy, (VALUE)rbcm );
74
+ rb_hash_foreach(hash, (int (*)())curl_multi_flush_easy, (VALUE)rbcm);
75
+ rb_hash_foreach(hash, rb_hash_clear_i, 0);
76
+ /* rb_hash_clear(rbcm->requests); */
74
77
 
75
- rb_hash_foreach(rbcm->requests, rb_hash_clear_i, 0); //rb_hash_clear(rbcm->requests);
76
78
  rbcm->requests = Qnil;
77
79
  }
78
80
  curl_multi_cleanup(rbcm->handle);
@@ -225,12 +227,19 @@ static VALUE ruby_curl_multi_pipeline(VALUE self, VALUE onoff) {
225
227
  */
226
228
  VALUE ruby_curl_multi_add(VALUE self, VALUE easy) {
227
229
  CURLMcode mcode;
230
+ VALUE r;
228
231
  ruby_curl_easy *rbce;
229
232
  ruby_curl_multi *rbcm;
230
233
 
231
234
  Data_Get_Struct(self, ruby_curl_multi, rbcm);
232
235
  Data_Get_Struct(easy, ruby_curl_easy, rbce);
233
236
 
237
+ // check if this curl handle has been added before adding again
238
+ r = rb_hash_aref(rbcm->requests, INT2NUM((int)rbce->curl));
239
+ if ( r != Qnil ) {
240
+ return Qnil;
241
+ }
242
+
234
243
  /* setup the easy handle */
235
244
  ruby_curl_easy_setup( rbce );
236
245
 
@@ -245,7 +254,7 @@ VALUE ruby_curl_multi_add(VALUE self, VALUE easy) {
245
254
  * If this number is not correct, the next call to curl_multi_perform will correct it. */
246
255
  rbcm->running++;
247
256
 
248
- rb_hash_aset( rbcm->requests, easy, easy );
257
+ rb_hash_aset( rbcm->requests, INT2NUM((int)rbce->curl), easy );
249
258
 
250
259
  return self;
251
260
  }
@@ -280,6 +289,12 @@ static void rb_curl_multi_remove(ruby_curl_multi *rbcm, VALUE easy) {
280
289
 
281
290
  Data_Get_Struct(easy, ruby_curl_easy, rbce);
282
291
 
292
+ // check if this curl handle has been added before removing
293
+ r = rb_hash_aref(rbcm->requests, INT2NUM((int)rbce->curl));
294
+ if ( r == Qnil ) {
295
+ return;
296
+ }
297
+
283
298
  result = curl_multi_remove_handle(rbcm->handle, rbce->curl);
284
299
  if (result != 0) {
285
300
  raise_curl_multi_error_exception(result);
@@ -290,7 +305,7 @@ static void rb_curl_multi_remove(ruby_curl_multi *rbcm, VALUE easy) {
290
305
  ruby_curl_easy_cleanup( easy, rbce );
291
306
 
292
307
  // active should equal INT2FIX(RHASH(rbcm->requests)->tbl->num_entries)
293
- r = rb_hash_delete( rbcm->requests, easy );
308
+ r = rb_hash_delete( rbcm->requests, INT2NUM((int)rbce->curl) );
294
309
  if( r != easy || r == Qnil ) {
295
310
  rb_warn("Possibly lost track of Curl::Easy VALUE, it may not be reclaimed by GC");
296
311
  }
@@ -406,8 +421,6 @@ static void rb_curl_mutli_handle_complete(VALUE self, CURL *easy_handle, int res
406
421
 
407
422
  if (val == Qfalse) {
408
423
  rb_warn("uncaught exception from callback");
409
- // exception was raised?
410
- //fprintf(stderr, "exception raised from callback\n");
411
424
  }
412
425
 
413
426
  }
@@ -78,6 +78,7 @@ have_constant "curl_version_largefile"
78
78
  have_constant "curl_version_idn"
79
79
  have_constant "curl_version_sspi"
80
80
  have_constant "curl_version_conv"
81
+ have_constant "curl_version_http2"
81
82
  have_constant "curlproxy_http"
82
83
  have_constant "curlproxy_socks4"
83
84
  have_constant "curlproxy_socks4a"
@@ -360,6 +361,9 @@ have_constant "curlgssapi_delegation_flag"
360
361
 
361
362
  have_constant "CURLM_ADDED_ALREADY"
362
363
 
364
+ # added in 7.40.0
365
+ have_constant "curlopt_unix_socket_path"
366
+
363
367
  if try_compile('int main() { return 0; }','-Wall')
364
368
  $CFLAGS << ' -Wall'
365
369
  end
@@ -48,7 +48,7 @@ module Curl
48
48
 
49
49
  def self.urlalize(url, params={})
50
50
  query_str = params.map {|k,v| "#{URI.escape(k.to_s)}=#{CGI.escape(v.to_s)}" }.join('&')
51
- if url.match(/\?/)
51
+ if url.match(/\?/) && query_str.size > 0
52
52
  "#{url}&#{query_str}"
53
53
  elsif query_str.size > 0
54
54
  "#{url}?#{query_str}"
@@ -66,6 +66,7 @@ module Curl
66
66
  self.multi = Curl::Multi.new if self.multi.nil?
67
67
  self.multi.add self
68
68
  ret = self.multi.perform
69
+ self.multi.remove self
69
70
 
70
71
  if self.last_result != 0 && self.on_failure.nil?
71
72
  error = Curl::Easy.error(self.last_result)
@@ -100,6 +101,7 @@ module Curl
100
101
  # call-seq:
101
102
  #
102
103
  # easy = Curl::Easy.new("url")
104
+ # easy.version = Curl::HTTP_2_0
103
105
  # easy.version = Curl::HTTP_1_1
104
106
  # easy.version = Curl::HTTP_1_0
105
107
  # easy.version = Curl::HTTP_NONE
@@ -3,7 +3,7 @@ module Curl
3
3
  class Multi
4
4
  class << self
5
5
  # call-seq:
6
- # Curl::Multi.get('url1','url2','url3','url4','url5', :follow_location => true) do|easy|
6
+ # Curl::Multi.get(['url1','url2','url3','url4','url5'], :follow_location => true) do|easy|
7
7
  # easy
8
8
  # end
9
9
  #
@@ -92,7 +92,7 @@ module Curl
92
92
 
93
93
  # configure the multi handle
94
94
  multi_options.each { |k,v| m.send("#{k}=", v) }
95
- callbacks = [:on_progress,:on_debug,:on_failure,:on_success,:on_body,:on_header]
95
+ callbacks = [:on_progress,:on_debug,:on_failure,:on_success,:on_redirect,:on_body,:on_header]
96
96
 
97
97
  add_free_handle = proc do|conf, easy|
98
98
  c = conf.dup # avoid being destructive to input
@@ -135,9 +135,9 @@ module Curl
135
135
  #
136
136
  c.each { |k,v| easy.send("#{k}=",v) }
137
137
 
138
- easy.on_complete {|curl,code|
138
+ easy.on_complete {|curl|
139
139
  free_handles << curl
140
- blk.call(curl,code,method) if blk
140
+ blk.call(curl,curl.response_code,method) if blk
141
141
  }
142
142
  m.add(easy)
143
143
  end
@@ -341,7 +341,19 @@ class TestCurbCurlEasy < Test::Unit::TestCase
341
341
  c.timeout = nil
342
342
  assert_nil c.timeout
343
343
  end
344
-
344
+
345
+ def test_timeout_ms_01
346
+ c = Curl::Easy.new($TEST_URL)
347
+
348
+ assert_nil c.timeout_ms
349
+
350
+ c.timeout_ms = 100
351
+ assert_equal 100, c.timeout_ms
352
+
353
+ c.timeout_ms = nil
354
+ assert_nil c.timeout_ms
355
+ end
356
+
345
357
  def test_connect_timeout_01
346
358
  c = Curl::Easy.new($TEST_URL)
347
359
 
@@ -353,7 +365,19 @@ class TestCurbCurlEasy < Test::Unit::TestCase
353
365
  c.connect_timeout = nil
354
366
  assert_nil c.connect_timeout
355
367
  end
356
-
368
+
369
+ def test_connect_timeout_ms_01
370
+ c = Curl::Easy.new($TEST_URL)
371
+
372
+ assert_nil c.connect_timeout_ms
373
+
374
+ c.connect_timeout_ms = 100
375
+ assert_equal 100, c.connect_timeout_ms
376
+
377
+ c.connect_timeout_ms = nil
378
+ assert_nil c.connect_timeout_ms
379
+ end
380
+
357
381
  def test_ftp_response_timeout_01
358
382
  c = Curl::Easy.new($TEST_URL)
359
383
 
@@ -13,7 +13,7 @@ class TestCurbTimeouts < Test::Unit::TestCase
13
13
  elapsed = Time.now - start
14
14
  assert elapsed > 2
15
15
  end
16
-
16
+
17
17
  def test_overall_timeout_on_dead_transfer
18
18
  curl = Curl::Easy.new(wait_url(2))
19
19
  curl.timeout = 1
@@ -21,7 +21,15 @@ class TestCurbTimeouts < Test::Unit::TestCase
21
21
  curl.http_get
22
22
  end
23
23
  end
24
-
24
+
25
+ def test_overall_timeout_ms_on_dead_transfer
26
+ curl = Curl::Easy.new(wait_url(2))
27
+ curl.timeout_ms = 1000
28
+ assert_raise(Curl::Err::TimeoutError) do
29
+ curl.http_get
30
+ end
31
+ end
32
+
25
33
  def test_clearing_timeout
26
34
  curl = Curl::Easy.new(wait_url(2))
27
35
  curl.timeout = 1
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: curb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.8
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ross Bamford
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-04-08 00:00:00.000000000 Z
12
+ date: 2015-12-14 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Curb (probably CUrl-RuBy or something) provides Ruby-language bindings
15
15
  for the libcurl(3), a fully-featured client-side URL transfer library. cURL and
@@ -91,7 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
91
  version: '0'
92
92
  requirements: []
93
93
  rubyforge_project: curb
94
- rubygems_version: 2.4.5
94
+ rubygems_version: 2.4.3
95
95
  signing_key:
96
96
  specification_version: 4
97
97
  summary: Ruby libcurl bindings