ghazel-curb 0.5.9.1 → 0.6.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ext/curb.h +5 -5
- data/ext/curb_easy.c +3 -8
- data/ext/curb_easy.h +1 -1
- data/ext/curb_multi.c +13 -17
- data/tests/tc_curl_multi.rb +15 -4
- metadata +2 -2
data/ext/curb.h
CHANGED
@@ -20,12 +20,12 @@
|
|
20
20
|
#include "curb_macros.h"
|
21
21
|
|
22
22
|
// These should be managed from the Rake 'release' task.
|
23
|
-
#define CURB_VERSION "0.
|
24
|
-
#define CURB_VER_NUM
|
23
|
+
#define CURB_VERSION "0.6.1.0"
|
24
|
+
#define CURB_VER_NUM 610
|
25
25
|
#define CURB_VER_MAJ 0
|
26
|
-
#define CURB_VER_MIN
|
27
|
-
#define CURB_VER_MIC
|
28
|
-
#define CURB_VER_PATCH
|
26
|
+
#define CURB_VER_MIN 6
|
27
|
+
#define CURB_VER_MIC 1
|
28
|
+
#define CURB_VER_PATCH 0
|
29
29
|
|
30
30
|
|
31
31
|
// Maybe not yet defined in Ruby
|
data/ext/curb_easy.c
CHANGED
@@ -162,10 +162,6 @@ void curl_easy_mark(ruby_curl_easy *rbce) {
|
|
162
162
|
rb_gc_mark(rbce->bodybuf);
|
163
163
|
rb_gc_mark(rbce->headerbuf);
|
164
164
|
|
165
|
-
if( rbce->self != Qnil ) {
|
166
|
-
rb_gc_mark(rbce->self);
|
167
|
-
}
|
168
|
-
|
169
165
|
if( rbce->upload != Qnil ) {
|
170
166
|
rb_gc_mark(rbce->upload);
|
171
167
|
}
|
@@ -263,13 +259,12 @@ static VALUE ruby_curl_easy_new(int argc, VALUE *argv, VALUE klass) {
|
|
263
259
|
rbce->headerbuf = Qnil;
|
264
260
|
rbce->curl_headers = NULL;
|
265
261
|
|
266
|
-
rbce->self = Qnil;
|
267
262
|
rbce->upload = Qnil;
|
268
263
|
|
269
264
|
new_curl = Data_Wrap_Struct(klass, curl_easy_mark, curl_easy_free, rbce);
|
270
265
|
|
271
|
-
/* set the
|
272
|
-
ecode = curl_easy_setopt(rbce->curl, CURLOPT_PRIVATE, (void*)
|
266
|
+
/* set the new_curl pointer to the curl handle */
|
267
|
+
ecode = curl_easy_setopt(rbce->curl, CURLOPT_PRIVATE, (void*)new_curl);
|
273
268
|
if (ecode != CURLE_OK) {
|
274
269
|
raise_curl_easy_error_exception(ecode);
|
275
270
|
}
|
@@ -2636,7 +2631,7 @@ static VALUE ruby_curl_easy_escape(VALUE self, VALUE svalue) {
|
|
2636
2631
|
|
2637
2632
|
/*
|
2638
2633
|
* call-seq:
|
2639
|
-
* easy.unescape("some
|
2634
|
+
* easy.unescape("some%20text") => "some text"
|
2640
2635
|
*
|
2641
2636
|
* Convert the given URL encoded input string to a "plain string" and return
|
2642
2637
|
* the result. All input characters that are URL encoded (%XX where XX is a
|
data/ext/curb_easy.h
CHANGED
@@ -86,7 +86,7 @@ typedef struct {
|
|
86
86
|
VALUE headerbuf;
|
87
87
|
struct curl_slist *curl_headers;
|
88
88
|
|
89
|
-
VALUE self; /* pointer to self, used by multi interface */
|
89
|
+
// VALUE self; /* pointer to self, used by multi interface */
|
90
90
|
VALUE upload; /* pointer to an active upload otherwise Qnil */
|
91
91
|
|
92
92
|
int last_result; /* last result code from multi loop */
|
data/ext/curb_multi.c
CHANGED
@@ -199,9 +199,6 @@ VALUE ruby_curl_multi_add(VALUE self, VALUE easy) {
|
|
199
199
|
raise_curl_multi_error_exception(mcode);
|
200
200
|
}
|
201
201
|
|
202
|
-
/* save a pointer to self */
|
203
|
-
rbce->self = easy;
|
204
|
-
|
205
202
|
/* setup the easy handle */
|
206
203
|
ruby_curl_easy_setup( rbce, &(rbce->bodybuf), &(rbce->headerbuf), &(rbce->curl_headers) );
|
207
204
|
|
@@ -263,11 +260,11 @@ static void rb_curl_multi_remove(ruby_curl_multi *rbcm, VALUE easy) {
|
|
263
260
|
// active should equal INT2FIX(RHASH(rbcm->requests)->tbl->num_entries)
|
264
261
|
r = rb_hash_delete( rbcm->requests, easy );
|
265
262
|
if( r != easy || r == Qnil ) {
|
266
|
-
|
263
|
+
rb_warn("Possibly lost tack of Curl::Easy VALUE, it may not be reclaimed by GC");
|
267
264
|
}
|
268
265
|
}
|
269
266
|
|
270
|
-
|
267
|
+
/* Hash#foreach callback for ruby_curl_multi_cancel */
|
271
268
|
static int ruby_curl_multi_cancel_callback(VALUE key, VALUE value, ruby_curl_multi *rbcm) {
|
272
269
|
rb_curl_multi_remove(rbcm, value);
|
273
270
|
|
@@ -287,16 +284,19 @@ static VALUE ruby_curl_multi_cancel(VALUE self) {
|
|
287
284
|
|
288
285
|
rb_hash_foreach( rbcm->requests, ruby_curl_multi_cancel_callback, (VALUE)rbcm );
|
289
286
|
|
290
|
-
|
287
|
+
/* for chaining */
|
291
288
|
return self;
|
292
289
|
}
|
293
290
|
|
294
291
|
static void rb_curl_mutli_handle_complete(VALUE self, CURL *easy_handle, int result) {
|
295
292
|
|
296
293
|
long response_code = -1;
|
294
|
+
VALUE easy;
|
297
295
|
ruby_curl_easy *rbce = NULL;
|
298
|
-
|
299
|
-
CURLcode ecode = curl_easy_getinfo(easy_handle, CURLINFO_PRIVATE, (char**)&
|
296
|
+
|
297
|
+
CURLcode ecode = curl_easy_getinfo(easy_handle, CURLINFO_PRIVATE, (char**)&easy);
|
298
|
+
|
299
|
+
Data_Get_Struct(easy, ruby_curl_easy, rbce);
|
300
300
|
|
301
301
|
if (ecode != 0) {
|
302
302
|
raise_curl_easy_error_exception(ecode);
|
@@ -304,31 +304,27 @@ static void rb_curl_mutli_handle_complete(VALUE self, CURL *easy_handle, int res
|
|
304
304
|
|
305
305
|
rbce->last_result = result; /* save the last easy result code */
|
306
306
|
|
307
|
-
ruby_curl_multi_remove( self,
|
307
|
+
ruby_curl_multi_remove( self, easy );
|
308
308
|
|
309
309
|
if (rbce->complete_proc != Qnil) {
|
310
|
-
rb_funcall( rbce->complete_proc, idCall, 1,
|
310
|
+
rb_funcall( rbce->complete_proc, idCall, 1, easy );
|
311
311
|
}
|
312
312
|
|
313
313
|
curl_easy_getinfo(rbce->curl, CURLINFO_RESPONSE_CODE, &response_code);
|
314
314
|
|
315
|
-
ref = rbce->self;
|
316
|
-
/* break reference */
|
317
|
-
rbce->self = Qnil;
|
318
|
-
|
319
315
|
if (result != 0) {
|
320
316
|
if (rbce->failure_proc != Qnil) {
|
321
|
-
rb_funcall( rbce->failure_proc, idCall, 2,
|
317
|
+
rb_funcall( rbce->failure_proc, idCall, 2, easy, rb_curl_easy_error(result) );
|
322
318
|
}
|
323
319
|
}
|
324
320
|
else if (rbce->success_proc != Qnil &&
|
325
321
|
((response_code >= 200 && response_code < 300) || response_code == 0)) {
|
326
322
|
/* NOTE: we allow response_code == 0, in the case of non http requests e.g. reading from disk */
|
327
|
-
rb_funcall( rbce->success_proc, idCall, 1,
|
323
|
+
rb_funcall( rbce->success_proc, idCall, 1, easy );
|
328
324
|
}
|
329
325
|
else if (rbce->failure_proc != Qnil &&
|
330
326
|
(response_code >= 300 && response_code <= 999)) {
|
331
|
-
rb_funcall( rbce->failure_proc, idCall, 2,
|
327
|
+
rb_funcall( rbce->failure_proc, idCall, 2, easy, rb_curl_easy_error(result) );
|
332
328
|
}
|
333
329
|
}
|
334
330
|
|
data/tests/tc_curl_multi.rb
CHANGED
@@ -391,7 +391,7 @@ class TestCurbCurlMulti < Test::Unit::TestCase
|
|
391
391
|
def test_retry_easy_handle
|
392
392
|
m = Curl::Multi.new
|
393
393
|
|
394
|
-
tries =
|
394
|
+
tries = 10
|
395
395
|
|
396
396
|
c1 = Curl::Easy.new('http://127.1.1.1:99911') do |curl|
|
397
397
|
curl.on_failure {|c,e|
|
@@ -406,13 +406,24 @@ class TestCurbCurlMulti < Test::Unit::TestCase
|
|
406
406
|
tries -= 1
|
407
407
|
m.add(c1)
|
408
408
|
|
409
|
-
|
410
|
-
m.perform
|
411
|
-
end
|
409
|
+
m.perform
|
412
410
|
assert_equal 0, tries
|
413
411
|
assert_equal 0, m.requests.size
|
414
412
|
end
|
415
413
|
|
414
|
+
def test_reusing_handle
|
415
|
+
m = Curl::Multi.new
|
416
|
+
|
417
|
+
c = Curl::Easy.new('http://127.0.0.1') do|easy|
|
418
|
+
easy.on_complete{|e,r| puts e.inspect }
|
419
|
+
end
|
420
|
+
|
421
|
+
m.add(c)
|
422
|
+
m.add(c)
|
423
|
+
rescue => e
|
424
|
+
assert_equal Curl::Err::MultiBadEasyHandle, e.class
|
425
|
+
end
|
426
|
+
|
416
427
|
include TestServerMethods
|
417
428
|
|
418
429
|
def setup
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ghazel-curb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ross Bamford
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-
|
13
|
+
date: 2009-12-06 00:00:00 -08:00
|
14
14
|
default_executable:
|
15
15
|
dependencies: []
|
16
16
|
|