curb 0.9.10 → 1.0.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7fd2f75fea9421bc6361cd44ea7343f42867eb1f87177e20598be60548e68a07
4
- data.tar.gz: e30c3e3ba5e406d5517ad89f728f0c4a95682c9ec750fc93ce3fb381da5ac2cc
3
+ metadata.gz: b452d79ee28ee380d6741f39f9fbf826a33a46d473fa4444edb6a56a122af8f8
4
+ data.tar.gz: '094812699e5b64584d6dd02a17b16884ee696a20dbf324c05498a46509e39b16'
5
5
  SHA512:
6
- metadata.gz: 6140588c19e97ce62b9c180fe07355f4781adfa84d3066402378b3abc995c5e23d1abc7458e4575a91964c8ea9fe572276a73a1dab8447de8607325a3fc9463f
7
- data.tar.gz: 88ef4f8b18028a2d6e695a543a624d1cd468482cbc06c13b94c94504a30711b9ff0b1d45b7c2f0af145a9114d1bef1975e5889f63fdd0e6387c2c86912394270
6
+ metadata.gz: 0df71c1a4eb7896f89da78a79ba9160d5606aa235b89544e08630c558a7cebb1220ec026f99f404915f52e15162cf2c988a66abe04932c3cd1104a1784bd3056
7
+ data.tar.gz: '08fba6b5b9a9404f839e4110b0d485e1595be36554345abb88a05482183204f4e0f13001a7731db75e89ca890bfa8ad19ccced63dfecd0e766f1b825ff5e9f1a'
data/README.markdown CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Curb (probably CUrl-RuBy or something) provides Ruby-language bindings for the
7
7
  libcurl(3), a fully-featured client-side URL transfer library.
8
- cURL and libcurl live at [http://curl.haxx.se/](http://curl.haxx.se/) .
8
+ cURL and libcurl live at [https://curl.se/libcurl/](https://curl.se/libcurl/) .
9
9
 
10
10
  Curb is a work-in-progress, and currently only supports libcurl's `easy` and `multi` modes.
11
11
 
@@ -14,9 +14,31 @@ Curb is a work-in-progress, and currently only supports libcurl's `easy` and `mu
14
14
  Curb is copyright (c)2006 Ross Bamford, and released under the terms of the
15
15
  Ruby license. See the LICENSE file for the gory details.
16
16
 
17
+ ## Easy mode
18
+
19
+ Get stuff
20
+ ```
21
+ res = Curl.get("https://www.google.com/")
22
+ puts res.response_code
23
+ puts res.header_str
24
+ puts res.body
25
+ ```
26
+
27
+ Post stuff
28
+ ```
29
+ res = Curl.post("https://your-server.com/endpoint", {post: "this"}.to_json) {|http|
30
+ http.headers["Content-Type"] = "application/json"
31
+ }
32
+ puts res.response_code
33
+ puts res.header_str
34
+ puts res.body
35
+ ```
36
+
37
+
38
+
17
39
  ## You will need
18
40
 
19
- * A working Ruby installation (`1.8.7+` will work but `2.1+` preferred)
41
+ * A working Ruby installation (`2.0.0+` will work but `2.1+` preferred) (it's possible it still works with 1.8.7 but you'd have to tell me if not...)
20
42
  * A working libcurl development installation
21
43
  (Ideally one of the versions listed in the compatibility chart below that maps to your `curb` version)
22
44
  * A sane build environment (e.g. gcc, make)
@@ -29,7 +51,8 @@ tested and reported to work across a variety of platforms / rubies)
29
51
 
30
52
  | Gem Version | Release Date | libcurl versions |
31
53
  | ----------- | ----------- | ---------------- |
32
- | 0.9.8 | Jan 2019 | 7.58 - 7.63 |
54
+ | 1.0.0 | Jan 2022 | 7.58 - 7.81 |
55
+ | 0.9.8 | Jan 2019 | 7.58 - 7.81 |
33
56
  | 0.9.7 | Nov 2018 | 7.56 - 7.60 |
34
57
  | 0.9.6 | May 2018 | 7.51 - 7.59 |
35
58
  | 0.9.5 | May 2018 | 7.51 - 7.59 |
@@ -43,7 +66,7 @@ tested and reported to work across a variety of platforms / rubies)
43
66
  $ gem install curb
44
67
 
45
68
  On Windows, make sure you're using the [DevKit](http://rubyinstaller.org/downloads/) and
46
- the [development version of libcurl](http://curl.haxx.se/gknw.net/7.39.0/dist-w32/curl-7.39.0-devel-mingw32.zip). Unzip, then run this in your command
69
+ the [development version of libcurl](http://curl.se/gknw.net/7.39.0/dist-w32/curl-7.39.0-devel-mingw32.zip). Unzip, then run this in your command
47
70
  line (alter paths to your curl location, but remember to use forward slashes):
48
71
 
49
72
  gem install curb --platform=ruby -- --with-curl-lib=C:/curl-7.39.0-devel-mingw32/lib --with-curl-include=C:/curl-7.39.0-devel-mingw32/include
@@ -67,6 +90,12 @@ expand on the above instructions, please report the issue at http://github.com/t
67
90
 
68
91
  On Ubuntu, the dependencies can be satisfied by installing the following packages:
69
92
 
93
+ 18.04 and onwards
94
+
95
+ $ sudo apt-get install libcurl4 libcurl3-gnutls libcurl4-openssl-dev
96
+
97
+ < 18.04
98
+
70
99
  $ sudo apt-get install libcurl3 libcurl3-gnutls libcurl4-openssl-dev
71
100
 
72
101
  On RedHat:
data/Rakefile CHANGED
@@ -57,22 +57,20 @@ MAKEOPTS = ENV['MAKE_OPTS'] || ''
57
57
  CURB_SO = "ext/curb_core.#{(defined?(RbConfig) ? RbConfig : Config)::MAKEFILE_CONFIG['DLEXT']}"
58
58
 
59
59
  file 'ext/Makefile' => 'ext/extconf.rb' do
60
- Dir.chdir('ext') do
61
- shell('ruby', 'extconf.rb', ENV['EXTCONF_OPTS'].to_s, live_stdout: STDOUT)
62
- end
60
+ shell(['ruby', 'extconf.rb', ENV['EXTCONF_OPTS'].to_s],
61
+ { :live_stdout => STDOUT , :cwd => "#{Dir.pwd}/ext" }
62
+ ).error!
63
63
  end
64
64
 
65
65
  def make(target = '')
66
- Dir.chdir('ext') do
67
- pid = system("#{MAKECMD} #{MAKEOPTS} #{target}")
68
- $?.exitstatus
69
- end
66
+ shell(["#{MAKECMD}", "#{MAKEOPTS}", "#{target}"].reject(&:empty?),
67
+ { :live_stdout => STDOUT, :cwd => "#{Dir.pwd}/ext" }
68
+ ).error!
70
69
  end
71
70
 
72
71
  # Let make handle dependencies between c/o/so - we'll just run it.
73
72
  file CURB_SO => (['ext/Makefile'] + Dir['ext/*.c'] + Dir['ext/*.h']) do
74
- m = make
75
- fail "Make failed (status #{m})" unless m == 0
73
+ make
76
74
  end
77
75
 
78
76
  desc "Compile the shared object"
@@ -80,8 +78,7 @@ task :compile => [CURB_SO]
80
78
 
81
79
  desc "Install to your site_ruby directory"
82
80
  task :install do
83
- m = make 'install'
84
- fail "Make install failed (status #{m})" unless m == 0
81
+ make 'install'
85
82
  end
86
83
 
87
84
  # Test Tasks ---------------------------------------------------------
data/ext/banned.h ADDED
@@ -0,0 +1,32 @@
1
+ #ifndef BANNED_H
2
+ #define BANNED_H
3
+
4
+ /*
5
+ * This header lists functions that have been banned from our code base,
6
+ * because they're too easy to misuse (and even if used correctly,
7
+ * complicate audits). Including this header turns them into compile-time
8
+ * errors.
9
+ */
10
+
11
+ #define BANNED(func) sorry_##func##_is_a_banned_function
12
+
13
+ #undef strcpy
14
+ #define strcpy(x,y) BANNED(strcpy)
15
+ #undef strcat
16
+ #define strcat(x,y) BANNED(strcat)
17
+ #undef strncpy
18
+ #define strncpy(x,y,n) BANNED(strncpy)
19
+ #undef strncat
20
+ #define strncat(x,y,n) BANNED(strncat)
21
+
22
+ #undef sprintf
23
+ #undef vsprintf
24
+ #ifdef HAVE_VARIADIC_MACROS
25
+ #define sprintf(...) BANNED(sprintf)
26
+ #define vsprintf(...) BANNED(vsprintf)
27
+ #else
28
+ #define sprintf(buf,fmt,arg) BANNED(sprintf)
29
+ #define vsprintf(buf,fmt,arg) BANNED(sprintf)
30
+ #endif
31
+
32
+ #endif /* BANNED_H */
data/ext/curb.c CHANGED
@@ -235,12 +235,16 @@ static VALUE ruby_curl_http2_q(VALUE mod) {
235
235
  #endif
236
236
  }
237
237
 
238
+ static void finalize_curb_core(VALUE data) {
239
+ curl_global_cleanup();
240
+ }
241
+
238
242
  void Init_curb_core() {
239
- // TODO we need to call curl_global_cleanup at exit!
240
243
  curl_version_info_data *ver;
241
244
  VALUE curlver, curllongver, curlvernum;
242
245
 
243
246
  curl_global_init(CURL_GLOBAL_ALL);
247
+ rb_set_end_proc(finalize_curb_core, Qnil);
244
248
  ver = curl_version_info(CURLVERSION_NOW);
245
249
 
246
250
  mCurl = rb_define_module("Curl");
@@ -292,18 +296,26 @@ void Init_curb_core() {
292
296
  #endif
293
297
 
294
298
  #ifdef CURL_VERSION_SSL
295
- rb_define_const(mCurl, "CURL_SSLVERSION_DEFAULT", LONG2NUM(CURL_SSLVERSION_DEFAULT));
299
+ rb_define_const(mCurl, "CURL_SSLVERSION_DEFAULT", LONG2NUM(CURL_SSLVERSION_DEFAULT));
300
+ rb_define_const(mCurl, "CURL_SSLVERSION_MAX_DEFAULT", LONG2NUM(CURL_SSLVERSION_MAX_DEFAULT));
296
301
  rb_define_const(mCurl, "CURL_SSLVERSION_TLSv1", LONG2NUM(CURL_SSLVERSION_TLSv1));
297
302
  rb_define_const(mCurl, "CURL_SSLVERSION_SSLv2", LONG2NUM(CURL_SSLVERSION_SSLv2));
298
303
  rb_define_const(mCurl, "CURL_SSLVERSION_SSLv3", LONG2NUM(CURL_SSLVERSION_SSLv3));
299
304
  #if HAVE_CURL_SSLVERSION_TLSV1_0
300
- rb_define_const(mCurl, "CURL_SSLVERSION_TLSv1_0", LONG2NUM(CURL_SSLVERSION_TLSv1_0));
305
+ rb_define_const(mCurl, "CURL_SSLVERSION_TLSv1_0", LONG2NUM(CURL_SSLVERSION_TLSv1_0));
306
+ rb_define_const(mCurl, "CURL_SSLVERSION_MAX_TLSv1_0", LONG2NUM(CURL_SSLVERSION_MAX_TLSv1_0));
301
307
  #endif
302
308
  #if HAVE_CURL_SSLVERSION_TLSV1_1
303
- rb_define_const(mCurl, "CURL_SSLVERSION_TLSv1_1", LONG2NUM(CURL_SSLVERSION_TLSv1_1));
309
+ rb_define_const(mCurl, "CURL_SSLVERSION_TLSv1_1", LONG2NUM(CURL_SSLVERSION_TLSv1_1));
310
+ rb_define_const(mCurl, "CURL_SSLVERSION_MAX_TLSv1_1", LONG2NUM(CURL_SSLVERSION_MAX_TLSv1_1));
304
311
  #endif
305
312
  #if HAVE_CURL_SSLVERSION_TLSV1_2
306
- rb_define_const(mCurl, "CURL_SSLVERSION_TLSv1_2", LONG2NUM(CURL_SSLVERSION_TLSv1_2));
313
+ rb_define_const(mCurl, "CURL_SSLVERSION_TLSv1_2", LONG2NUM(CURL_SSLVERSION_TLSv1_2));
314
+ rb_define_const(mCurl, "CURL_SSLVERSION_MAX_TLSv1_2", LONG2NUM(CURL_SSLVERSION_MAX_TLSv1_2));
315
+ #endif
316
+ #if HAVE_CURL_SSLVERSION_TLSV1_3
317
+ rb_define_const(mCurl, "CURL_SSLVERSION_TLSv1_3", LONG2NUM(CURL_SSLVERSION_TLSv1_3));
318
+ rb_define_const(mCurl, "CURL_SSLVERSION_MAX_TLSv1_3", LONG2NUM(CURL_SSLVERSION_MAX_TLSv1_3));
307
319
  #endif
308
320
 
309
321
  rb_define_const(mCurl, "CURL_USESSL_CONTROL", LONG2NUM(CURB_FTPSSL_CONTROL));
@@ -316,13 +328,20 @@ void Init_curb_core() {
316
328
  rb_define_const(mCurl, "CURL_SSLVERSION_SSLv2", LONG2NUM(-1));
317
329
  rb_define_const(mCurl, "CURL_SSLVERSION_SSLv3", LONG2NUM(-1));
318
330
  #if HAVE_CURL_SSLVERSION_TLSv1_0
319
- rb_define_const(mCurl, "CURL_SSLVERSION_TLSv1_0", LONG2NUM(-1));
331
+ rb_define_const(mCurl, "CURL_SSLVERSION_TLSv1_0", LONG2NUM(-1));
332
+ rb_define_const(mCurl, "CURL_SSLVERSION_MAX_TLSv1_0", LONG2NUM(-1));
320
333
  #endif
321
334
  #if HAVE_CURL_SSLVERSION_TLSv1_1
322
- rb_define_const(mCurl, "CURL_SSLVERSION_TLSv1_1", LONG2NUM(-1));
335
+ rb_define_const(mCurl, "CURL_SSLVERSION_TLSv1_1", LONG2NUM(-1));
336
+ rb_define_const(mCurl, "CURL_SSLVERSION_MAX_TLSv1_1", LONG2NUM(-1));
323
337
  #endif
324
338
  #if HAVE_CURL_SSLVERSION_TLSv1_2
325
- rb_define_const(mCurl, "CURL_SSLVERSION_TLSv1_2", LONG2NUM(-1));
339
+ rb_define_const(mCurl, "CURL_SSLVERSION_TLSv1_2", LONG2NUM(-1));
340
+ rb_define_const(mCurl, "CURL_SSLVERSION_MAX_TLSv1_2", LONG2NUM(-1));
341
+ #endif
342
+ #if HAVE_CURL_SSLVERSION_TLSv1_3
343
+ rb_define_const(mCurl, "CURL_SSLVERSION_TLSv1_3", LONG2NUM(-1));
344
+ rb_define_const(mCurl, "CURL_SSLVERSION_MAX_TLSv1_3", LONG2NUM(-1));
326
345
  #endif
327
346
 
328
347
  rb_define_const(mCurl, "CURL_USESSL_CONTROL", LONG2NUM(-1));
@@ -925,12 +944,19 @@ void Init_curb_core() {
925
944
  #endif
926
945
  #if HAVE_CURL_SSLVERSION_TLSv1_0
927
946
  CURB_DEFINE(CURL_SSLVERSION_TLSv1_0);
947
+ CURB_DEFINE(CURL_SSLVERSION_MAX_TLSv1_0);
928
948
  #endif
929
949
  #if HAVE_CURL_SSLVERSION_TLSv1_1
930
950
  CURB_DEFINE(CURL_SSLVERSION_TLSv1_1);
951
+ CURB_DEFINE(CURL_SSLVERSION_MAX_TLSv1_1);
931
952
  #endif
932
953
  #if HAVE_CURL_SSLVERSION_TLSv1_2
933
954
  CURB_DEFINE(CURL_SSLVERSION_TLSv1_2);
955
+ CURB_DEFINE(CURL_SSLVERSION_MAX_TLSv1_2);
956
+ #endif
957
+ #if HAVE_CURL_SSLVERSION_TLSv1_3
958
+ CURB_DEFINE(CURL_SSLVERSION_TLSv1_3);
959
+ CURB_DEFINE(CURL_SSLVERSION_MAX_TLSv1_3);
934
960
  #endif
935
961
  #if HAVE_CURLOPT_SSL_VERIFYPEER
936
962
  CURB_DEFINE(CURLOPT_SSL_VERIFYPEER);
@@ -1050,6 +1076,122 @@ void Init_curb_core() {
1050
1076
  CURB_DEFINE(CURLOPT_HAPROXYPROTOCOL);
1051
1077
  #endif
1052
1078
 
1079
+ #if HAVE_CURLPROTO_RTMPTE
1080
+ CURB_DEFINE(CURLPROTO_RTMPTE);
1081
+ #endif
1082
+
1083
+ #if HAVE_CURLPROTO_RTMPTS
1084
+ CURB_DEFINE(CURLPROTO_RTMPTS);
1085
+ #endif
1086
+
1087
+ #if HAVE_CURLPROTO_SMBS
1088
+ CURB_DEFINE(CURLPROTO_SMBS);
1089
+ #endif
1090
+
1091
+ #if HAVE_CURLPROTO_LDAP
1092
+ CURB_DEFINE(CURLPROTO_LDAP);
1093
+ #endif
1094
+
1095
+ #if HAVE_CURLPROTO_FTP
1096
+ CURB_DEFINE(CURLPROTO_FTP);
1097
+ #endif
1098
+
1099
+ #if HAVE_CURLPROTO_SMTPS
1100
+ CURB_DEFINE(CURLPROTO_SMTPS);
1101
+ #endif
1102
+
1103
+ #if HAVE_CURLPROTO_HTTP
1104
+ CURB_DEFINE(CURLPROTO_HTTP);
1105
+ #endif
1106
+
1107
+ #if HAVE_CURLPROTO_SMTP
1108
+ CURB_DEFINE(CURLPROTO_SMTP);
1109
+ #endif
1110
+
1111
+ #if HAVE_CURLPROTO_TFTP
1112
+ CURB_DEFINE(CURLPROTO_TFTP);
1113
+ #endif
1114
+
1115
+ #if HAVE_CURLPROTO_LDAPS
1116
+ CURB_DEFINE(CURLPROTO_LDAPS);
1117
+ #endif
1118
+
1119
+ #if HAVE_CURLPROTO_IMAPS
1120
+ CURB_DEFINE(CURLPROTO_IMAPS);
1121
+ #endif
1122
+
1123
+ #if HAVE_CURLPROTO_SCP
1124
+ CURB_DEFINE(CURLPROTO_SCP);
1125
+ #endif
1126
+
1127
+ #if HAVE_CURLPROTO_SFTP
1128
+ CURB_DEFINE(CURLPROTO_SFTP);
1129
+ #endif
1130
+
1131
+ #if HAVE_CURLPROTO_TELNET
1132
+ CURB_DEFINE(CURLPROTO_TELNET);
1133
+ #endif
1134
+
1135
+ #if HAVE_CURLPROTO_FILE
1136
+ CURB_DEFINE(CURLPROTO_FILE);
1137
+ #endif
1138
+
1139
+ #if HAVE_CURLPROTO_FTPS
1140
+ CURB_DEFINE(CURLPROTO_FTPS);
1141
+ #endif
1142
+
1143
+ #if HAVE_CURLPROTO_HTTPS
1144
+ CURB_DEFINE(CURLPROTO_HTTPS);
1145
+ #endif
1146
+
1147
+ #if HAVE_CURLPROTO_IMAP
1148
+ CURB_DEFINE(CURLPROTO_IMAP);
1149
+ #endif
1150
+
1151
+ #if HAVE_CURLPROTO_POP3
1152
+ CURB_DEFINE(CURLPROTO_POP3);
1153
+ #endif
1154
+
1155
+ #if HAVE_CURLPROTO_GOPHER
1156
+ CURB_DEFINE(CURLPROTO_GOPHER);
1157
+ #endif
1158
+
1159
+ #if HAVE_CURLPROTO_DICT
1160
+ CURB_DEFINE(CURLPROTO_DICT);
1161
+ #endif
1162
+
1163
+ #if HAVE_CURLPROTO_SMB
1164
+ CURB_DEFINE(CURLPROTO_SMB);
1165
+ #endif
1166
+
1167
+ #if HAVE_CURLPROTO_RTMP
1168
+ CURB_DEFINE(CURLPROTO_RTMP);
1169
+ #endif
1170
+
1171
+ #if HAVE_CURLPROTO_ALL
1172
+ CURB_DEFINE(CURLPROTO_ALL);
1173
+ #endif
1174
+
1175
+ #if HAVE_CURLPROTO_RTMPE
1176
+ CURB_DEFINE(CURLPROTO_RTMPE);
1177
+ #endif
1178
+
1179
+ #if HAVE_CURLPROTO_RTMPS
1180
+ CURB_DEFINE(CURLPROTO_RTMPS);
1181
+ #endif
1182
+
1183
+ #if HAVE_CURLPROTO_RTMPT
1184
+ CURB_DEFINE(CURLPROTO_RTMPT);
1185
+ #endif
1186
+
1187
+ #if HAVE_CURLPROTO_POP3S
1188
+ CURB_DEFINE(CURLPROTO_POP3S);
1189
+ #endif
1190
+
1191
+ #if HAVE_CURLPROTO_RTSP
1192
+ CURB_DEFINE(CURLPROTO_RTSP);
1193
+ #endif
1194
+
1053
1195
  #if LIBCURL_VERSION_NUM >= 0x072B00 /* 7.43.0 */
1054
1196
  CURB_DEFINE(CURLPIPE_NOTHING);
1055
1197
  CURB_DEFINE(CURLPIPE_HTTP1);
data/ext/curb.h CHANGED
@@ -18,6 +18,7 @@
18
18
 
19
19
  #include <curl/curl.h>
20
20
 
21
+ #include "banned.h"
21
22
  #include "curb_config.h"
22
23
  #include "curb_easy.h"
23
24
  #include "curb_errors.h"
@@ -27,11 +28,11 @@
27
28
  #include "curb_macros.h"
28
29
 
29
30
  // These should be managed from the Rake 'release' task.
30
- #define CURB_VERSION "0.9.10"
31
- #define CURB_VER_NUM 9010
32
- #define CURB_VER_MAJ 0
33
- #define CURB_VER_MIN 9
34
- #define CURB_VER_MIC 10
31
+ #define CURB_VERSION "1.0.1"
32
+ #define CURB_VER_NUM 1001
33
+ #define CURB_VER_MAJ 1
34
+ #define CURB_VER_MIN 0
35
+ #define CURB_VER_MIC 1
35
36
  #define CURB_VER_PATCH 0
36
37
 
37
38
 
@@ -48,6 +49,11 @@
48
49
  #define RHASH_SIZE(hash) RHASH(hash)->tbl->num_entries
49
50
  #endif
50
51
 
52
+ // ruby 1.8 does not provide the macro
53
+ #ifndef DBL2NUM
54
+ #define DBL2NUM(dbl) rb_float_new(dbl)
55
+ #endif
56
+
51
57
  extern VALUE mCurl;
52
58
 
53
59
  extern void Init_curb_core();