4
4
| (__| |_| | _ <| |___
5
5
\___|\___/|_| \_\_____|
7
Things that could be nice to do in the future
9
9
Things to do in project cURL. Please tell us what you think, contribute and
10
send us patches that improve things! Also check the http://curl.haxx.se/dev
11
web section for various technical development notes.
10
send us patches that improve things!
13
12
All bugs documented in the KNOWN_BUGS document are subject for fixing!
17
* Introduce another callback interface for upload/download that makes one
18
less copy of data and thus a faster operation.
19
[http://curl.haxx.se/dev/no_copy_callbacks.txt]
21
* More data sharing. curl_share_* functions already exist and work, and they
22
can be extended to share more. For example, enable sharing of the ares
23
channel and the connection cache.
25
* Introduce a new error code indicating authentication problems (for proxy
26
CONNECT error 407 for example). This cannot be an error code, we must not
27
return informational stuff as errors, consider a new info returned by
28
curl_easy_getinfo() http://curl.haxx.se/bug/view.cgi?id=845941
30
* Use 'struct lifreq' and SIOCGLIFADDR instead of 'struct ifreq' and
31
SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete.
32
To support ipv6 interface addresses properly.
34
* Add the following to curl_easy_getinfo(): GET_HTTP_IP, GET_FTP_IP and
35
GET_FTP_DATA_IP. Return a string with the used IP. Suggested by Alan.
37
* Add option that changes the interval in which the progress callback is
40
* Make libcurl built with c-ares use c-ares' IPv6 abilities. They weren't
41
present when we first added c-ares support but they have been added since!
42
When this is done and works, we can actually start considering making c-ares
43
powered libcurl the default build (which of course would require that we'd
44
bundle the c-ares source code in the libcurl source code releases).
46
* Make the curl/*.h headers include the proper system includes based on what
47
was present at the time when configure was run. Currently, the sys/select.h
48
header is for example included by curl/multi.h only on specific platforms
49
we know MUST have it. This is error-prone. We therefore want the header
50
files to adapt to configure results. Those results must be stored in a new
51
header and they must use a curl name space, i.e not be HAVE_* prefix (as
52
that would risk collide with other apps that use libcurl and that runs
55
Work on this has been started but hasn't been finished, and the initial
56
patch and some details are found here:
57
http://curl.haxx.se/mail/lib-2006-12/0084.html
59
LIBCURL - multi interface
61
* Make sure we don't ever loop because of non-blocking sockets return
62
EWOULDBLOCK or similar. The GnuTLS connection etc.
64
* Make transfers treated more carefully. We need a way to tell libcurl we
65
have data to write, as the current system expects us to upload data each
66
time the socket is writable and there is no way to say that we want to
67
upload data soon just not right now, without that aborting the upload. The
68
opposite situation should be possible as well, that we tell libcurl we're
69
ready to accept read data. Today libcurl feeds the data as soon as it is
70
available for reading, no matter what.
72
* Make curl_easy_perform() a wrapper-function that simply creates a multi
73
handle, adds the easy handle to it, runs curl_multi_perform() until the
74
transfer is done, then detach the easy handle, destroy the multi handle and
75
return the easy handle's return code. This will thus make everything
76
internally use and assume the multi interface. The select()-loop should use
79
* curl_multi_handle_control() - this can control the easy handle (while)
80
added to a multi handle in various ways:
81
o RESTART, unconditionally restart this easy handle's transfer from the
82
start, re-init the state
83
o RESTART_COMPLETED, restart this easy handle's transfer but only if the
84
existing transfer has already completed and it is in a "finished state".
85
o STOP, just stop this transfer and consider it completed
95
* PRET is a command that primarily "drftpd" supports, which could be useful
96
when using libcurl against such a server. It is a non-standard and a rather
97
oddly designed command, but...
98
http://curl.haxx.se/bug/feature.cgi?id=1729967
100
* When trying to connect passively to a server which only supports active
101
connections, libcurl returns CURLE_FTP_WEIRD_PASV_REPLY and closes the
102
connection. There could be a way to fallback to an active connection (and
103
vice versa). http://curl.haxx.se/bug/feature.cgi?id=1754793
105
* Make the detection of (bad) %0d and %0a codes in FTP url parts earlier in
106
the process to avoid doing a resolve and connect in vain.
108
* REST fix for servers not behaving well on >2GB requests. This should fail
109
if the server doesn't set the pointer to the requested index. The tricky
110
(impossible?) part is to figure out if the server did the right thing or
113
* Support the most common FTP proxies, Philip Newton provided a list
114
allegedly from ncftp:
115
http://curl.haxx.se/mail/archive-2003-04/0126.html
117
* Make CURLOPT_FTPPORT support an additional port number on the IP/if/name,
118
like "blabla:[port]" or possibly even "blabla:[portfirst]-[portsecond]".
119
http://curl.haxx.se/bug/feature.cgi?id=1505166
121
* FTP ASCII transfers do not follow RFC959. They don't convert the data
124
* Since USERPWD always override the user and password specified in URLs, we
125
might need another way to specify user+password for anonymous ftp logins.
127
* The FTP code should get a way of returning errors that is known to still
128
have the control connection alive and sound. Currently, a returned error
129
from within ftp-functions does not tell if the control connection is still
130
OK to use or not. This causes libcurl to fail to re-use connections
135
* When doing CONNECT to a HTTP proxy, libcurl always uses HTTP/1.0. This has
136
never been reported as causing trouble to anyone, but should be considered
137
to use the HTTP version the user has chosen.
139
* "Better" support for persistent connections over HTTP 1.0
140
http://curl.haxx.se/bug/feature.cgi?id=1089001
144
* Reading input (to send to the remote server) on stdin is a crappy solution
145
for library purposes. We need to invent a good way for the application to
146
be able to provide the data to send.
148
* Move the telnet support's network select() loop go away and merge the code
149
into the main transfer loop. Until this is done, the multi interface won't
154
* Provide an option that allows for disabling specific SSL versions, such as
155
SSLv2 http://curl.haxx.se/bug/feature.cgi?id=1767276
157
* Provide a libcurl API for setting mutex callbacks in the underlying SSL
158
library, so that the same application code can use mutex-locking
159
independently of OpenSSL or GnutTLS being used.
161
* Anton Fedorov's "dumpcert" patch:
162
http://curl.haxx.se/mail/lib-2004-03/0088.html
164
* Evaluate/apply Gertjan van Wingerde's SSL patches:
165
http://curl.haxx.se/mail/lib-2004-03/0087.html
167
* "Look at SSL cafile - quick traces look to me like these are done on every
168
request as well, when they should only be necessary once per ssl context
169
(or once per handle)". The major improvement we can rather easily do is to
170
make sure we don't create and kill a new SSL "context" for every request,
171
but instead make one for every connection and re-use that SSL context in
172
the same style connections are re-used. It will make us use slightly more
173
memory but it will libcurl do less creations and deletions of SSL contexts.
175
* Add an interface to libcurl that enables "session IDs" to get
176
exported/imported. Cris Bailiff said: "OpenSSL has functions which can
177
serialise the current SSL state to a buffer of your choice, and
178
recover/reset the state from such a buffer at a later date - this is used
179
by mod_ssl for apache to implement and SSL session ID cache".
181
* OpenSSL supports a callback for customised verification of the peer
182
certificate, but this doesn't seem to be exposed in the libcurl APIs. Could
183
it be? There's so much that could be done if it were! (brought by Chris
186
* Make curl's SSL layer capable of using other free SSL libraries. Such as
187
MatrixSSL (http://www.matrixssl.org/).
189
* Peter Sylvester's patch for SRP on the TLS layer.
190
Awaits OpenSSL support for this, no need to support this in libcurl before
191
there's an OpenSSL release that does it.
193
* make the configure --with-ssl option first check for OpenSSL, then GnuTLS,
198
* Get NTLM working using the functions provided by libgcrypt, since GnuTLS
199
already depends on that to function. Not strictly SSL/TLS related, but
200
hey... Another option is to get available DES and MD4 source code from the
201
cryptopp library. They are fine license-wise, but are C++.
205
* Work out a common method with Peter Sylvester's OpenSSL-patch for SRP
206
on the TLS to provide name and password
208
* Fix the connection phase to be non-blocking when multi interface is used
210
* Add a way to check if the connection seems to be alive, to correspond to
211
the SSL_peak() way we use with OpenSSL.
15
1.1 Zero-copy interface
20
1.6 configure-based info in public headers
22
2. libcurl - multi interface
25
2.3 Remove easy interface internally
26
2.4 Avoid having to remove/readd handles
33
4.2 Alter passive/active on failure and retry
34
4.3 Earlier bad letter detection
35
4.4 REST for large files
41
5.1 Other HTTP versions with CONNECT
42
5.2 Better persistancy for HTTP 1.0
43
5.3 support FF3 sqlite cookie files
47
6.2 ditch telnet-specific select
50
7.1 Disable specific versions
51
7.2 Provide mytex locking API
53
7.4 Evaluate SSL patches
54
7.5 Cache OpenSSL contexts
55
7.6 Export session ids
56
7.7 Provide callback for cert verfication
57
7.8 Support other SSL libraries
58
7.9 Support SRP on the TLS layer
59
7.10 improve configure --with-ssl
62
8.1 Make NTLM work without OpenSSL functions
69
9.1 ditch ldap-specific select
77
11.1 Content-Disposition
80
11.4 prevent file overwriting
81
11.5 ftp wildcard download
82
11.6 simultaneous parallel transfers
83
11.7 provide formpost headers
84
11.8 url-specific options
91
13.2 nicer lacking perl message
92
13.3 more protocols supported
93
13.4 more platforms supported
96
14.1 http-style HEAD output for ftp
97
14.2 combine error codes
98
14.3 extend CURLOPT_SOCKOPTFUNCTION prototype
100
15. Next major release
101
15.1 cleanup return codes
102
15.2 remove obsolete defines
104
15.4 remove several functions
105
15.5 remove CURLOPT_FAILONERROR
106
15.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE
108
==============================================================================
112
1.1 Zero-copy interface
114
Introdue another callback interface for upload/download that makes one less
115
copy of data and thus a faster operation.
116
[http://curl.haxx.se/dev/no_copy_callbacks.txt]
118
1.2 More data sharing
120
curl_share_* functions already exist and work, and they can be extended to
121
share more. For example, enable sharing of the ares channel and the
126
Use 'struct lifreq' and SIOCGLIFADDR instead of 'struct ifreq' and
127
SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete.
128
To support ipv6 interface addresses for network interfaces properly.
132
Add the following to curl_easy_getinfo(): GET_HTTP_IP, GET_FTP_IP and
133
GET_FTP_DATA_IP. Return a string with the used IP.
137
Make libcurl built with c-ares use c-ares' IPv6 abilities. They weren't
138
present when we first added c-ares support but they have been added since!
139
When this is done and works, we can actually start considering making c-ares
140
powered libcurl the default build (which of course would require that we'd
141
bundle the c-ares source code in the libcurl source code releases).
143
1.6 configure-based info in public headers
145
Make the public headers include the proper system includes based on what was
146
present at the time when configure was run. Currently, the sys/select.h
147
header is for example included by curl/multi.h only on specific platforms we
148
know MUST have it. This is error-prone. We therefore want the header files to
149
adapt to configure results. Those results must be stored in a new header and
150
they must use a curl name space, i.e not be HAVE_* prefix (as that would risk
151
collide with other apps that use libcurl and that runs configure).
153
Work on this has been started but hasn't been finished, and the initial patch
154
and some details are found here:
155
http://curl.haxx.se/mail/lib-2006-12/0084.html
157
The remaining problems to solve involve the platforms that can't run
160
2. libcurl - multi interface
162
2.1 More non-blocking
164
Make sure we don't ever loop because of non-blocking sockets return
165
EWOULDBLOCK or similar. The GnuTLS connection etc.
169
Make transfers treated more carefully. We need a way to tell libcurl we have
170
data to write, as the current system expects us to upload data each time the
171
socket is writable and there is no way to say that we want to upload data
172
soon just not right now, without that aborting the upload. The opposite
173
situation should be possible as well, that we tell libcurl we're ready to
174
accept read data. Today libcurl feeds the data as soon as it is available for
175
reading, no matter what.
177
2.3 Remove easy interface internally
179
Make curl_easy_perform() a wrapper-function that simply creates a multi
180
handle, adds the easy handle to it, runs curl_multi_perform() until the
181
transfer is done, then detach the easy handle, destroy the multi handle and
182
return the easy handle's return code. This will thus make everything
183
internally use and assume the multi interface. The select()-loop should use
186
2.4 Avoid having to remove/readd handles
188
curl_multi_handle_control() - this can control the easy handle (while) added
189
to a multi handle in various ways:
191
o RESTART, unconditionally restart this easy handle's transfer from the
192
start, re-init the state
194
o RESTART_COMPLETED, restart this easy handle's transfer but only if the
195
existing transfer has already completed and it is in a "finished state".
197
o STOP, just stop this transfer and consider it completed
213
PRET is a command that primarily "drftpd" supports, which could be useful
214
when using libcurl against such a server. It is a non-standard and a rather
215
oddly designed command, but...
216
http://curl.haxx.se/bug/feature.cgi?id=1729967
218
4.2 Alter passive/active on failure and retry
220
When trying to connect passively to a server which only supports active
221
connections, libcurl returns CURLE_FTP_WEIRD_PASV_REPLY and closes the
222
connection. There could be a way to fallback to an active connection (and
223
vice versa). http://curl.haxx.se/bug/feature.cgi?id=1754793
225
4.3 Earlier bad letter detection
227
Make the detection of (bad) %0d and %0a codes in FTP url parts earlier in the
228
process to avoid doing a resolve and connect in vain.
230
4.4 REST for large files
232
REST fix for servers not behaving well on >2GB requests. This should fail if
233
the server doesn't set the pointer to the requested index. The tricky
234
(impossible?) part is to figure out if the server did the right thing or not.
236
4.5 FTP proxy support
238
Support the most common FTP proxies, Philip Newton provided a list allegedly
239
from ncftp. This is not a subject without debate, and is probably not really
240
suitable for libcurl. http://curl.haxx.se/mail/archive-2003-04/0126.html
244
Make CURLOPT_FTPPORT support an additional port number on the IP/if/name,
245
like "blabla:[port]" or possibly even "blabla:[portfirst]-[portsecond]".
246
http://curl.haxx.se/bug/feature.cgi?id=1505166
250
FTP ASCII transfers do not follow RFC959. They don't convert the data
255
5.1 Other HTTP versions with CONNECT
257
When doing CONNECT to a HTTP proxy, libcurl always uses HTTP/1.0. This has
258
never been reported as causing trouble to anyone, but should be considered to
259
use the HTTP version the user has chosen.
261
5.2 Better persistancy for HTTP 1.0
263
"Better" support for persistent connections over HTTP 1.0
264
http://curl.haxx.se/bug/feature.cgi?id=1089001
266
5.3 support FF3 sqlite cookie files
268
Firefox 3 is changing from its former format to a a sqlite database instead.
269
We should consider how (lib)curl can/should support this.
270
http://curl.haxx.se/bug/feature.cgi?id=1871388
276
Reading input (to send to the remote server) on stdin is a crappy solution for
277
library purposes. We need to invent a good way for the application to be able
278
to provide the data to send.
280
6.2 ditch telnet-specific select
282
Move the telnet support's network select() loop go away and merge the code
283
into the main transfer loop. Until this is done, the multi interface won't
288
7.1 Disable specific versions
290
Provide an option that allows for disabling specific SSL versions, such as
291
SSLv2 http://curl.haxx.se/bug/feature.cgi?id=1767276
293
7.2 Provide mytex locking API
295
Provide a libcurl API for setting mutex callbacks in the underlying SSL
296
library, so that the same application code can use mutex-locking
297
independently of OpenSSL or GnutTLS being used.
301
Anton Fedorov's "dumpcert" patch:
302
http://curl.haxx.se/mail/lib-2004-03/0088.html
304
7.4 Evaluate SSL patches
306
Evaluate/apply Gertjan van Wingerde's SSL patches:
307
http://curl.haxx.se/mail/lib-2004-03/0087.html
309
7.5 Cache OpenSSL contexts
311
"Look at SSL cafile - quick traces look to me like these are done on every
312
request as well, when they should only be necessary once per ssl context (or
313
once per handle)". The major improvement we can rather easily do is to make
314
sure we don't create and kill a new SSL "context" for every request, but
315
instead make one for every connection and re-use that SSL context in the same
316
style connections are re-used. It will make us use slightly more memory but
317
it will libcurl do less creations and deletions of SSL contexts.
319
7.6 Export session ids
321
Add an interface to libcurl that enables "session IDs" to get
322
exported/imported. Cris Bailiff said: "OpenSSL has functions which can
323
serialise the current SSL state to a buffer of your choice, and recover/reset
324
the state from such a buffer at a later date - this is used by mod_ssl for
325
apache to implement and SSL session ID cache".
327
7.7 Provide callback for cert verfication
329
OpenSSL supports a callback for customised verification of the peer
330
certificate, but this doesn't seem to be exposed in the libcurl APIs. Could
331
it be? There's so much that could be done if it were!
333
7.8 Support other SSL libraries
335
Make curl's SSL layer capable of using other free SSL libraries. Such as
336
MatrixSSL (http://www.matrixssl.org/).
338
7.9 Support SRP on the TLS layer
340
Peter Sylvester's patch for SRP on the TLS layer. Awaits OpenSSL support for
341
this, no need to support this in libcurl before there's an OpenSSL release
344
7.10 improve configure --with-ssl
346
make the configure --with-ssl option first check for OpenSSL, then GnuTLS,
351
8.1 Make NTLM work without OpenSSL functions
353
Get NTLM working using the functions provided by libgcrypt, since GnuTLS
354
already depends on that to function. Not strictly SSL/TLS related, but
355
hey... Another option is to get available DES and MD4 source code from the
356
cryptopp library. They are fine license-wise, but are C++.
360
Is this even possible?
364
Work out a common method with Peter Sylvester's OpenSSL-patch for SRP on the
365
TLS to provide name and password. GnuTLS already supports it...
369
Fix the connection phase to be non-blocking when multi interface is used
373
Add a way to check if the connection seems to be alive, to correspond to the
374
SSL_peak() way we use with OpenSSL.
378
9.1 ditch ldap-specific select
215
380
* Look over the implementation. The looping will have to "go away" from the
216
381
lib/ldap.c source file and get moved to the main network code so that the
217
382
multi interface and friends will work for LDAP as well.
221
* RTSP - RFC2326 (protocol - very HTTP-like, also contains URL description)
223
* RSYNC (no RFCs for protocol nor URI/URL format). An implementation should
224
most probably use an existing rsync library, such as librsync.
228
* Add option that is similar to -O but that takes the output file name from
229
the Content-Disposition: header, and/or uses the local file name used in
230
redirections for the cases the server bounces the request further to a
231
different file (name): http://curl.haxx.se/bug/feature.cgi?id=1364676
233
* "curl --sync http://example.com/feed[1-100].rss" or
234
"curl --sync http://example.net/{index,calendar,history}.html"
236
Downloads a range or set of URLs using the remote name, but only if the
237
remote file is newer than the local file. A Last-Modified HTTP date header
238
should also be used to set the mod date on the downloaded file.
239
(idea from "Brianiac")
241
* Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'.
242
Requested by Dane Jensen and others. This is easily scripted though.
244
* Add an option that prevents cURL from overwriting existing local files. When
245
used, and there already is an existing file with the target file name
246
(either -O or -o), a number should be appended (and increased if already
247
existing). So that index.html becomes first index.html.1 and then
248
index.html.2 etc. Jeff Pohlmeyer suggested.
250
* "curl ftp://site.com/*.txt"
252
* The client could be told to use maximum N simultaneous parallel transfers
253
and then just make sure that happens. It should of course not make more
254
than one connection to the same remote host. This would require the client
255
to use the multi interface. http://curl.haxx.se/bug/feature.cgi?id=1558595
257
* Extending the capabilities of the multipart formposting. How about leaving
258
the ';type=foo' syntax as it is and adding an extra tag (headers) which
259
works like this: curl -F "coolfiles=@fil1.txt;headers=@fil1.hdr" where
260
fil1.hdr contains extra headers like
262
Content-Type: text/plain; charset=KOI8-R"
263
Content-Transfer-Encoding: base64
264
X-User-Comment: Please don't use browser specific HTML code
266
which should overwrite the program reasonable defaults (plain/text,
267
8bit...) (Idea brough to us by kromJx)
269
* ability to specify the classic computing suffixes on the range
270
specifications. For example, to download the first 500 Kilobytes of a file,
271
be able to specify the following for the -r option: "-r 0-500K" or for the
272
first 2 Megabytes of a file: "-r 0-2M". (Mark Smith suggested)
274
* --data-encode that URL encodes the data before posting
275
http://curl.haxx.se/mail/archive-2003-11/0091.html (Kevin Roth suggested)
277
* Provide a way to make options bound to a specific URL among several on the
278
command line. Possibly by letting ':' separate options between URLs,
281
curl --data foo --url url.com : \
283
--url url3.com --data foo3
285
(More details: http://curl.haxx.se/mail/archive-2004-07/0133.html)
287
The example would do a POST-GET-POST combination on a single command line.
291
* Consider extending 'roffit' to produce decent ASCII output, and use that
292
instead of (g)nroff when building src/hugehelp.c
296
* Make our own version of stunnel for simple port forwarding to enable HTTPS
297
and FTP-SSL tests without the stunnel dependency, and it could allow us to
298
provide test tools built with either OpenSSL or GnuTLS
300
* If perl wasn't found by the configure script, don't attempt to run the
301
tests but explain something nice why it doesn't.
303
* Extend the test suite to include more protocols. The telnet could just do
304
ftp or http operations (for which we have test servers).
306
* Make the test suite work on more platforms. OpenBSD and Mac OS. Remove
307
fork()s and it should become even more portable.
311
* #undef CURL_FTP_HTTPSTYLE_HEAD in lib/ftp.c to remove the HTTP-style headers
312
from being output in NOBODY requests over ftp
314
* Combine some of the error codes to remove duplicates. The original
315
numbering should not be changed, and the old identifiers would be
316
macroed to the new ones in an CURL_NO_OLDIES section to help with
317
backward compatibility.
319
Candidates for removal and their replacements:
321
CURLE_FILE_COULDNT_READ_FILE => CURLE_REMOTE_FILE_NOT_FOUND
322
CURLE_FTP_COULDNT_RETR_FILE => CURLE_REMOTE_FILE_NOT_FOUND
323
CURLE_FTP_COULDNT_USE_REST => CURLE_RANGE_ERROR
324
CURLE_FUNCTION_NOT_FOUND => CURLE_FAILED_INIT
325
CURLE_LDAP_INVALID_URL => CURLE_URL_MALFORMAT
326
CURLE_TFTP_NOSUCHUSER => CURLE_TFTP_ILLEGAL
327
CURLE_TFTP_NOTFOUND => CURLE_REMOTE_FILE_NOT_FOUND
328
CURLE_TFTP_PERM => CURLE_REMOTE_ACCESS_DENIED
332
* curl_easy_cleanup() returns void, but curl_multi_cleanup() returns a
333
CURLMcode. These should be changed to be the same.
335
* remove obsolete defines from curl/curl.h
337
* make several functions use size_t instead of int in their APIs
339
* remove the following functions from the public API:
341
curl_mprintf (and variations)
345
They will instead become curlx_ - alternatives. That makes the curl app
346
still capable of building with them from source.
348
* Remove support for CURLOPT_FAILONERROR, it has gotten too kludgy and weird
349
internally. Let the app judge success or not for itself.
388
RFC2326 (protocol - very HTTP-like, also contains URL description)
392
There's no RFC for protocol nor URI/URL format. An implementation should
393
most probably use an existing rsync library, such as librsync.
397
There exists a patch that claims to introduce this protocol:
398
http://osdir.com/ml/gnu.gnash.devel2/2006-11/msg00278.html, further details
399
in the feature-request: http://curl.haxx.se/bug/feature.cgi?id=1843469
403
11.1 Content-Disposition
405
Add option that is similar to -O but that takes the output file name from the
406
Content-Disposition: header, and/or uses the local file name used in
407
redirections for the cases the server bounces the request further to a
408
different file (name): http://curl.haxx.se/bug/feature.cgi?id=1364676
412
"curl --sync http://example.com/feed[1-100].rss" or
413
"curl --sync http://example.net/{index,calendar,history}.html"
415
Downloads a range or set of URLs using the remote name, but only if the
416
remote file is newer than the local file. A Last-Modified HTTP date header
417
should also be used to set the mod date on the downloaded file.
421
Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'.
422
This is easily scripted though.
424
11.4 prevent file overwriting
426
Add an option that prevents cURL from overwriting existing local files. When
427
used, and there already is an existing file with the target file name
428
(either -O or -o), a number should be appended (and increased if already
429
existing). So that index.html becomes first index.html.1 and then
432
11.5 ftp wildcard download
434
"curl ftp://site.com/*.txt"
436
11.6 simultaneous parallel transfers
438
The client could be told to use maximum N simultaneous parallel transfers and
439
then just make sure that happens. It should of course not make more than one
440
connection to the same remote host. This would require the client to use the
441
multi interface. http://curl.haxx.se/bug/feature.cgi?id=1558595
443
11.7 provide formpost headers
445
Extending the capabilities of the multipart formposting. How about leaving
446
the ';type=foo' syntax as it is and adding an extra tag (headers) which
447
works like this: curl -F "coolfiles=@fil1.txt;headers=@fil1.hdr" where
448
fil1.hdr contains extra headers like
450
Content-Type: text/plain; charset=KOI8-R"
451
Content-Transfer-Encoding: base64
452
X-User-Comment: Please don't use browser specific HTML code
454
which should overwrite the program reasonable defaults (plain/text,
457
11.8 url-specific options
459
Provide a way to make options bound to a specific URL among several on the
460
command line. Possibly by letting ':' separate options between URLs,
463
curl --data foo --url url.com : \
465
--url url3.com --data foo3
467
(More details: http://curl.haxx.se/mail/archive-2004-07/0133.html)
469
The example would do a POST-GET-POST combination on a single command line.
475
Consider extending 'roffit' to produce decent ASCII output, and use that
476
instead of (g)nroff when building src/hugehelp.c
482
Make our own version of stunnel for simple port forwarding to enable HTTPS
483
and FTP-SSL tests without the stunnel dependency, and it could allow us to
484
provide test tools built with either OpenSSL or GnuTLS
486
13.2 nicer lacking perl message
488
If perl wasn't found by the configure script, don't attempt to run the tests
489
but explain something nice why it doesn't.
491
13.3 more protocols supported
493
Extend the test suite to include more protocols. The telnet could just do ftp
494
or http operations (for which we have test servers).
496
13.4 more platforms supported
498
Make the test suite work on more platforms. OpenBSD and Mac OS. Remove
499
fork()s and it should become even more portable.
503
14.1 http-style HEAD output for ftp
505
#undef CURL_FTP_HTTPSTYLE_HEAD in lib/ftp.c to remove the HTTP-style headers
506
from being output in NOBODY requests over ftp
508
14.2 combine error codes
510
Combine some of the error codes to remove duplicates. The original
511
numbering should not be changed, and the old identifiers would be
512
macroed to the new ones in an CURL_NO_OLDIES section to help with
513
backward compatibility.
515
Candidates for removal and their replacements:
517
CURLE_FILE_COULDNT_READ_FILE => CURLE_REMOTE_FILE_NOT_FOUND
518
CURLE_FTP_COULDNT_RETR_FILE => CURLE_REMOTE_FILE_NOT_FOUND
519
CURLE_FTP_COULDNT_USE_REST => CURLE_RANGE_ERROR
520
CURLE_FUNCTION_NOT_FOUND => CURLE_FAILED_INIT
521
CURLE_LDAP_INVALID_URL => CURLE_URL_MALFORMAT
522
CURLE_TFTP_NOSUCHUSER => CURLE_TFTP_ILLEGAL
523
CURLE_TFTP_NOTFOUND => CURLE_REMOTE_FILE_NOT_FOUND
524
CURLE_TFTP_PERM => CURLE_REMOTE_ACCESS_DENIED
526
14.3 extend CURLOPT_SOCKOPTFUNCTION prototype
528
The current prototype only provides 'purpose' that tells what the
529
connection/socket is for, but not any protocol or similar. It makes it hard
530
for applications to differentiate on TCP vs UDP and even HTTP vs FTP and
533
15. Next major release
535
15.1 cleanup return codes
537
curl_easy_cleanup() returns void, but curl_multi_cleanup() returns a
538
CURLMcode. These should be changed to be the same.
540
15.2 remove obsolete defines
542
remove obsolete defines from curl/curl.h
546
make several functions use size_t instead of int in their APIs
548
15.4 remove several functions
550
remove the following functions from the public API:
554
curl_mprintf (and variations)
560
They will instead become curlx_ - alternatives. That makes the curl app
561
still capable of building with them from source.
563
15.5 remove CURLOPT_FAILONERROR
565
Remove support for CURLOPT_FAILONERROR, it has gotten too kludgy and weird
566
internally. Let the app judge success or not for itself.
568
15.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE
570
Remove support for a global DNS cache. Anything global is silly, and we
571
already offer the share interface for the same functionality but done