taf2-curb 0.4.9.0 → 0.5.0.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.
- data/ext/curb.h +4 -4
- data/ext/curb_easy.c +16 -21
- data/ext/curb_multi.c +16 -6
- data/ext/curb_multi.h +1 -1
- data/tests/tc_curl_easy.rb +23 -0
- metadata +4 -3
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.
|
24
|
-
#define CURB_VER_NUM
|
23
|
+
#define CURB_VERSION "0.5.0.0"
|
24
|
+
#define CURB_VER_NUM 500
|
25
25
|
#define CURB_VER_MAJ 0
|
26
|
-
#define CURB_VER_MIN
|
27
|
-
#define CURB_VER_MIC
|
26
|
+
#define CURB_VER_MIN 5
|
27
|
+
#define CURB_VER_MIC 0
|
28
28
|
#define CURB_VER_PATCH 0
|
29
29
|
|
30
30
|
|
data/ext/curb_easy.c
CHANGED
@@ -1669,7 +1669,6 @@ VALUE ruby_curl_easy_setup( ruby_curl_easy *rbce, VALUE *body_buffer, VALUE *hea
|
|
1669
1669
|
}
|
1670
1670
|
}
|
1671
1671
|
if (rbce->cacert != Qnil) {
|
1672
|
-
// XXX: This should really be using the output of 'curl-config --ca'
|
1673
1672
|
#ifdef HAVE_CURL_CONFIG_CA
|
1674
1673
|
curl_easy_setopt(curl, CURLOPT_CAINFO, CURL_CONFIG_CA);
|
1675
1674
|
#else
|
@@ -1682,7 +1681,6 @@ VALUE ruby_curl_easy_setup( ruby_curl_easy *rbce, VALUE *body_buffer, VALUE *hea
|
|
1682
1681
|
curl_easy_setopt(curl, CURLOPT_USERAGENT, StringValuePtr(rbce->useragent));
|
1683
1682
|
}
|
1684
1683
|
|
1685
|
-
|
1686
1684
|
/* Setup HTTP headers if necessary */
|
1687
1685
|
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, NULL); // XXX: maybe we shouldn't be clearing this?
|
1688
1686
|
|
@@ -1772,7 +1770,7 @@ static VALUE handle_perform(VALUE self, ruby_curl_easy *rbce) {
|
|
1772
1770
|
|
1773
1771
|
VALUE multi = ruby_curl_multi_new(cCurlMulti);
|
1774
1772
|
ruby_curl_multi_add(multi, self);
|
1775
|
-
VALUE ret =
|
1773
|
+
VALUE ret = rb_funcall(multi, rb_intern("perform"), 0);
|
1776
1774
|
|
1777
1775
|
/* check for errors in the easy response and raise exceptions if anything went wrong and their is no on_failure handler */
|
1778
1776
|
if( rbce->last_result != 0 && rbce->failure_proc == Qnil ) {
|
@@ -1875,9 +1873,7 @@ static VALUE ruby_curl_easy_perform_post(int argc, VALUE *argv, VALUE self) {
|
|
1875
1873
|
rb_scan_args(argc, argv, "*", &args_ary);
|
1876
1874
|
|
1877
1875
|
Data_Get_Struct(self, ruby_curl_easy, rbce);
|
1878
|
-
curl =
|
1879
|
-
curl_easy_cleanup(rbce->curl);
|
1880
|
-
rbce->curl = curl;
|
1876
|
+
curl = rbce->curl;
|
1881
1877
|
|
1882
1878
|
if (rbce->multipart_form_post) {
|
1883
1879
|
VALUE ret;
|
@@ -1976,9 +1972,19 @@ static VALUE ruby_curl_easy_perform_put(VALUE self, VALUE data) {
|
|
1976
1972
|
|
1977
1973
|
ruby_curl_easy_put_data_set(self, data);
|
1978
1974
|
|
1979
|
-
|
1980
|
-
|
1981
|
-
|
1975
|
+
return handle_perform(self, rbce);
|
1976
|
+
}
|
1977
|
+
|
1978
|
+
/*
|
1979
|
+
* call-seq:
|
1980
|
+
* Curl::Easy.http_put(url, data) {|c| ... }
|
1981
|
+
*
|
1982
|
+
* see easy.http_put
|
1983
|
+
*/
|
1984
|
+
static VALUE ruby_curl_easy_class_perform_put(VALUE klass, VALUE url, VALUE data) {
|
1985
|
+
VALUE c = ruby_curl_easy_new(1, &url, klass);
|
1986
|
+
ruby_curl_easy_perform_put(c, data);
|
1987
|
+
return c;
|
1982
1988
|
}
|
1983
1989
|
|
1984
1990
|
/* =================== DATA FUNCS =============== */
|
@@ -2653,10 +2659,6 @@ static VALUE ruby_curl_easy_class_perform(int argc, VALUE *argv, VALUE klass) {
|
|
2653
2659
|
static VALUE ruby_curl_easy_class_perform_get(int argc, VALUE *argv, VALUE klass) {
|
2654
2660
|
VALUE c = ruby_curl_easy_new(argc, argv, klass);
|
2655
2661
|
|
2656
|
-
if (rb_block_given_p()) {
|
2657
|
-
rb_yield(c);
|
2658
|
-
}
|
2659
|
-
|
2660
2662
|
ruby_curl_easy_perform_get(c);
|
2661
2663
|
return c;
|
2662
2664
|
}
|
@@ -2674,10 +2676,6 @@ static VALUE ruby_curl_easy_class_perform_get(int argc, VALUE *argv, VALUE klass
|
|
2674
2676
|
static VALUE ruby_curl_easy_class_perform_delete(int argc, VALUE *argv, VALUE klass) {
|
2675
2677
|
VALUE c = ruby_curl_easy_new(argc, argv, klass);
|
2676
2678
|
|
2677
|
-
if (rb_block_given_p()) {
|
2678
|
-
rb_yield(c);
|
2679
|
-
}
|
2680
|
-
|
2681
2679
|
ruby_curl_easy_perform_delete(c);
|
2682
2680
|
return c;
|
2683
2681
|
}
|
@@ -2695,10 +2693,6 @@ static VALUE ruby_curl_easy_class_perform_delete(int argc, VALUE *argv, VALUE kl
|
|
2695
2693
|
static VALUE ruby_curl_easy_class_perform_head(int argc, VALUE *argv, VALUE klass) {
|
2696
2694
|
VALUE c = ruby_curl_easy_new(argc, argv, klass);
|
2697
2695
|
|
2698
|
-
if (rb_block_given_p()) {
|
2699
|
-
rb_yield(c);
|
2700
|
-
}
|
2701
|
-
|
2702
2696
|
ruby_curl_easy_perform_head(c);
|
2703
2697
|
|
2704
2698
|
return c;
|
@@ -2756,6 +2750,7 @@ void init_curb_easy() {
|
|
2756
2750
|
rb_define_singleton_method(cCurlEasy, "http_get", ruby_curl_easy_class_perform_get, -1);
|
2757
2751
|
rb_define_singleton_method(cCurlEasy, "http_post", ruby_curl_easy_class_perform_post, -1);
|
2758
2752
|
rb_define_singleton_method(cCurlEasy, "http_head", ruby_curl_easy_class_perform_head, -1);
|
2753
|
+
rb_define_singleton_method(cCurlEasy, "http_put", ruby_curl_easy_class_perform_put, 2);
|
2759
2754
|
|
2760
2755
|
/* Attributes for config next perform */
|
2761
2756
|
rb_define_method(cCurlEasy, "url=", ruby_curl_easy_url_set, 1);
|
data/ext/curb_multi.c
CHANGED
@@ -57,6 +57,11 @@ static void curl_multi_flush_easy(VALUE key, VALUE easy, ruby_curl_multi *rbcm)
|
|
57
57
|
}
|
58
58
|
}
|
59
59
|
|
60
|
+
static int
|
61
|
+
rb_hash_clear_i(VALUE key, VALUE value, VALUE dummy) {
|
62
|
+
return ST_DELETE;
|
63
|
+
}
|
64
|
+
|
60
65
|
static void curl_multi_free(ruby_curl_multi *rbcm) {
|
61
66
|
|
62
67
|
//printf("hash entries: %d\n", RHASH(rbcm->requests)->tbl->num_entries );
|
@@ -64,7 +69,7 @@ static void curl_multi_free(ruby_curl_multi *rbcm) {
|
|
64
69
|
|
65
70
|
rb_hash_foreach( rbcm->requests, (int (*)())curl_multi_flush_easy, (VALUE)rbcm );
|
66
71
|
|
67
|
-
//rb_hash_clear(rbcm->requests)
|
72
|
+
rb_hash_foreach(rbcm->requests, rb_hash_clear_i, 0); //rb_hash_clear(rbcm->requests);
|
68
73
|
rbcm->requests = Qnil;
|
69
74
|
}
|
70
75
|
curl_multi_cleanup(rbcm->handle);
|
@@ -381,7 +386,7 @@ static void rb_curl_multi_run(VALUE self, CURLM *multi_handle, int *still_runnin
|
|
381
386
|
*
|
382
387
|
* Run multi handles, looping selecting when data can be transfered
|
383
388
|
*/
|
384
|
-
VALUE ruby_curl_multi_perform(VALUE self) {
|
389
|
+
VALUE ruby_curl_multi_perform(int argc, VALUE *argv, VALUE self) {
|
385
390
|
CURLMcode mcode;
|
386
391
|
ruby_curl_multi *rbcm;
|
387
392
|
int maxfd, rc;
|
@@ -389,9 +394,11 @@ VALUE ruby_curl_multi_perform(VALUE self) {
|
|
389
394
|
|
390
395
|
long timeout_milliseconds;
|
391
396
|
struct timeval tv = {0, 0};
|
397
|
+
VALUE block = Qnil;
|
398
|
+
|
399
|
+
rb_scan_args(argc, argv, "0&", &block);
|
392
400
|
|
393
401
|
Data_Get_Struct(self, ruby_curl_multi, rbcm);
|
394
|
-
//rb_gc_mark(self);
|
395
402
|
|
396
403
|
rb_curl_multi_run( self, rbcm->handle, &(rbcm->running) );
|
397
404
|
|
@@ -440,9 +447,12 @@ VALUE ruby_curl_multi_perform(VALUE self) {
|
|
440
447
|
rb_raise(rb_eRuntimeError, "select(): %s", strerror(errno));
|
441
448
|
break;
|
442
449
|
case 0:
|
443
|
-
if (
|
444
|
-
|
450
|
+
if (block != Qnil) {
|
451
|
+
rb_funcall(block, rb_intern("call"), 1, self);
|
445
452
|
}
|
453
|
+
// if (rb_block_given_p()) {
|
454
|
+
// rb_yield(self);
|
455
|
+
// }
|
446
456
|
default:
|
447
457
|
rb_curl_multi_run( self, rbcm->handle, &(rbcm->running) );
|
448
458
|
break;
|
@@ -472,5 +482,5 @@ void init_curb_multi() {
|
|
472
482
|
rb_define_method(cCurlMulti, "add", ruby_curl_multi_add, 1);
|
473
483
|
rb_define_method(cCurlMulti, "remove", ruby_curl_multi_remove, 1);
|
474
484
|
rb_define_method(cCurlMulti, "cancel!", ruby_curl_multi_cancel, 0);
|
475
|
-
rb_define_method(cCurlMulti, "perform", ruby_curl_multi_perform,
|
485
|
+
rb_define_method(cCurlMulti, "perform", ruby_curl_multi_perform, -1);
|
476
486
|
}
|
data/ext/curb_multi.h
CHANGED
@@ -21,7 +21,7 @@ typedef struct {
|
|
21
21
|
extern VALUE cCurlMulti;
|
22
22
|
void init_curb_multi();
|
23
23
|
VALUE ruby_curl_multi_new(VALUE klass);
|
24
|
-
VALUE ruby_curl_multi_perform(VALUE self);
|
24
|
+
VALUE ruby_curl_multi_perform(int argc, VALUE *argv, VALUE self);
|
25
25
|
VALUE ruby_curl_multi_add(VALUE self, VALUE easy);
|
26
26
|
VALUE ruby_curl_multi_remove(VALUE self, VALUE easy);
|
27
27
|
|
data/tests/tc_curl_easy.rb
CHANGED
@@ -499,6 +499,19 @@ class TestCurbCurlEasy < Test::Unit::TestCase
|
|
499
499
|
curl.http_post
|
500
500
|
assert_equal "POST\n", curl.body_str
|
501
501
|
end
|
502
|
+
|
503
|
+
def test_post_remote_is_easy_handle
|
504
|
+
# see: http://pastie.org/560852 and
|
505
|
+
# http://groups.google.com/group/curb---ruby-libcurl-bindings/browse_thread/thread/216bb2d9b037f347?hl=en
|
506
|
+
[:post, :get,:head,:delete].each do |method|
|
507
|
+
count = 0
|
508
|
+
curl = Curl::Easy.send("http_#{method}", TestServlet.url) do|c|
|
509
|
+
count += 1
|
510
|
+
assert_equal Curl::Easy, c.class
|
511
|
+
end
|
512
|
+
assert_equal 1, count, "For request method: #{method.to_s.upcase}"
|
513
|
+
end
|
514
|
+
end
|
502
515
|
|
503
516
|
def test_post_with_body_remote
|
504
517
|
curl = Curl::Easy.new(TestServlet.url)
|
@@ -574,6 +587,16 @@ class TestCurbCurlEasy < Test::Unit::TestCase
|
|
574
587
|
end
|
575
588
|
assert_equal "PUT\n#{File.read(__FILE__)}", curl.body_str
|
576
589
|
end
|
590
|
+
|
591
|
+
def test_put_class_method
|
592
|
+
count = 0
|
593
|
+
curl = Curl::Easy.http_put(TestServlet.url,File.open(__FILE__,'rb')) do|c|
|
594
|
+
count += 1
|
595
|
+
assert_equal Curl::Easy, c.class
|
596
|
+
end
|
597
|
+
assert_equal 1, count
|
598
|
+
assert_equal "PUT\n#{File.read(__FILE__)}", curl.body_str
|
599
|
+
end
|
577
600
|
|
578
601
|
# Generate a self-signed cert with
|
579
602
|
# openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 \
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: taf2-curb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0.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-07-
|
13
|
+
date: 2009-07-27 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies: []
|
16
16
|
|
@@ -46,6 +46,7 @@ files:
|
|
46
46
|
- ext/curb_multi.h
|
47
47
|
has_rdoc: true
|
48
48
|
homepage: http://curb.rubyforge.org/
|
49
|
+
licenses:
|
49
50
|
post_install_message:
|
50
51
|
rdoc_options:
|
51
52
|
- --main
|
@@ -68,7 +69,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
68
69
|
requirements: []
|
69
70
|
|
70
71
|
rubyforge_project: curb
|
71
|
-
rubygems_version: 1.
|
72
|
+
rubygems_version: 1.3.5
|
72
73
|
signing_key:
|
73
74
|
specification_version: 2
|
74
75
|
summary: Ruby libcurl bindings
|