curb 0.7.11 → 0.7.12

Sign up to get free protection for your applications and to get access to all the features.
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.7.11"
24
- #define CURB_VER_NUM 711
23
+ #define CURB_VERSION "0.7.12"
24
+ #define CURB_VER_NUM 712
25
25
  #define CURB_VER_MAJ 0
26
26
  #define CURB_VER_MIN 7
27
27
  #define CURB_VER_MIC 1
28
- #define CURB_VER_PATCH 1
28
+ #define CURB_VER_PATCH 2
29
29
 
30
30
 
31
31
  // Maybe not yet defined in Ruby
@@ -815,7 +815,7 @@ static VALUE ruby_curl_easy_put_data_set(VALUE self, VALUE data) {
815
815
  the easy handle is active or until the upload
816
816
  is complete or terminated... */
817
817
 
818
- curl_easy_setopt(curl, CURLOPT_NOBODY,0);
818
+ curl_easy_setopt(curl, CURLOPT_NOBODY, 0);
819
819
  curl_easy_setopt(curl, CURLOPT_UPLOAD, 1);
820
820
  curl_easy_setopt(curl, CURLOPT_READFUNCTION, (curl_read_callback)read_data_handler);
821
821
  curl_easy_setopt(curl, CURLOPT_READDATA, rbce);
@@ -840,7 +840,7 @@ static VALUE ruby_curl_easy_put_data_set(VALUE self, VALUE data) {
840
840
 
841
841
  if (rb_respond_to(data, rb_intern("read"))) {
842
842
  VALUE stat = rb_funcall(data, rb_intern("stat"), 0);
843
- if( stat ) {
843
+ if( stat && rb_hash_aref(headers, rb_str_new2("Content-Length")) == Qnil) {
844
844
  VALUE size;
845
845
  if( rb_hash_aref(headers, rb_str_new2("Expect")) == Qnil ) {
846
846
  rb_hash_aset(headers, rb_str_new2("Expect"), rb_str_new2(""));
@@ -851,6 +851,10 @@ static VALUE ruby_curl_easy_put_data_set(VALUE self, VALUE data) {
851
851
  else if( rb_hash_aref(headers, rb_str_new2("Content-Length")) == Qnil && rb_hash_aref(headers, rb_str_new2("Transfer-Encoding")) == Qnil ) {
852
852
  rb_hash_aset(headers, rb_str_new2("Transfer-Encoding"), rb_str_new2("chunked"));
853
853
  }
854
+ else if( rb_hash_aref(headers, rb_str_new2("Content-Length")) ) {
855
+ VALUE size = rb_funcall(rb_hash_aref(headers, rb_str_new2("Content-Length")), rb_intern("to_i"), 0);
856
+ curl_easy_setopt(curl, CURLOPT_INFILESIZE, FIX2LONG(size));
857
+ }
854
858
  }
855
859
  else if (rb_respond_to(data, rb_intern("to_s"))) {
856
860
  curl_easy_setopt(curl, CURLOPT_INFILESIZE, RSTRING_LEN(data));
@@ -855,10 +855,37 @@ class TestCurbCurlEasy < Test::Unit::TestCase
855
855
 
856
856
  def test_easy_can_put_with_content_length
857
857
  curl = Curl::Easy.new(TestServlet.url)
858
- curl.headers['Content-Length'] = "hello".size
859
- curl.http_put("hello")
860
- assert_match /^PUT/, curl.body_str
861
- assert_match /hello$/, curl.body_str
858
+ rd, wr = IO.pipe
859
+ buf = (("hello")* (1000 / 5))
860
+
861
+ producer = Thread.new do
862
+ 5.times do
863
+ wr << buf
864
+ sleep 0.1 # act as a slow producer
865
+ end
866
+ end
867
+
868
+ consumer = Thread.new do
869
+
870
+ #curl.verbose = true
871
+ curl.headers['Content-Length'] = buf.size * 5
872
+ curl.headers['User-Agent'] = "Something else"
873
+ curl.headers['Content-Type'] = "text/javascript"
874
+ curl.headers['Date'] = Time.now.httpdate
875
+ curl.headers['Host'] = 's3.amazonaws.com'
876
+ curl.headers['Accept'] = '*/*'
877
+ curl.headers['Authorization'] = 'Foo Bar Biz Baz'
878
+ curl.http_put(rd)
879
+ assert_match /^PUT/, curl.body_str
880
+ assert_match /hello$/, curl.body_str
881
+ curl.header_str
882
+ curl.body_str
883
+ end
884
+
885
+ producer.join
886
+ wr.close
887
+ consumer.join
888
+
862
889
  end
863
890
 
864
891
  include TestServerMethods
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: curb
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 27
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 7
9
- - 11
10
- version: 0.7.11
9
+ - 12
10
+ version: 0.7.12
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ross Bamford