blob: 055101e5990c798e4ac6c6011f2a6d8f7ff5acbd [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
Daniel Stenberg43fba262009-09-05 17:49:07 +000035 4.6 ASCII support
Daniel Stenberg01cfe672002-01-18 12:48:36 +000036
Daniel Stenberg41d81862007-12-08 23:00:00 +000037 5. HTTP
Daniel Stenberg09e027b2008-11-11 13:33:01 +000038 5.1 Better persistency for HTTP 1.0
39 5.2 support FF3 sqlite cookie files
Daniel Stenberg6291a1c2010-01-21 09:32:51 +000040 5.3 Rearrange request header order
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 Stenbergb8b8c3d2009-10-17 19:31:57 +000058 7.10 Make NTLM work with other crypto functions
Daniel Stenberg86660c72005-07-08 13:28:16 +000059
Daniel Stenberg41d81862007-12-08 23:00:00 +000060 8. GnuTLS
Daniel Stenbergb8b8c3d2009-10-17 19:31:57 +000061 8.1 SSL engine stuff
62 8.2 SRP
63 8.3 non-blocking
64 8.4 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
Daniel Stenberg43fba262009-09-05 17:49:07 +00002214.6 ASCII support
Daniel Stenberg41d81862007-12-08 23:00:00 +0000222
223 FTP ASCII transfers do not follow RFC959. They don't convert the data
224 accordingly.
225
2265. HTTP
227
Daniel Stenberg09e027b2008-11-11 13:33:01 +00002285.1 Better persistency for HTTP 1.0
Daniel Stenberg41d81862007-12-08 23:00:00 +0000229
230 "Better" support for persistent connections over HTTP 1.0
231 http://curl.haxx.se/bug/feature.cgi?id=1089001
232
Daniel Stenberg09e027b2008-11-11 13:33:01 +00002335.2 support FF3 sqlite cookie files
Daniel Stenberg9c7d4392008-01-14 17:49:06 +0000234
235 Firefox 3 is changing from its former format to a a sqlite database instead.
236 We should consider how (lib)curl can/should support this.
237 http://curl.haxx.se/bug/feature.cgi?id=1871388
238
Daniel Stenberg6291a1c2010-01-21 09:32:51 +00002395.3 Rearrange request header order
Daniel Stenberg2c4fcf22009-08-19 07:09:13 +0000240
241 Server implementors often make an effort to detect browser and to reject
242 clients it can detect to not match. One of the last details we cannot yet
243 control in libcurl's HTTP requests, which also can be exploited to detect
244 that libcurl is in fact used even when it tries to impersonate a browser, is
245 the order of the request headers. I propose that we introduce a new option in
246 which you give headers a value, and then when the HTTP request is built it
247 sorts the headers based on that number. We could then have internally created
248 headers use a default value so only headers that need to be moved have to be
249 specified.
250
251
Daniel Stenberg41d81862007-12-08 23:00:00 +00002526. TELNET
253
2546.1 ditch stdin
255
256Reading input (to send to the remote server) on stdin is a crappy solution for
257library purposes. We need to invent a good way for the application to be able
258to provide the data to send.
259
2606.2 ditch telnet-specific select
261
262 Move the telnet support's network select() loop go away and merge the code
263 into the main transfer loop. Until this is done, the multi interface won't
264 work for telnet.
265
Dan Fandrichddfbe8b2008-05-23 20:52:46 +00002666.3 feature negotiation debug data
267
268 Add telnet feature negotiation data to the debug callback as header data.
269
2706.4 send data in chunks
271
272 Currently, telnet sends data one byte at a time. This is fine for interactive
273 use, but inefficient for any other. Sent data should be sent in larger
274 chunks.
275
Daniel Stenberg41d81862007-12-08 23:00:00 +00002767. SSL
277
2787.1 Disable specific versions
279
280 Provide an option that allows for disabling specific SSL versions, such as
281 SSLv2 http://curl.haxx.se/bug/feature.cgi?id=1767276
282
Dan Fandrich152cf632008-09-10 07:11:45 +00002837.2 Provide mutex locking API
Daniel Stenberg41d81862007-12-08 23:00:00 +0000284
285 Provide a libcurl API for setting mutex callbacks in the underlying SSL
286 library, so that the same application code can use mutex-locking
287 independently of OpenSSL or GnutTLS being used.
288
Daniel Stenberg09e027b2008-11-11 13:33:01 +00002897.3 Evaluate SSL patches
Daniel Stenberg41d81862007-12-08 23:00:00 +0000290
291 Evaluate/apply Gertjan van Wingerde's SSL patches:
292 http://curl.haxx.se/mail/lib-2004-03/0087.html
293
Daniel Stenberg09e027b2008-11-11 13:33:01 +00002947.4 Cache OpenSSL contexts
Daniel Stenberg41d81862007-12-08 23:00:00 +0000295
296 "Look at SSL cafile - quick traces look to me like these are done on every
297 request as well, when they should only be necessary once per ssl context (or
298 once per handle)". The major improvement we can rather easily do is to make
299 sure we don't create and kill a new SSL "context" for every request, but
300 instead make one for every connection and re-use that SSL context in the same
301 style connections are re-used. It will make us use slightly more memory but
302 it will libcurl do less creations and deletions of SSL contexts.
303
Daniel Stenberg09e027b2008-11-11 13:33:01 +00003047.5 Export session ids
Daniel Stenberg41d81862007-12-08 23:00:00 +0000305
306 Add an interface to libcurl that enables "session IDs" to get
307 exported/imported. Cris Bailiff said: "OpenSSL has functions which can
308 serialise the current SSL state to a buffer of your choice, and recover/reset
309 the state from such a buffer at a later date - this is used by mod_ssl for
310 apache to implement and SSL session ID cache".
311
Daniel Stenberg09e027b2008-11-11 13:33:01 +00003127.6 Provide callback for cert verification
Daniel Stenberg41d81862007-12-08 23:00:00 +0000313
314 OpenSSL supports a callback for customised verification of the peer
315 certificate, but this doesn't seem to be exposed in the libcurl APIs. Could
316 it be? There's so much that could be done if it were!
317
Daniel Stenberg09e027b2008-11-11 13:33:01 +00003187.7 Support other SSL libraries
Daniel Stenberg41d81862007-12-08 23:00:00 +0000319
320 Make curl's SSL layer capable of using other free SSL libraries. Such as
321 MatrixSSL (http://www.matrixssl.org/).
322
Daniel Stenberg09e027b2008-11-11 13:33:01 +00003237.8 Support SRP on the TLS layer
Daniel Stenberg41d81862007-12-08 23:00:00 +0000324
325 Peter Sylvester's patch for SRP on the TLS layer. Awaits OpenSSL support for
326 this, no need to support this in libcurl before there's an OpenSSL release
327 that does it.
328
Daniel Stenberg09e027b2008-11-11 13:33:01 +00003297.9 improve configure --with-ssl
Daniel Stenberg41d81862007-12-08 23:00:00 +0000330
331 make the configure --with-ssl option first check for OpenSSL, then GnuTLS,
332 then NSS...
333
Daniel Stenbergb8b8c3d2009-10-17 19:31:57 +00003347.10 Make NTLM work with other crypto functions
335
336 Get NTLM working using the functions provided by NSS etc. Not strictly
337 SSL/TLS related, but hey... Another option is to get available DES and MD4
338 source code from the cryptopp library. They are fine license-wise, but are
339 C++. NTLM currenly only works when libcurl is built with OpenSSL or GnuTLS
340 support.
341
Daniel Stenberg41d81862007-12-08 23:00:00 +00003428. GnuTLS
343
Daniel Stenbergb8b8c3d2009-10-17 19:31:57 +00003448.1 SSL engine stuff
Daniel Stenberg41d81862007-12-08 23:00:00 +0000345
346 Is this even possible?
347
Daniel Stenbergb8b8c3d2009-10-17 19:31:57 +00003488.2 SRP
Daniel Stenberg41d81862007-12-08 23:00:00 +0000349
350 Work out a common method with Peter Sylvester's OpenSSL-patch for SRP on the
351 TLS to provide name and password. GnuTLS already supports it...
352
Daniel Stenbergb8b8c3d2009-10-17 19:31:57 +00003538.3 non-blocking
Daniel Stenberg41d81862007-12-08 23:00:00 +0000354
355 Fix the connection phase to be non-blocking when multi interface is used
356
Daniel Stenbergb8b8c3d2009-10-17 19:31:57 +00003578.4 check connection
Daniel Stenberg41d81862007-12-08 23:00:00 +0000358
359 Add a way to check if the connection seems to be alive, to correspond to the
360 SSL_peak() way we use with OpenSSL.
361
Dan Fandrichddfbe8b2008-05-23 20:52:46 +00003629. Other protocols
Daniel Stenberg41d81862007-12-08 23:00:00 +0000363
3649.1 ditch ldap-specific select
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000365
366 * Look over the implementation. The looping will have to "go away" from the
367 lib/ldap.c source file and get moved to the main network code so that the
368 multi interface and friends will work for LDAP as well.
369
Dan Fandrichddfbe8b2008-05-23 20:52:46 +00003709.2 stop TFTP blocking
371
372 Stop TFTP from being blocking and doing its own read loop in tftp_do.
373
Daniel Stenberg41d81862007-12-08 23:00:00 +000037410. New protocols
Daniel Stenberg29108802004-12-22 09:19:29 +0000375
Daniel Stenberg41d81862007-12-08 23:00:00 +000037610.1 RTSP
Daniel Stenberg29108802004-12-22 09:19:29 +0000377
Daniel Stenberg41d81862007-12-08 23:00:00 +0000378 RFC2326 (protocol - very HTTP-like, also contains URL description)
Daniel Stenberg29108802004-12-22 09:19:29 +0000379
Daniel Stenberg41d81862007-12-08 23:00:00 +000038010.2 RSYNC
Daniel Stenberge60e7412001-11-02 12:51:18 +0000381
Daniel Stenberga03c2d82007-12-09 12:12:52 +0000382 There's no RFC for protocol nor URI/URL format. An implementation should
383 most probably use an existing rsync library, such as librsync.
Daniel Stenberg3dbe7082007-09-13 09:02:15 +0000384
Daniel Stenbergccb49562007-12-09 12:22:22 +000038510.3 RTMP
386
387 There exists a patch that claims to introduce this protocol:
388 http://osdir.com/ml/gnu.gnash.devel2/2006-11/msg00278.html, further details
389 in the feature-request: http://curl.haxx.se/bug/feature.cgi?id=1843469
390
Daniel Stenberg41d81862007-12-08 23:00:00 +000039111. Client
Daniel Stenberg33929112004-09-09 06:58:01 +0000392
Daniel Stenberg41d81862007-12-08 23:00:00 +000039311.1 Content-Disposition
Daniel Stenberg33929112004-09-09 06:58:01 +0000394
Daniel Stenberg41d81862007-12-08 23:00:00 +0000395 Add option that is similar to -O but that takes the output file name from the
396 Content-Disposition: header, and/or uses the local file name used in
397 redirections for the cases the server bounces the request further to a
398 different file (name): http://curl.haxx.se/bug/feature.cgi?id=1364676
Daniel Stenberg84ec4062004-08-13 12:06:30 +0000399
Daniel Stenberg41d81862007-12-08 23:00:00 +000040011.2 sync
Daniel Stenberg87c43512002-08-26 22:32:46 +0000401
Daniel Stenberg41d81862007-12-08 23:00:00 +0000402 "curl --sync http://example.com/feed[1-100].rss" or
403 "curl --sync http://example.net/{index,calendar,history}.html"
Daniel Stenberge60e7412001-11-02 12:51:18 +0000404
Daniel Stenberg41d81862007-12-08 23:00:00 +0000405 Downloads a range or set of URLs using the remote name, but only if the
406 remote file is newer than the local file. A Last-Modified HTTP date header
407 should also be used to set the mod date on the downloaded file.
Daniel Stenbergd12fd892001-12-06 14:40:16 +0000408
Daniel Stenberg41d81862007-12-08 23:00:00 +000040911.3 glob posts
Daniel Stenberg5c4b4222002-02-18 10:51:28 +0000410
Daniel Stenberg41d81862007-12-08 23:00:00 +0000411 Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'.
412 This is easily scripted though.
Daniel Stenberg5c4b4222002-02-18 10:51:28 +0000413
Daniel Stenberg41d81862007-12-08 23:00:00 +000041411.4 prevent file overwriting
Daniel Stenberg5c4b4222002-02-18 10:51:28 +0000415
Daniel Stenberg41d81862007-12-08 23:00:00 +0000416 Add an option that prevents cURL from overwriting existing local files. When
417 used, and there already is an existing file with the target file name
418 (either -O or -o), a number should be appended (and increased if already
419 existing). So that index.html becomes first index.html.1 and then
420 index.html.2 etc.
Daniel Stenberg4c3a2312004-01-09 08:59:55 +0000421
Daniel Stenberg41d81862007-12-08 23:00:00 +000042211.5 ftp wildcard download
Daniel Stenberg391a37e2003-12-08 13:48:23 +0000423
Daniel Stenberg41d81862007-12-08 23:00:00 +0000424 "curl ftp://site.com/*.txt"
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000425
Daniel Stenberg41d81862007-12-08 23:00:00 +000042611.6 simultaneous parallel transfers
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000427
Daniel Stenberg41d81862007-12-08 23:00:00 +0000428 The client could be told to use maximum N simultaneous parallel transfers and
429 then just make sure that happens. It should of course not make more than one
430 connection to the same remote host. This would require the client to use the
431 multi interface. http://curl.haxx.se/bug/feature.cgi?id=1558595
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000432
Daniel Stenberg41d81862007-12-08 23:00:00 +000043311.7 provide formpost headers
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000434
Daniel Stenberg41d81862007-12-08 23:00:00 +0000435 Extending the capabilities of the multipart formposting. How about leaving
436 the ';type=foo' syntax as it is and adding an extra tag (headers) which
437 works like this: curl -F "coolfiles=@fil1.txt;headers=@fil1.hdr" where
438 fil1.hdr contains extra headers like
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000439
Daniel Stenberg41d81862007-12-08 23:00:00 +0000440 Content-Type: text/plain; charset=KOI8-R"
441 Content-Transfer-Encoding: base64
442 X-User-Comment: Please don't use browser specific HTML code
Daniel Stenberg3de85772004-12-21 10:54:21 +0000443
Daniel Stenberg41d81862007-12-08 23:00:00 +0000444 which should overwrite the program reasonable defaults (plain/text,
445 8bit...)
Daniel Stenberge60e7412001-11-02 12:51:18 +0000446
Daniel Stenberg41d81862007-12-08 23:00:00 +000044711.8 url-specific options
Daniel Stenberg0e899d72006-12-19 14:28:01 +0000448
Daniel Stenberg41d81862007-12-08 23:00:00 +0000449 Provide a way to make options bound to a specific URL among several on the
450 command line. Possibly by letting ':' separate options between URLs,
451 similar to this:
Daniel Stenberg96b71312003-03-15 15:08:55 +0000452
Daniel Stenberg41d81862007-12-08 23:00:00 +0000453 curl --data foo --url url.com : \
454 --url url2.com : \
455 --url url3.com --data foo3
Daniel Stenberge60e7412001-11-02 12:51:18 +0000456
Daniel Stenberg41d81862007-12-08 23:00:00 +0000457 (More details: http://curl.haxx.se/mail/archive-2004-07/0133.html)
Daniel Stenberge60e7412001-11-02 12:51:18 +0000458
Daniel Stenberg41d81862007-12-08 23:00:00 +0000459 The example would do a POST-GET-POST combination on a single command line.
Daniel Stenbergf3c7adc2007-08-17 22:21:41 +0000460
Dan Fandrichddfbe8b2008-05-23 20:52:46 +000046111.9 metalink support
462
463 Add metalink support to curl (http://www.metalinker.org/). This is most useful
464 with simultaneous parallel transfers (11.6) but not necessary.
465
46611.10 warning when setting an option
467
468 Display a warning when libcurl returns an error when setting an option.
469 This can be useful to tell when support for a particular feature hasn't been
470 compiled into the library.
471
Daniel Stenberg41d81862007-12-08 23:00:00 +000047212. Build
Daniel Stenbergf3c7adc2007-08-17 22:21:41 +0000473
Daniel Stenberg41d81862007-12-08 23:00:00 +000047412.1 roffit
Dan Fandrich9f44a952007-08-30 20:34:57 +0000475
Daniel Stenberg41d81862007-12-08 23:00:00 +0000476 Consider extending 'roffit' to produce decent ASCII output, and use that
477 instead of (g)nroff when building src/hugehelp.c
Dan Fandrich9f44a952007-08-30 20:34:57 +0000478
Daniel Stenberg41d81862007-12-08 23:00:00 +000047913. Test suite
Dan Fandrich9f44a952007-08-30 20:34:57 +0000480
Daniel Stenberg41d81862007-12-08 23:00:00 +000048113.1 SSL tunnel
Daniel Stenberg83a46382003-03-10 20:46:54 +0000482
Daniel Stenberg41d81862007-12-08 23:00:00 +0000483 Make our own version of stunnel for simple port forwarding to enable HTTPS
484 and FTP-SSL tests without the stunnel dependency, and it could allow us to
485 provide test tools built with either OpenSSL or GnuTLS
Daniel Stenberg83a46382003-03-10 20:46:54 +0000486
Daniel Stenberg41d81862007-12-08 23:00:00 +000048713.2 nicer lacking perl message
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000488
Daniel Stenberg41d81862007-12-08 23:00:00 +0000489 If perl wasn't found by the configure script, don't attempt to run the tests
490 but explain something nice why it doesn't.
Daniel Stenberg35840a22004-07-01 08:22:52 +0000491
Daniel Stenberg41d81862007-12-08 23:00:00 +000049213.3 more protocols supported
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000493
Daniel Stenberg41d81862007-12-08 23:00:00 +0000494 Extend the test suite to include more protocols. The telnet could just do ftp
495 or http operations (for which we have test servers).
Daniel Stenberga00e7f02004-10-25 11:28:40 +0000496
Daniel Stenberg41d81862007-12-08 23:00:00 +000049713.4 more platforms supported
498
499 Make the test suite work on more platforms. OpenBSD and Mac OS. Remove
500 fork()s and it should become even more portable.
501
50214. Next SONAME bump
503
50414.1 http-style HEAD output for ftp
505
506 #undef CURL_FTP_HTTPSTYLE_HEAD in lib/ftp.c to remove the HTTP-style headers
507 from being output in NOBODY requests over ftp
508
50914.2 combine error codes
510
511 Combine some of the error codes to remove duplicates. The original
512 numbering should not be changed, and the old identifiers would be
513 macroed to the new ones in an CURL_NO_OLDIES section to help with
514 backward compatibility.
515
516 Candidates for removal and their replacements:
517
518 CURLE_FILE_COULDNT_READ_FILE => CURLE_REMOTE_FILE_NOT_FOUND
519 CURLE_FTP_COULDNT_RETR_FILE => CURLE_REMOTE_FILE_NOT_FOUND
520 CURLE_FTP_COULDNT_USE_REST => CURLE_RANGE_ERROR
521 CURLE_FUNCTION_NOT_FOUND => CURLE_FAILED_INIT
522 CURLE_LDAP_INVALID_URL => CURLE_URL_MALFORMAT
523 CURLE_TFTP_NOSUCHUSER => CURLE_TFTP_ILLEGAL
524 CURLE_TFTP_NOTFOUND => CURLE_REMOTE_FILE_NOT_FOUND
525 CURLE_TFTP_PERM => CURLE_REMOTE_ACCESS_DENIED
526
Daniel Stenbergfcc48502008-01-04 22:16:16 +000052714.3 extend CURLOPT_SOCKOPTFUNCTION prototype
528
529 The current prototype only provides 'purpose' that tells what the
530 connection/socket is for, but not any protocol or similar. It makes it hard
531 for applications to differentiate on TCP vs UDP and even HTTP vs FTP and
532 similar.
533
Daniel Stenberg41d81862007-12-08 23:00:00 +000053415. Next major release
535
53615.1 cleanup return codes
537
538 curl_easy_cleanup() returns void, but curl_multi_cleanup() returns a
539 CURLMcode. These should be changed to be the same.
540
54115.2 remove obsolete defines
542
543 remove obsolete defines from curl/curl.h
544
54515.3 size_t
546
547 make several functions use size_t instead of int in their APIs
548
54915.4 remove several functions
550
551 remove the following functions from the public API:
552
553 curl_getenv
554
555 curl_mprintf (and variations)
556
557 curl_strequal
558
559 curl_strnequal
560
561 They will instead become curlx_ - alternatives. That makes the curl app
Daniel Stenberg44103ab2009-05-11 20:35:26 +0000562 still capable of using them, by building with them from source.
563
564 These functions have no purpose anymore:
565
566 curl_multi_socket
567
568 curl_multi_socket_all
Daniel Stenberg41d81862007-12-08 23:00:00 +0000569
57015.5 remove CURLOPT_FAILONERROR
571
572 Remove support for CURLOPT_FAILONERROR, it has gotten too kludgy and weird
573 internally. Let the app judge success or not for itself.
Daniel Stenberg56f17d22008-01-15 22:15:55 +0000574
57515.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE
576
577 Remove support for a global DNS cache. Anything global is silly, and we
578 already offer the share interface for the same functionality but done
579 "right".