blob: d38a4aa7d1c3e0e41b42a7aec97cbf5edd3954ae [file] [log] [blame]
Daniel Stenberg7c37c6a2000-05-22 17:35:35 +00001 _ _ ____ _
2 ___| | | | _ \| |
3 / __| | | | |_) | |
4 | (__| |_| | _ <| |___
5 \___|\___/|_| \_\_____|
6
Daniel Stenberg41d81862007-12-08 23:00:00 +00007 Things that could be nice to do in the future
Daniel Stenberg7c37c6a2000-05-22 17:35:35 +00008
Daniel Stenberg9d68fde2002-08-14 23:35:19 +00009 Things to do in project cURL. Please tell us what you think, contribute and
Daniel Stenberg41d81862007-12-08 23:00:00 +000010 send us patches that improve things!
Daniel Stenberg7c37c6a2000-05-22 17:35:35 +000011
Daniel Stenberg3660f672003-08-11 16:17:51 +000012 All bugs documented in the KNOWN_BUGS document are subject for fixing!
13
Daniel Stenberg41d81862007-12-08 23:00:00 +000014 1. libcurl
15 1.1 Zero-copy interface
16 1.2 More data sharing
17 1.3 struct lifreq
Daniel Stenberg09e027b2008-11-11 13:33:01 +000018 1.4 signal-based resolver timeouts
Daniel Stenberg6704d442001-08-22 11:22:43 +000019
Daniel Stenberg41d81862007-12-08 23:00:00 +000020 2. libcurl - multi interface
21 2.1 More non-blocking
Daniel Stenberg09e027b2008-11-11 13:33:01 +000022 2.2 Remove easy interface internally
23 2.3 Avoid having to remove/readd handles
Daniel Stenberg3c50ea92008-11-17 09:35:10 +000024 2.4 Fix HTTP Pipelining for PUT
Daniel Stenberge60e7412001-11-02 12:51:18 +000025
Daniel Stenberg41d81862007-12-08 23:00:00 +000026 3. Documentation
27 3.1 More and better
Daniel Stenberg097938e2004-03-01 09:08:52 +000028
Daniel Stenberg41d81862007-12-08 23:00:00 +000029 4. FTP
30 4.1 PRET
31 4.2 Alter passive/active on failure and retry
32 4.3 Earlier bad letter detection
33 4.4 REST for large files
34 4.5 FTP proxy support
35 4.6 PORT port range
36 4.7 ASCII support
Daniel Stenberg01cfe672002-01-18 12:48:36 +000037
Daniel Stenberg41d81862007-12-08 23:00:00 +000038 5. HTTP
Daniel Stenberg09e027b2008-11-11 13:33:01 +000039 5.1 Better persistency for HTTP 1.0
40 5.2 support FF3 sqlite cookie files
Daniel Stenberg0d2cdd92004-10-08 09:57:33 +000041
Daniel Stenberg41d81862007-12-08 23:00:00 +000042 6. TELNET
43 6.1 ditch stdin
44 6.2 ditch telnet-specific select
Dan Fandrichddfbe8b2008-05-23 20:52:46 +000045 6.3 feature negotiation debug data
46 6.4 send data in chunks
Daniel Stenberg9395cad2005-01-11 22:26:00 +000047
Daniel Stenberg41d81862007-12-08 23:00:00 +000048 7. SSL
49 7.1 Disable specific versions
Dan Fandrich152cf632008-09-10 07:11:45 +000050 7.2 Provide mutex locking API
Daniel Stenberg09e027b2008-11-11 13:33:01 +000051 7.3 Evaluate SSL patches
52 7.4 Cache OpenSSL contexts
53 7.5 Export session ids
54 7.6 Provide callback for cert verification
55 7.7 Support other SSL libraries
56 7.8 Support SRP on the TLS layer
57 7.9 improve configure --with-ssl
Daniel Stenberg86660c72005-07-08 13:28:16 +000058
Daniel Stenberg41d81862007-12-08 23:00:00 +000059 8. GnuTLS
60 8.1 Make NTLM work without OpenSSL functions
Dan Fandrichddfbe8b2008-05-23 20:52:46 +000061 8.2 SSL engine stuff
Daniel Stenberg41d81862007-12-08 23:00:00 +000062 8.3 SRP
63 8.4 non-blocking
64 8.5 check connection
Daniel Stenbergb4113362005-12-10 22:14:17 +000065
Dan Fandrichddfbe8b2008-05-23 20:52:46 +000066 9. Other protocols
Daniel Stenberg41d81862007-12-08 23:00:00 +000067 9.1 ditch ldap-specific select
Daniel Stenberg16f3a322006-01-28 13:14:38 +000068
Daniel Stenberg41d81862007-12-08 23:00:00 +000069 10. New protocols
70 10.1 RTSP
71 10.2 RSYNC
Daniel Stenberg71b105c2007-12-09 12:26:05 +000072 10.3 RTMP
Daniel Stenberg58b04152007-08-07 13:01:36 +000073
Daniel Stenberg41d81862007-12-08 23:00:00 +000074 11. Client
75 11.1 Content-Disposition
76 11.2 sync
77 11.3 glob posts
78 11.4 prevent file overwriting
79 11.5 ftp wildcard download
80 11.6 simultaneous parallel transfers
81 11.7 provide formpost headers
82 11.8 url-specific options
Dan Fandrichddfbe8b2008-05-23 20:52:46 +000083 11.9 metalink support
84 11.10 warning when setting an option
Daniel Stenberg87c43512002-08-26 22:32:46 +000085
Daniel Stenberg41d81862007-12-08 23:00:00 +000086 12. Build
87 12.1 roffit
Daniel Stenberg87c43512002-08-26 22:32:46 +000088
Daniel Stenberg41d81862007-12-08 23:00:00 +000089 13. Test suite
90 13.1 SSL tunnel
91 13.2 nicer lacking perl message
92 13.3 more protocols supported
93 13.4 more platforms supported
Daniel Stenberg87c43512002-08-26 22:32:46 +000094
Daniel Stenberg41d81862007-12-08 23:00:00 +000095 14. Next SONAME bump
96 14.1 http-style HEAD output for ftp
97 14.2 combine error codes
Daniel Stenbergfcc48502008-01-04 22:16:16 +000098 14.3 extend CURLOPT_SOCKOPTFUNCTION prototype
Daniel Stenberg57007e82005-07-30 23:48:07 +000099
Daniel Stenberg41d81862007-12-08 23:00:00 +0000100 15. Next major release
101 15.1 cleanup return codes
102 15.2 remove obsolete defines
103 15.3 size_t
104 15.4 remove several functions
105 15.5 remove CURLOPT_FAILONERROR
Daniel Stenberg56f17d22008-01-15 22:15:55 +0000106 15.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE
Daniel Stenberg5cdcc2b2007-08-14 10:11:34 +0000107
Daniel Stenberg41d81862007-12-08 23:00:00 +0000108==============================================================================
Daniel Stenberge60e7412001-11-02 12:51:18 +0000109
Daniel Stenberg41d81862007-12-08 23:00:00 +00001101. libcurl
Daniel Stenberge60e7412001-11-02 12:51:18 +0000111
Daniel Stenberg41d81862007-12-08 23:00:00 +00001121.1 Zero-copy interface
Daniel Stenberge60e7412001-11-02 12:51:18 +0000113
Dan Fandrichddfbe8b2008-05-23 20:52:46 +0000114 Introduce another callback interface for upload/download that makes one less
Daniel Stenberg41d81862007-12-08 23:00:00 +0000115 copy of data and thus a faster operation.
116 [http://curl.haxx.se/dev/no_copy_callbacks.txt]
Daniel Stenberg3dbe7082007-09-13 09:02:15 +0000117
Daniel Stenberg41d81862007-12-08 23:00:00 +00001181.2 More data sharing
Daniel Stenberg3dbe7082007-09-13 09:02:15 +0000119
Daniel Stenberg41d81862007-12-08 23:00:00 +0000120 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
122 connection cache.
Daniel Stenberg3050ae52005-01-19 21:56:02 +0000123
Daniel Stenberg41d81862007-12-08 23:00:00 +00001241.3 struct lifreq
Daniel Stenberg3b491d02004-04-06 15:29:01 +0000125
Daniel Stenberg41d81862007-12-08 23:00:00 +0000126 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.
Daniel Stenberg339f84f2003-07-30 13:41:59 +0000129
Daniel Stenberg09e027b2008-11-11 13:33:01 +00001301.4 signal-based resolver timeouts
Dan Fandrich9b3f8632008-10-14 23:52:36 +0000131
132 libcurl built without an asynchronous resolver library uses alarm() to time
133 out DNS lookups. When a timeout occurs, this causes libcurl to jump from the
134 signal handler back into the library with a sigsetjmp, which effectively
135 causes libcurl to continue running within the signal handler. This is
136 non-portable and could cause problems on some platforms. A discussion on the
137 problem is available at http://curl.haxx.se/mail/lib-2008-09/0197.html
138
139 Also, alarm() provides timeout resolution only to the nearest second. alarm
140 ought to be replaced by setitimer on systems that support it.
141
Daniel Stenberg41d81862007-12-08 23:00:00 +00001422. libcurl - multi interface
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000143
Daniel Stenberg41d81862007-12-08 23:00:00 +00001442.1 More non-blocking
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000145
Dan Fandrich152cf632008-09-10 07:11:45 +0000146 Make sure we don't ever loop because of non-blocking sockets returning
Daniel Stenberg41d81862007-12-08 23:00:00 +0000147 EWOULDBLOCK or similar. The GnuTLS connection etc.
Daniel Stenberge60e7412001-11-02 12:51:18 +0000148
Daniel Stenberg09e027b2008-11-11 13:33:01 +00001492.2 Remove easy interface internally
Daniel Stenberg3b491d02004-04-06 15:29:01 +0000150
Daniel Stenberg41d81862007-12-08 23:00:00 +0000151 Make curl_easy_perform() a wrapper-function that simply creates a multi
152 handle, adds the easy handle to it, runs curl_multi_perform() until the
153 transfer is done, then detach the easy handle, destroy the multi handle and
154 return the easy handle's return code. This will thus make everything
155 internally use and assume the multi interface. The select()-loop should use
156 curl_multi_socket().
Daniel Stenberg3b491d02004-04-06 15:29:01 +0000157
Daniel Stenberg09e027b2008-11-11 13:33:01 +00001582.3 Avoid having to remove/readd handles
Daniel Stenberg5cffe052002-02-07 10:43:43 +0000159
Daniel Stenberg41d81862007-12-08 23:00:00 +0000160 curl_multi_handle_control() - this can control the easy handle (while) added
161 to a multi handle in various ways:
Daniel Stenberg60f19262001-11-13 09:56:29 +0000162
Daniel Stenberg41d81862007-12-08 23:00:00 +0000163 o RESTART, unconditionally restart this easy handle's transfer from the
164 start, re-init the state
Daniel Stenberg5c4b4222002-02-18 10:51:28 +0000165
Daniel Stenberg41d81862007-12-08 23:00:00 +0000166 o RESTART_COMPLETED, restart this easy handle's transfer but only if the
167 existing transfer has already completed and it is in a "finished state".
Daniel Stenberge60e7412001-11-02 12:51:18 +0000168
Daniel Stenberg41d81862007-12-08 23:00:00 +0000169 o STOP, just stop this transfer and consider it completed
Daniel Stenberg57007e82005-07-30 23:48:07 +0000170
Daniel Stenberg41d81862007-12-08 23:00:00 +0000171 o PAUSE?
Daniel Stenberg9853acb2005-08-29 06:59:44 +0000172
Daniel Stenberg41d81862007-12-08 23:00:00 +0000173 o RESUME?
Daniel Stenberg9853acb2005-08-29 06:59:44 +0000174
Daniel Stenberg3c50ea92008-11-17 09:35:10 +00001752.4 Fix HTTP Pipelining for PUT
176
177 HTTP Pipelining can be a way to greatly enhance performance for multiple
178 serial requests and currently libcurl only supports that for HEAD and GET
179 requests but it should also be possible for PUT.
180
181
Daniel Stenberg41d81862007-12-08 23:00:00 +00001823. Documentation
Daniel Stenberg9853acb2005-08-29 06:59:44 +0000183
Daniel Stenberg41d81862007-12-08 23:00:00 +00001843.1 More and better
Daniel Stenberg9853acb2005-08-29 06:59:44 +0000185
Daniel Stenberg41d81862007-12-08 23:00:00 +0000186 Exactly
Daniel Stenberg9853acb2005-08-29 06:59:44 +0000187
Daniel Stenberg41d81862007-12-08 23:00:00 +00001884. FTP
Daniel Stenbergbcccd2f2006-05-30 08:45:59 +0000189
Daniel Stenberg41d81862007-12-08 23:00:00 +00001904.1 PRET
Daniel Stenbergbcccd2f2006-05-30 08:45:59 +0000191
Daniel Stenberg41d81862007-12-08 23:00:00 +0000192 PRET is a command that primarily "drftpd" supports, which could be useful
193 when using libcurl against such a server. It is a non-standard and a rather
194 oddly designed command, but...
195 http://curl.haxx.se/bug/feature.cgi?id=1729967
196
1974.2 Alter passive/active on failure and retry
198
199 When trying to connect passively to a server which only supports active
200 connections, libcurl returns CURLE_FTP_WEIRD_PASV_REPLY and closes the
201 connection. There could be a way to fallback to an active connection (and
202 vice versa). http://curl.haxx.se/bug/feature.cgi?id=1754793
203
2044.3 Earlier bad letter detection
205
206 Make the detection of (bad) %0d and %0a codes in FTP url parts earlier in the
207 process to avoid doing a resolve and connect in vain.
208
2094.4 REST for large files
210
211 REST fix for servers not behaving well on >2GB requests. This should fail if
212 the server doesn't set the pointer to the requested index. The tricky
213 (impossible?) part is to figure out if the server did the right thing or not.
214
2154.5 FTP proxy support
216
217 Support the most common FTP proxies, Philip Newton provided a list allegedly
218 from ncftp. This is not a subject without debate, and is probably not really
219 suitable for libcurl. http://curl.haxx.se/mail/archive-2003-04/0126.html
220
2214.6 PORT port range
222
223 Make CURLOPT_FTPPORT support an additional port number on the IP/if/name,
224 like "blabla:[port]" or possibly even "blabla:[portfirst]-[portsecond]".
225 http://curl.haxx.se/bug/feature.cgi?id=1505166
226
2274.7 ASCII support
228
229 FTP ASCII transfers do not follow RFC959. They don't convert the data
230 accordingly.
231
2325. HTTP
233
Daniel Stenberg09e027b2008-11-11 13:33:01 +00002345.1 Better persistency for HTTP 1.0
Daniel Stenberg41d81862007-12-08 23:00:00 +0000235
236 "Better" support for persistent connections over HTTP 1.0
237 http://curl.haxx.se/bug/feature.cgi?id=1089001
238
Daniel Stenberg09e027b2008-11-11 13:33:01 +00002395.2 support FF3 sqlite cookie files
Daniel Stenberg9c7d4392008-01-14 17:49:06 +0000240
241 Firefox 3 is changing from its former format to a a sqlite database instead.
242 We should consider how (lib)curl can/should support this.
243 http://curl.haxx.se/bug/feature.cgi?id=1871388
244
Daniel Stenberg41d81862007-12-08 23:00:00 +00002456. TELNET
246
2476.1 ditch stdin
248
249Reading input (to send to the remote server) on stdin is a crappy solution for
250library purposes. We need to invent a good way for the application to be able
251to provide the data to send.
252
2536.2 ditch telnet-specific select
254
255 Move the telnet support's network select() loop go away and merge the code
256 into the main transfer loop. Until this is done, the multi interface won't
257 work for telnet.
258
Dan Fandrichddfbe8b2008-05-23 20:52:46 +00002596.3 feature negotiation debug data
260
261 Add telnet feature negotiation data to the debug callback as header data.
262
2636.4 send data in chunks
264
265 Currently, telnet sends data one byte at a time. This is fine for interactive
266 use, but inefficient for any other. Sent data should be sent in larger
267 chunks.
268
Daniel Stenberg41d81862007-12-08 23:00:00 +00002697. SSL
270
2717.1 Disable specific versions
272
273 Provide an option that allows for disabling specific SSL versions, such as
274 SSLv2 http://curl.haxx.se/bug/feature.cgi?id=1767276
275
Dan Fandrich152cf632008-09-10 07:11:45 +00002767.2 Provide mutex locking API
Daniel Stenberg41d81862007-12-08 23:00:00 +0000277
278 Provide a libcurl API for setting mutex callbacks in the underlying SSL
279 library, so that the same application code can use mutex-locking
280 independently of OpenSSL or GnutTLS being used.
281
Daniel Stenberg09e027b2008-11-11 13:33:01 +00002827.3 Evaluate SSL patches
Daniel Stenberg41d81862007-12-08 23:00:00 +0000283
284 Evaluate/apply Gertjan van Wingerde's SSL patches:
285 http://curl.haxx.se/mail/lib-2004-03/0087.html
286
Daniel Stenberg09e027b2008-11-11 13:33:01 +00002877.4 Cache OpenSSL contexts
Daniel Stenberg41d81862007-12-08 23:00:00 +0000288
289 "Look at SSL cafile - quick traces look to me like these are done on every
290 request as well, when they should only be necessary once per ssl context (or
291 once per handle)". The major improvement we can rather easily do is to make
292 sure we don't create and kill a new SSL "context" for every request, but
293 instead make one for every connection and re-use that SSL context in the same
294 style connections are re-used. It will make us use slightly more memory but
295 it will libcurl do less creations and deletions of SSL contexts.
296
Daniel Stenberg09e027b2008-11-11 13:33:01 +00002977.5 Export session ids
Daniel Stenberg41d81862007-12-08 23:00:00 +0000298
299 Add an interface to libcurl that enables "session IDs" to get
300 exported/imported. Cris Bailiff said: "OpenSSL has functions which can
301 serialise the current SSL state to a buffer of your choice, and recover/reset
302 the state from such a buffer at a later date - this is used by mod_ssl for
303 apache to implement and SSL session ID cache".
304
Daniel Stenberg09e027b2008-11-11 13:33:01 +00003057.6 Provide callback for cert verification
Daniel Stenberg41d81862007-12-08 23:00:00 +0000306
307 OpenSSL supports a callback for customised verification of the peer
308 certificate, but this doesn't seem to be exposed in the libcurl APIs. Could
309 it be? There's so much that could be done if it were!
310
Daniel Stenberg09e027b2008-11-11 13:33:01 +00003117.7 Support other SSL libraries
Daniel Stenberg41d81862007-12-08 23:00:00 +0000312
313 Make curl's SSL layer capable of using other free SSL libraries. Such as
314 MatrixSSL (http://www.matrixssl.org/).
315
Daniel Stenberg09e027b2008-11-11 13:33:01 +00003167.8 Support SRP on the TLS layer
Daniel Stenberg41d81862007-12-08 23:00:00 +0000317
318 Peter Sylvester's patch for SRP on the TLS layer. Awaits OpenSSL support for
319 this, no need to support this in libcurl before there's an OpenSSL release
320 that does it.
321
Daniel Stenberg09e027b2008-11-11 13:33:01 +00003227.9 improve configure --with-ssl
Daniel Stenberg41d81862007-12-08 23:00:00 +0000323
324 make the configure --with-ssl option first check for OpenSSL, then GnuTLS,
325 then NSS...
326
3278. GnuTLS
328
3298.1 Make NTLM work without OpenSSL functions
330
331 Get NTLM working using the functions provided by libgcrypt, since GnuTLS
332 already depends on that to function. Not strictly SSL/TLS related, but
333 hey... Another option is to get available DES and MD4 source code from the
334 cryptopp library. They are fine license-wise, but are C++.
335
Dan Fandrichddfbe8b2008-05-23 20:52:46 +00003368.2 SSL engine stuff
Daniel Stenberg41d81862007-12-08 23:00:00 +0000337
338 Is this even possible?
339
3408.3 SRP
341
342 Work out a common method with Peter Sylvester's OpenSSL-patch for SRP on the
343 TLS to provide name and password. GnuTLS already supports it...
344
3458.4 non-blocking
346
347 Fix the connection phase to be non-blocking when multi interface is used
348
3498.5 check connection
350
351 Add a way to check if the connection seems to be alive, to correspond to the
352 SSL_peak() way we use with OpenSSL.
353
Dan Fandrichddfbe8b2008-05-23 20:52:46 +00003549. Other protocols
Daniel Stenberg41d81862007-12-08 23:00:00 +0000355
3569.1 ditch ldap-specific select
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000357
358 * Look over the implementation. The looping will have to "go away" from the
359 lib/ldap.c source file and get moved to the main network code so that the
360 multi interface and friends will work for LDAP as well.
361
Dan Fandrichddfbe8b2008-05-23 20:52:46 +00003629.2 stop TFTP blocking
363
364 Stop TFTP from being blocking and doing its own read loop in tftp_do.
365
Daniel Stenberg41d81862007-12-08 23:00:00 +000036610. New protocols
Daniel Stenberg29108802004-12-22 09:19:29 +0000367
Daniel Stenberg41d81862007-12-08 23:00:00 +000036810.1 RTSP
Daniel Stenberg29108802004-12-22 09:19:29 +0000369
Daniel Stenberg41d81862007-12-08 23:00:00 +0000370 RFC2326 (protocol - very HTTP-like, also contains URL description)
Daniel Stenberg29108802004-12-22 09:19:29 +0000371
Daniel Stenberg41d81862007-12-08 23:00:00 +000037210.2 RSYNC
Daniel Stenberge60e7412001-11-02 12:51:18 +0000373
Daniel Stenberga03c2d82007-12-09 12:12:52 +0000374 There's no RFC for protocol nor URI/URL format. An implementation should
375 most probably use an existing rsync library, such as librsync.
Daniel Stenberg3dbe7082007-09-13 09:02:15 +0000376
Daniel Stenbergccb49562007-12-09 12:22:22 +000037710.3 RTMP
378
379 There exists a patch that claims to introduce this protocol:
380 http://osdir.com/ml/gnu.gnash.devel2/2006-11/msg00278.html, further details
381 in the feature-request: http://curl.haxx.se/bug/feature.cgi?id=1843469
382
Daniel Stenberg41d81862007-12-08 23:00:00 +000038311. Client
Daniel Stenberg33929112004-09-09 06:58:01 +0000384
Daniel Stenberg41d81862007-12-08 23:00:00 +000038511.1 Content-Disposition
Daniel Stenberg33929112004-09-09 06:58:01 +0000386
Daniel Stenberg41d81862007-12-08 23:00:00 +0000387 Add option that is similar to -O but that takes the output file name from the
388 Content-Disposition: header, and/or uses the local file name used in
389 redirections for the cases the server bounces the request further to a
390 different file (name): http://curl.haxx.se/bug/feature.cgi?id=1364676
Daniel Stenberg84ec4062004-08-13 12:06:30 +0000391
Daniel Stenberg41d81862007-12-08 23:00:00 +000039211.2 sync
Daniel Stenberg87c43512002-08-26 22:32:46 +0000393
Daniel Stenberg41d81862007-12-08 23:00:00 +0000394 "curl --sync http://example.com/feed[1-100].rss" or
395 "curl --sync http://example.net/{index,calendar,history}.html"
Daniel Stenberge60e7412001-11-02 12:51:18 +0000396
Daniel Stenberg41d81862007-12-08 23:00:00 +0000397 Downloads a range or set of URLs using the remote name, but only if the
398 remote file is newer than the local file. A Last-Modified HTTP date header
399 should also be used to set the mod date on the downloaded file.
Daniel Stenbergd12fd892001-12-06 14:40:16 +0000400
Daniel Stenberg41d81862007-12-08 23:00:00 +000040111.3 glob posts
Daniel Stenberg5c4b4222002-02-18 10:51:28 +0000402
Daniel Stenberg41d81862007-12-08 23:00:00 +0000403 Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'.
404 This is easily scripted though.
Daniel Stenberg5c4b4222002-02-18 10:51:28 +0000405
Daniel Stenberg41d81862007-12-08 23:00:00 +000040611.4 prevent file overwriting
Daniel Stenberg5c4b4222002-02-18 10:51:28 +0000407
Daniel Stenberg41d81862007-12-08 23:00:00 +0000408 Add an option that prevents cURL from overwriting existing local files. When
409 used, and there already is an existing file with the target file name
410 (either -O or -o), a number should be appended (and increased if already
411 existing). So that index.html becomes first index.html.1 and then
412 index.html.2 etc.
Daniel Stenberg4c3a2312004-01-09 08:59:55 +0000413
Daniel Stenberg41d81862007-12-08 23:00:00 +000041411.5 ftp wildcard download
Daniel Stenberg391a37e2003-12-08 13:48:23 +0000415
Daniel Stenberg41d81862007-12-08 23:00:00 +0000416 "curl ftp://site.com/*.txt"
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000417
Daniel Stenberg41d81862007-12-08 23:00:00 +000041811.6 simultaneous parallel transfers
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000419
Daniel Stenberg41d81862007-12-08 23:00:00 +0000420 The client could be told to use maximum N simultaneous parallel transfers and
421 then just make sure that happens. It should of course not make more than one
422 connection to the same remote host. This would require the client to use the
423 multi interface. http://curl.haxx.se/bug/feature.cgi?id=1558595
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000424
Daniel Stenberg41d81862007-12-08 23:00:00 +000042511.7 provide formpost headers
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000426
Daniel Stenberg41d81862007-12-08 23:00:00 +0000427 Extending the capabilities of the multipart formposting. How about leaving
428 the ';type=foo' syntax as it is and adding an extra tag (headers) which
429 works like this: curl -F "coolfiles=@fil1.txt;headers=@fil1.hdr" where
430 fil1.hdr contains extra headers like
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000431
Daniel Stenberg41d81862007-12-08 23:00:00 +0000432 Content-Type: text/plain; charset=KOI8-R"
433 Content-Transfer-Encoding: base64
434 X-User-Comment: Please don't use browser specific HTML code
Daniel Stenberg3de85772004-12-21 10:54:21 +0000435
Daniel Stenberg41d81862007-12-08 23:00:00 +0000436 which should overwrite the program reasonable defaults (plain/text,
437 8bit...)
Daniel Stenberge60e7412001-11-02 12:51:18 +0000438
Daniel Stenberg41d81862007-12-08 23:00:00 +000043911.8 url-specific options
Daniel Stenberg0e899d72006-12-19 14:28:01 +0000440
Daniel Stenberg41d81862007-12-08 23:00:00 +0000441 Provide a way to make options bound to a specific URL among several on the
442 command line. Possibly by letting ':' separate options between URLs,
443 similar to this:
Daniel Stenberg96b71312003-03-15 15:08:55 +0000444
Daniel Stenberg41d81862007-12-08 23:00:00 +0000445 curl --data foo --url url.com : \
446 --url url2.com : \
447 --url url3.com --data foo3
Daniel Stenberge60e7412001-11-02 12:51:18 +0000448
Daniel Stenberg41d81862007-12-08 23:00:00 +0000449 (More details: http://curl.haxx.se/mail/archive-2004-07/0133.html)
Daniel Stenberge60e7412001-11-02 12:51:18 +0000450
Daniel Stenberg41d81862007-12-08 23:00:00 +0000451 The example would do a POST-GET-POST combination on a single command line.
Daniel Stenbergf3c7adc2007-08-17 22:21:41 +0000452
Dan Fandrichddfbe8b2008-05-23 20:52:46 +000045311.9 metalink support
454
455 Add metalink support to curl (http://www.metalinker.org/). This is most useful
456 with simultaneous parallel transfers (11.6) but not necessary.
457
45811.10 warning when setting an option
459
460 Display a warning when libcurl returns an error when setting an option.
461 This can be useful to tell when support for a particular feature hasn't been
462 compiled into the library.
463
Daniel Stenberg41d81862007-12-08 23:00:00 +000046412. Build
Daniel Stenbergf3c7adc2007-08-17 22:21:41 +0000465
Daniel Stenberg41d81862007-12-08 23:00:00 +000046612.1 roffit
Dan Fandrich9f44a952007-08-30 20:34:57 +0000467
Daniel Stenberg41d81862007-12-08 23:00:00 +0000468 Consider extending 'roffit' to produce decent ASCII output, and use that
469 instead of (g)nroff when building src/hugehelp.c
Dan Fandrich9f44a952007-08-30 20:34:57 +0000470
Daniel Stenberg41d81862007-12-08 23:00:00 +000047113. Test suite
Dan Fandrich9f44a952007-08-30 20:34:57 +0000472
Daniel Stenberg41d81862007-12-08 23:00:00 +000047313.1 SSL tunnel
Daniel Stenberg83a46382003-03-10 20:46:54 +0000474
Daniel Stenberg41d81862007-12-08 23:00:00 +0000475 Make our own version of stunnel for simple port forwarding to enable HTTPS
476 and FTP-SSL tests without the stunnel dependency, and it could allow us to
477 provide test tools built with either OpenSSL or GnuTLS
Daniel Stenberg83a46382003-03-10 20:46:54 +0000478
Daniel Stenberg41d81862007-12-08 23:00:00 +000047913.2 nicer lacking perl message
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000480
Daniel Stenberg41d81862007-12-08 23:00:00 +0000481 If perl wasn't found by the configure script, don't attempt to run the tests
482 but explain something nice why it doesn't.
Daniel Stenberg35840a22004-07-01 08:22:52 +0000483
Daniel Stenberg41d81862007-12-08 23:00:00 +000048413.3 more protocols supported
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000485
Daniel Stenberg41d81862007-12-08 23:00:00 +0000486 Extend the test suite to include more protocols. The telnet could just do ftp
487 or http operations (for which we have test servers).
Daniel Stenberga00e7f02004-10-25 11:28:40 +0000488
Daniel Stenberg41d81862007-12-08 23:00:00 +000048913.4 more platforms supported
490
491 Make the test suite work on more platforms. OpenBSD and Mac OS. Remove
492 fork()s and it should become even more portable.
493
49414. Next SONAME bump
495
49614.1 http-style HEAD output for ftp
497
498 #undef CURL_FTP_HTTPSTYLE_HEAD in lib/ftp.c to remove the HTTP-style headers
499 from being output in NOBODY requests over ftp
500
50114.2 combine error codes
502
503 Combine some of the error codes to remove duplicates. The original
504 numbering should not be changed, and the old identifiers would be
505 macroed to the new ones in an CURL_NO_OLDIES section to help with
506 backward compatibility.
507
508 Candidates for removal and their replacements:
509
510 CURLE_FILE_COULDNT_READ_FILE => CURLE_REMOTE_FILE_NOT_FOUND
511 CURLE_FTP_COULDNT_RETR_FILE => CURLE_REMOTE_FILE_NOT_FOUND
512 CURLE_FTP_COULDNT_USE_REST => CURLE_RANGE_ERROR
513 CURLE_FUNCTION_NOT_FOUND => CURLE_FAILED_INIT
514 CURLE_LDAP_INVALID_URL => CURLE_URL_MALFORMAT
515 CURLE_TFTP_NOSUCHUSER => CURLE_TFTP_ILLEGAL
516 CURLE_TFTP_NOTFOUND => CURLE_REMOTE_FILE_NOT_FOUND
517 CURLE_TFTP_PERM => CURLE_REMOTE_ACCESS_DENIED
518
Daniel Stenbergfcc48502008-01-04 22:16:16 +000051914.3 extend CURLOPT_SOCKOPTFUNCTION prototype
520
521 The current prototype only provides 'purpose' that tells what the
522 connection/socket is for, but not any protocol or similar. It makes it hard
523 for applications to differentiate on TCP vs UDP and even HTTP vs FTP and
524 similar.
525
Daniel Stenberg41d81862007-12-08 23:00:00 +000052615. Next major release
527
52815.1 cleanup return codes
529
530 curl_easy_cleanup() returns void, but curl_multi_cleanup() returns a
531 CURLMcode. These should be changed to be the same.
532
53315.2 remove obsolete defines
534
535 remove obsolete defines from curl/curl.h
536
53715.3 size_t
538
539 make several functions use size_t instead of int in their APIs
540
54115.4 remove several functions
542
543 remove the following functions from the public API:
544
545 curl_getenv
546
547 curl_mprintf (and variations)
548
549 curl_strequal
550
551 curl_strnequal
552
553 They will instead become curlx_ - alternatives. That makes the curl app
554 still capable of building with them from source.
555
55615.5 remove CURLOPT_FAILONERROR
557
558 Remove support for CURLOPT_FAILONERROR, it has gotten too kludgy and weird
559 internally. Let the app judge success or not for itself.
Daniel Stenberg56f17d22008-01-15 22:15:55 +0000560
56115.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE
562
563 Remove support for a global DNS cache. Anything global is silly, and we
564 already offer the share interface for the same functionality but done
565 "right".