blob: c1b7e129cf5a839f21c883a947aee6f5cdbf39dc [file] [log] [blame]
Yang Tsea07bc792010-02-14 19:40:18 +00001 _ _ ____ _
2 ___| | | | _ \| |
3 / __| | | | |_) | |
4 | (__| |_| | _ <| |___
Daniel Stenberg7c37c6a2000-05-22 17:35:35 +00005 \___|\___/|_| \_\_____|
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 Stenberg569202c2011-01-03 09:40:40 +010019 1.5 get rid of PATH_MAX
Daniel Stenberg6704d442001-08-22 11:22:43 +000020
Daniel Stenberg41d81862007-12-08 23:00:00 +000021 2. libcurl - multi interface
22 2.1 More non-blocking
Daniel Stenberg09e027b2008-11-11 13:33:01 +000023 2.2 Remove easy interface internally
24 2.3 Avoid having to remove/readd handles
Daniel Stenberg3c50ea92008-11-17 09:35:10 +000025 2.4 Fix HTTP Pipelining for PUT
Daniel Stenberge60e7412001-11-02 12:51:18 +000026
Daniel Stenberg41d81862007-12-08 23:00:00 +000027 3. Documentation
28 3.1 More and better
Daniel Stenberg097938e2004-03-01 09:08:52 +000029
Daniel Stenberg41d81862007-12-08 23:00:00 +000030 4. FTP
Daniel Stenberg1de6b972010-04-29 23:27:28 +020031 4.1 HOST
Daniel Stenberg41d81862007-12-08 23:00:00 +000032 4.2 Alter passive/active on failure and retry
33 4.3 Earlier bad letter detection
34 4.4 REST for large files
35 4.5 FTP proxy support
Daniel Stenberg43fba262009-09-05 17:49:07 +000036 4.6 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 Stenberg6291a1c2010-01-21 09:32:51 +000041 5.3 Rearrange request header order
Daniel Stenberg0d2cdd92004-10-08 09:57:33 +000042
Daniel Stenberg41d81862007-12-08 23:00:00 +000043 6. TELNET
44 6.1 ditch stdin
45 6.2 ditch telnet-specific select
Dan Fandrichddfbe8b2008-05-23 20:52:46 +000046 6.3 feature negotiation debug data
47 6.4 send data in chunks
Daniel Stenberg9395cad2005-01-11 22:26:00 +000048
Daniel Stenberg41d81862007-12-08 23:00:00 +000049 7. SSL
50 7.1 Disable specific versions
Dan Fandrich152cf632008-09-10 07:11:45 +000051 7.2 Provide mutex locking API
Daniel Stenberg09e027b2008-11-11 13:33:01 +000052 7.3 Evaluate SSL patches
53 7.4 Cache OpenSSL contexts
54 7.5 Export session ids
55 7.6 Provide callback for cert verification
56 7.7 Support other SSL libraries
57 7.8 Support SRP on the TLS layer
58 7.9 improve configure --with-ssl
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
Daniel Stenberg1de6b972010-04-29 23:27:28 +020063 8.3 check connection
Daniel Stenberg7d841132010-09-20 23:19:51 +020064 8.4 non-gcrypt
Daniel Stenbergb4113362005-12-10 22:14:17 +000065
Dan Fandrichddfbe8b2008-05-23 20:52:46 +000066 9. Other protocols
Daniel Stenberg16f3a322006-01-28 13:14:38 +000067
Daniel Stenberg41d81862007-12-08 23:00:00 +000068 10. New protocols
Daniel Stenberg1de6b972010-04-29 23:27:28 +020069 10.1 RSYNC
Daniel Stenberg58b04152007-08-07 13:01:36 +000070
Daniel Stenberg41d81862007-12-08 23:00:00 +000071 11. Client
Daniel Stenbergc54ab4d2010-05-28 11:57:49 +020072 11.1 sync
73 11.2 glob posts
74 11.3 prevent file overwriting
75 11.4 simultaneous parallel transfers
76 11.5 provide formpost headers
77 11.6 url-specific options
78 11.7 metalink support
79 11.8 warning when setting an option
Daniel Stenberg87c43512002-08-26 22:32:46 +000080
Daniel Stenberg41d81862007-12-08 23:00:00 +000081 12. Build
82 12.1 roffit
Daniel Stenberg87c43512002-08-26 22:32:46 +000083
Daniel Stenberg41d81862007-12-08 23:00:00 +000084 13. Test suite
85 13.1 SSL tunnel
86 13.2 nicer lacking perl message
87 13.3 more protocols supported
88 13.4 more platforms supported
Daniel Stenberg87c43512002-08-26 22:32:46 +000089
Daniel Stenberg41d81862007-12-08 23:00:00 +000090 14. Next SONAME bump
91 14.1 http-style HEAD output for ftp
92 14.2 combine error codes
Daniel Stenbergfcc48502008-01-04 22:16:16 +000093 14.3 extend CURLOPT_SOCKOPTFUNCTION prototype
Daniel Stenberg57007e82005-07-30 23:48:07 +000094
Daniel Stenberg41d81862007-12-08 23:00:00 +000095 15. Next major release
96 15.1 cleanup return codes
97 15.2 remove obsolete defines
98 15.3 size_t
99 15.4 remove several functions
100 15.5 remove CURLOPT_FAILONERROR
Daniel Stenberg56f17d22008-01-15 22:15:55 +0000101 15.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE
Daniel Stenbergb0e2d472010-01-23 20:02:50 +0000102 15.7 remove progress meter from libcurl
Daniel Stenberg5cdcc2b2007-08-14 10:11:34 +0000103
Daniel Stenberg41d81862007-12-08 23:00:00 +0000104==============================================================================
Daniel Stenberge60e7412001-11-02 12:51:18 +0000105
Daniel Stenberg41d81862007-12-08 23:00:00 +00001061. libcurl
Daniel Stenberge60e7412001-11-02 12:51:18 +0000107
Daniel Stenberg41d81862007-12-08 23:00:00 +00001081.1 Zero-copy interface
Daniel Stenberge60e7412001-11-02 12:51:18 +0000109
Dan Fandrichddfbe8b2008-05-23 20:52:46 +0000110 Introduce another callback interface for upload/download that makes one less
Daniel Stenberg41d81862007-12-08 23:00:00 +0000111 copy of data and thus a faster operation.
112 [http://curl.haxx.se/dev/no_copy_callbacks.txt]
Daniel Stenberg3dbe7082007-09-13 09:02:15 +0000113
Daniel Stenberg41d81862007-12-08 23:00:00 +00001141.2 More data sharing
Daniel Stenberg3dbe7082007-09-13 09:02:15 +0000115
Daniel Stenberg41d81862007-12-08 23:00:00 +0000116 curl_share_* functions already exist and work, and they can be extended to
117 share more. For example, enable sharing of the ares channel and the
118 connection cache.
Daniel Stenberg3050ae52005-01-19 21:56:02 +0000119
Daniel Stenberg41d81862007-12-08 23:00:00 +00001201.3 struct lifreq
Daniel Stenberg3b491d02004-04-06 15:29:01 +0000121
Daniel Stenberg41d81862007-12-08 23:00:00 +0000122 Use 'struct lifreq' and SIOCGLIFADDR instead of 'struct ifreq' and
123 SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete.
124 To support ipv6 interface addresses for network interfaces properly.
Daniel Stenberg339f84f2003-07-30 13:41:59 +0000125
Daniel Stenberg09e027b2008-11-11 13:33:01 +00001261.4 signal-based resolver timeouts
Dan Fandrich9b3f8632008-10-14 23:52:36 +0000127
128 libcurl built without an asynchronous resolver library uses alarm() to time
129 out DNS lookups. When a timeout occurs, this causes libcurl to jump from the
Yang Tsea07bc792010-02-14 19:40:18 +0000130 signal handler back into the library with a sigsetjmp, which effectively
Dan Fandrich9b3f8632008-10-14 23:52:36 +0000131 causes libcurl to continue running within the signal handler. This is
132 non-portable and could cause problems on some platforms. A discussion on the
133 problem is available at http://curl.haxx.se/mail/lib-2008-09/0197.html
134
135 Also, alarm() provides timeout resolution only to the nearest second. alarm
136 ought to be replaced by setitimer on systems that support it.
137
Daniel Stenberg569202c2011-01-03 09:40:40 +01001381.5 get rid of PATH_MAX
139
140 Having code use and rely on PATH_MAX is not nice:
141 http://insanecoding.blogspot.com/2007/11/pathmax-simply-isnt.html
142
143 Currently the SSH based code uses it a bit, but to remove PATH_MAX from there
144 we need libssh2 to properly tell us when we pass in a too small buffer and
145 its current API (as of libssh2 1.2.7) doesn't.
146
Daniel Stenberg41d81862007-12-08 23:00:00 +00001472. libcurl - multi interface
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000148
Daniel Stenberg41d81862007-12-08 23:00:00 +00001492.1 More non-blocking
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000150
Dan Fandrich152cf632008-09-10 07:11:45 +0000151 Make sure we don't ever loop because of non-blocking sockets returning
Daniel Stenberg25a49cc2010-02-21 14:42:59 +0000152 EWOULDBLOCK or similar. Blocking cases include:
153
154 - Name resolves on non-windows unless c-ares is used
Daniel Stenberg25a49cc2010-02-21 14:42:59 +0000155 - NSS SSL connections
156 - Active FTP connections
157 - HTTP proxy CONNECT operations
158 - SOCKS proxy handshakes
159 - file:// transfers
160 - TELNET transfers
161 - The "DONE" operation (post transfer protocol-specific actions) for the
162 protocols SFTP, SMTP, FTP. Fixing Curl_done() for this is a worthy task.
Daniel Stenberge60e7412001-11-02 12:51:18 +0000163
Daniel Stenberg09e027b2008-11-11 13:33:01 +00001642.2 Remove easy interface internally
Daniel Stenberg3b491d02004-04-06 15:29:01 +0000165
Daniel Stenberg41d81862007-12-08 23:00:00 +0000166 Make curl_easy_perform() a wrapper-function that simply creates a multi
167 handle, adds the easy handle to it, runs curl_multi_perform() until the
168 transfer is done, then detach the easy handle, destroy the multi handle and
169 return the easy handle's return code. This will thus make everything
170 internally use and assume the multi interface. The select()-loop should use
171 curl_multi_socket().
Daniel Stenberg3b491d02004-04-06 15:29:01 +0000172
Daniel Stenberg09e027b2008-11-11 13:33:01 +00001732.3 Avoid having to remove/readd handles
Daniel Stenberg5cffe052002-02-07 10:43:43 +0000174
Daniel Stenberg41d81862007-12-08 23:00:00 +0000175 curl_multi_handle_control() - this can control the easy handle (while) added
176 to a multi handle in various ways:
Daniel Stenberg60f19262001-11-13 09:56:29 +0000177
Daniel Stenberg41d81862007-12-08 23:00:00 +0000178 o RESTART, unconditionally restart this easy handle's transfer from the
179 start, re-init the state
Daniel Stenberg5c4b4222002-02-18 10:51:28 +0000180
Daniel Stenberg41d81862007-12-08 23:00:00 +0000181 o RESTART_COMPLETED, restart this easy handle's transfer but only if the
182 existing transfer has already completed and it is in a "finished state".
Daniel Stenberge60e7412001-11-02 12:51:18 +0000183
Daniel Stenberg41d81862007-12-08 23:00:00 +0000184 o STOP, just stop this transfer and consider it completed
Daniel Stenberg57007e82005-07-30 23:48:07 +0000185
Daniel Stenberg41d81862007-12-08 23:00:00 +0000186 o PAUSE?
Daniel Stenberg9853acb2005-08-29 06:59:44 +0000187
Daniel Stenberg41d81862007-12-08 23:00:00 +0000188 o RESUME?
Daniel Stenberg9853acb2005-08-29 06:59:44 +0000189
Daniel Stenberg3c50ea92008-11-17 09:35:10 +00001902.4 Fix HTTP Pipelining for PUT
191
192 HTTP Pipelining can be a way to greatly enhance performance for multiple
193 serial requests and currently libcurl only supports that for HEAD and GET
194 requests but it should also be possible for PUT.
195
Daniel Stenberg41d81862007-12-08 23:00:00 +00001963. Documentation
Daniel Stenberg9853acb2005-08-29 06:59:44 +0000197
Daniel Stenberg41d81862007-12-08 23:00:00 +00001983.1 More and better
Daniel Stenberg9853acb2005-08-29 06:59:44 +0000199
Daniel Stenberg41d81862007-12-08 23:00:00 +0000200 Exactly
Daniel Stenberg9853acb2005-08-29 06:59:44 +0000201
Daniel Stenberg41d81862007-12-08 23:00:00 +00002024. FTP
Daniel Stenbergbcccd2f2006-05-30 08:45:59 +0000203
Daniel Stenberg1de6b972010-04-29 23:27:28 +02002044.1 HOST
Daniel Stenbergbcccd2f2006-05-30 08:45:59 +0000205
Daniel Stenberg1de6b972010-04-29 23:27:28 +0200206 HOST is a suggested command in the works for a client to tell which host name
207 to use, to offer FTP servers named-based virtual hosting:
208
209 http://tools.ietf.org/html/draft-hethmon-mcmurray-ftp-hosts-11
Daniel Stenberg41d81862007-12-08 23:00:00 +0000210
2114.2 Alter passive/active on failure and retry
212
213 When trying to connect passively to a server which only supports active
214 connections, libcurl returns CURLE_FTP_WEIRD_PASV_REPLY and closes the
215 connection. There could be a way to fallback to an active connection (and
216 vice versa). http://curl.haxx.se/bug/feature.cgi?id=1754793
217
2184.3 Earlier bad letter detection
219
220 Make the detection of (bad) %0d and %0a codes in FTP url parts earlier in the
221 process to avoid doing a resolve and connect in vain.
222
2234.4 REST for large files
224
225 REST fix for servers not behaving well on >2GB requests. This should fail if
226 the server doesn't set the pointer to the requested index. The tricky
227 (impossible?) part is to figure out if the server did the right thing or not.
228
2294.5 FTP proxy support
230
231 Support the most common FTP proxies, Philip Newton provided a list allegedly
232 from ncftp. This is not a subject without debate, and is probably not really
233 suitable for libcurl. http://curl.haxx.se/mail/archive-2003-04/0126.html
234
Daniel Stenberg43fba262009-09-05 17:49:07 +00002354.6 ASCII support
Daniel Stenberg41d81862007-12-08 23:00:00 +0000236
237 FTP ASCII transfers do not follow RFC959. They don't convert the data
238 accordingly.
239
2405. HTTP
241
Daniel Stenberg09e027b2008-11-11 13:33:01 +00002425.1 Better persistency for HTTP 1.0
Daniel Stenberg41d81862007-12-08 23:00:00 +0000243
244 "Better" support for persistent connections over HTTP 1.0
245 http://curl.haxx.se/bug/feature.cgi?id=1089001
246
Daniel Stenberg09e027b2008-11-11 13:33:01 +00002475.2 support FF3 sqlite cookie files
Daniel Stenberg9c7d4392008-01-14 17:49:06 +0000248
249 Firefox 3 is changing from its former format to a a sqlite database instead.
250 We should consider how (lib)curl can/should support this.
251 http://curl.haxx.se/bug/feature.cgi?id=1871388
252
Daniel Stenberg6291a1c2010-01-21 09:32:51 +00002535.3 Rearrange request header order
Daniel Stenberg2c4fcf22009-08-19 07:09:13 +0000254
255 Server implementors often make an effort to detect browser and to reject
256 clients it can detect to not match. One of the last details we cannot yet
257 control in libcurl's HTTP requests, which also can be exploited to detect
258 that libcurl is in fact used even when it tries to impersonate a browser, is
259 the order of the request headers. I propose that we introduce a new option in
260 which you give headers a value, and then when the HTTP request is built it
261 sorts the headers based on that number. We could then have internally created
262 headers use a default value so only headers that need to be moved have to be
263 specified.
264
265
Daniel Stenberg41d81862007-12-08 23:00:00 +00002666. TELNET
267
2686.1 ditch stdin
269
270Reading input (to send to the remote server) on stdin is a crappy solution for
271library purposes. We need to invent a good way for the application to be able
272to provide the data to send.
273
2746.2 ditch telnet-specific select
275
276 Move the telnet support's network select() loop go away and merge the code
277 into the main transfer loop. Until this is done, the multi interface won't
278 work for telnet.
279
Dan Fandrichddfbe8b2008-05-23 20:52:46 +00002806.3 feature negotiation debug data
281
282 Add telnet feature negotiation data to the debug callback as header data.
283
2846.4 send data in chunks
285
286 Currently, telnet sends data one byte at a time. This is fine for interactive
287 use, but inefficient for any other. Sent data should be sent in larger
288 chunks.
289
Daniel Stenberg41d81862007-12-08 23:00:00 +00002907. SSL
291
2927.1 Disable specific versions
293
294 Provide an option that allows for disabling specific SSL versions, such as
295 SSLv2 http://curl.haxx.se/bug/feature.cgi?id=1767276
296
Dan Fandrich152cf632008-09-10 07:11:45 +00002977.2 Provide mutex locking API
Daniel Stenberg41d81862007-12-08 23:00:00 +0000298
299 Provide a libcurl API for setting mutex callbacks in the underlying SSL
300 library, so that the same application code can use mutex-locking
301 independently of OpenSSL or GnutTLS being used.
302
Daniel Stenberg09e027b2008-11-11 13:33:01 +00003037.3 Evaluate SSL patches
Daniel Stenberg41d81862007-12-08 23:00:00 +0000304
305 Evaluate/apply Gertjan van Wingerde's SSL patches:
306 http://curl.haxx.se/mail/lib-2004-03/0087.html
307
Daniel Stenberg09e027b2008-11-11 13:33:01 +00003087.4 Cache OpenSSL contexts
Daniel Stenberg41d81862007-12-08 23:00:00 +0000309
310 "Look at SSL cafile - quick traces look to me like these are done on every
311 request as well, when they should only be necessary once per ssl context (or
312 once per handle)". The major improvement we can rather easily do is to make
313 sure we don't create and kill a new SSL "context" for every request, but
314 instead make one for every connection and re-use that SSL context in the same
315 style connections are re-used. It will make us use slightly more memory but
316 it will libcurl do less creations and deletions of SSL contexts.
317
Daniel Stenberg09e027b2008-11-11 13:33:01 +00003187.5 Export session ids
Daniel Stenberg41d81862007-12-08 23:00:00 +0000319
320 Add an interface to libcurl that enables "session IDs" to get
321 exported/imported. Cris Bailiff said: "OpenSSL has functions which can
322 serialise the current SSL state to a buffer of your choice, and recover/reset
323 the state from such a buffer at a later date - this is used by mod_ssl for
324 apache to implement and SSL session ID cache".
325
Daniel Stenberg09e027b2008-11-11 13:33:01 +00003267.6 Provide callback for cert verification
Daniel Stenberg41d81862007-12-08 23:00:00 +0000327
328 OpenSSL supports a callback for customised verification of the peer
329 certificate, but this doesn't seem to be exposed in the libcurl APIs. Could
330 it be? There's so much that could be done if it were!
331
Daniel Stenberg09e027b2008-11-11 13:33:01 +00003327.7 Support other SSL libraries
Daniel Stenberg41d81862007-12-08 23:00:00 +0000333
334 Make curl's SSL layer capable of using other free SSL libraries. Such as
335 MatrixSSL (http://www.matrixssl.org/).
336
Daniel Stenberg09e027b2008-11-11 13:33:01 +00003377.8 Support SRP on the TLS layer
Daniel Stenberg41d81862007-12-08 23:00:00 +0000338
339 Peter Sylvester's patch for SRP on the TLS layer. Awaits OpenSSL support for
340 this, no need to support this in libcurl before there's an OpenSSL release
341 that does it.
342
Daniel Stenberg09e027b2008-11-11 13:33:01 +00003437.9 improve configure --with-ssl
Daniel Stenberg41d81862007-12-08 23:00:00 +0000344
345 make the configure --with-ssl option first check for OpenSSL, then GnuTLS,
346 then NSS...
347
Daniel Stenberg41d81862007-12-08 23:00:00 +00003488. GnuTLS
349
Daniel Stenbergb8b8c3d2009-10-17 19:31:57 +00003508.1 SSL engine stuff
Daniel Stenberg41d81862007-12-08 23:00:00 +0000351
352 Is this even possible?
353
Daniel Stenbergb8b8c3d2009-10-17 19:31:57 +00003548.2 SRP
Daniel Stenberg41d81862007-12-08 23:00:00 +0000355
356 Work out a common method with Peter Sylvester's OpenSSL-patch for SRP on the
357 TLS to provide name and password. GnuTLS already supports it...
358
Daniel Stenberg1de6b972010-04-29 23:27:28 +02003598.3 check connection
Daniel Stenberg41d81862007-12-08 23:00:00 +0000360
361 Add a way to check if the connection seems to be alive, to correspond to the
362 SSL_peak() way we use with OpenSSL.
363
Daniel Stenberg7d841132010-09-20 23:19:51 +02003648.4 non-gcrypt
365
366 libcurl assumes that there are gcrypt functions available when
367 GnuTLS is.
368
369 GnuTLS can be built to use libnettle instead as crypto library,
370 which breaks the previously mentioned assumption
371
372 The correct fix would be to detect which crypto layer that is in use and
373 adapt our code to use that instead of blindly assuming gcrypt.
374
Dan Fandrichddfbe8b2008-05-23 20:52:46 +00003759. Other protocols
Daniel Stenberg41d81862007-12-08 23:00:00 +0000376
Daniel Stenberg41d81862007-12-08 23:00:00 +000037710. New protocols
Daniel Stenberg29108802004-12-22 09:19:29 +0000378
Daniel Stenberg1de6b972010-04-29 23:27:28 +020037910.1 RSYNC
Daniel Stenberge60e7412001-11-02 12:51:18 +0000380
Daniel Stenberga03c2d82007-12-09 12:12:52 +0000381 There's no RFC for protocol nor URI/URL format. An implementation should
382 most probably use an existing rsync library, such as librsync.
Daniel Stenberg3dbe7082007-09-13 09:02:15 +0000383
Daniel Stenberg41d81862007-12-08 23:00:00 +000038411. Client
Daniel Stenberg33929112004-09-09 06:58:01 +0000385
Daniel Stenbergc54ab4d2010-05-28 11:57:49 +020038611.1 sync
Daniel Stenberg87c43512002-08-26 22:32:46 +0000387
Daniel Stenberg41d81862007-12-08 23:00:00 +0000388 "curl --sync http://example.com/feed[1-100].rss" or
389 "curl --sync http://example.net/{index,calendar,history}.html"
Daniel Stenberge60e7412001-11-02 12:51:18 +0000390
Daniel Stenberg41d81862007-12-08 23:00:00 +0000391 Downloads a range or set of URLs using the remote name, but only if the
392 remote file is newer than the local file. A Last-Modified HTTP date header
393 should also be used to set the mod date on the downloaded file.
Daniel Stenbergd12fd892001-12-06 14:40:16 +0000394
Daniel Stenbergc54ab4d2010-05-28 11:57:49 +020039511.2 glob posts
Daniel Stenberg5c4b4222002-02-18 10:51:28 +0000396
Daniel Stenberg41d81862007-12-08 23:00:00 +0000397 Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'.
398 This is easily scripted though.
Daniel Stenberg5c4b4222002-02-18 10:51:28 +0000399
Daniel Stenbergc54ab4d2010-05-28 11:57:49 +020040011.3 prevent file overwriting
Daniel Stenberg5c4b4222002-02-18 10:51:28 +0000401
Daniel Stenberg41d81862007-12-08 23:00:00 +0000402 Add an option that prevents cURL from overwriting existing local files. When
403 used, and there already is an existing file with the target file name
404 (either -O or -o), a number should be appended (and increased if already
405 existing). So that index.html becomes first index.html.1 and then
406 index.html.2 etc.
Daniel Stenberg4c3a2312004-01-09 08:59:55 +0000407
Daniel Stenbergc54ab4d2010-05-28 11:57:49 +020040811.4 simultaneous parallel transfers
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000409
Daniel Stenberg41d81862007-12-08 23:00:00 +0000410 The client could be told to use maximum N simultaneous parallel transfers and
411 then just make sure that happens. It should of course not make more than one
412 connection to the same remote host. This would require the client to use the
413 multi interface. http://curl.haxx.se/bug/feature.cgi?id=1558595
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000414
Daniel Stenbergc54ab4d2010-05-28 11:57:49 +020041511.5 provide formpost headers
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000416
Daniel Stenberg41d81862007-12-08 23:00:00 +0000417 Extending the capabilities of the multipart formposting. How about leaving
418 the ';type=foo' syntax as it is and adding an extra tag (headers) which
419 works like this: curl -F "coolfiles=@fil1.txt;headers=@fil1.hdr" where
420 fil1.hdr contains extra headers like
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000421
Daniel Stenberg41d81862007-12-08 23:00:00 +0000422 Content-Type: text/plain; charset=KOI8-R"
423 Content-Transfer-Encoding: base64
424 X-User-Comment: Please don't use browser specific HTML code
Daniel Stenberg3de85772004-12-21 10:54:21 +0000425
Daniel Stenberg41d81862007-12-08 23:00:00 +0000426 which should overwrite the program reasonable defaults (plain/text,
427 8bit...)
Daniel Stenberge60e7412001-11-02 12:51:18 +0000428
Daniel Stenbergc54ab4d2010-05-28 11:57:49 +020042911.6 url-specific options
Daniel Stenberg0e899d72006-12-19 14:28:01 +0000430
Daniel Stenberg41d81862007-12-08 23:00:00 +0000431 Provide a way to make options bound to a specific URL among several on the
432 command line. Possibly by letting ':' separate options between URLs,
433 similar to this:
Daniel Stenberg96b71312003-03-15 15:08:55 +0000434
Daniel Stenberg41d81862007-12-08 23:00:00 +0000435 curl --data foo --url url.com : \
436 --url url2.com : \
437 --url url3.com --data foo3
Daniel Stenberge60e7412001-11-02 12:51:18 +0000438
Daniel Stenberg41d81862007-12-08 23:00:00 +0000439 (More details: http://curl.haxx.se/mail/archive-2004-07/0133.html)
Daniel Stenberge60e7412001-11-02 12:51:18 +0000440
Daniel Stenberg41d81862007-12-08 23:00:00 +0000441 The example would do a POST-GET-POST combination on a single command line.
Daniel Stenbergf3c7adc2007-08-17 22:21:41 +0000442
Daniel Stenbergc54ab4d2010-05-28 11:57:49 +020044311.7 metalink support
Dan Fandrichddfbe8b2008-05-23 20:52:46 +0000444
445 Add metalink support to curl (http://www.metalinker.org/). This is most useful
446 with simultaneous parallel transfers (11.6) but not necessary.
447
Daniel Stenbergc54ab4d2010-05-28 11:57:49 +020044811.8 warning when setting an option
Dan Fandrichddfbe8b2008-05-23 20:52:46 +0000449
450 Display a warning when libcurl returns an error when setting an option.
451 This can be useful to tell when support for a particular feature hasn't been
452 compiled into the library.
453
Daniel Stenberg41d81862007-12-08 23:00:00 +000045412. Build
Daniel Stenbergf3c7adc2007-08-17 22:21:41 +0000455
Daniel Stenberg41d81862007-12-08 23:00:00 +000045612.1 roffit
Dan Fandrich9f44a952007-08-30 20:34:57 +0000457
Daniel Stenberg41d81862007-12-08 23:00:00 +0000458 Consider extending 'roffit' to produce decent ASCII output, and use that
459 instead of (g)nroff when building src/hugehelp.c
Dan Fandrich9f44a952007-08-30 20:34:57 +0000460
Daniel Stenberg41d81862007-12-08 23:00:00 +000046113. Test suite
Dan Fandrich9f44a952007-08-30 20:34:57 +0000462
Daniel Stenberg41d81862007-12-08 23:00:00 +000046313.1 SSL tunnel
Daniel Stenberg83a46382003-03-10 20:46:54 +0000464
Daniel Stenberg41d81862007-12-08 23:00:00 +0000465 Make our own version of stunnel for simple port forwarding to enable HTTPS
466 and FTP-SSL tests without the stunnel dependency, and it could allow us to
467 provide test tools built with either OpenSSL or GnuTLS
Daniel Stenberg83a46382003-03-10 20:46:54 +0000468
Daniel Stenberg41d81862007-12-08 23:00:00 +000046913.2 nicer lacking perl message
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000470
Daniel Stenberg41d81862007-12-08 23:00:00 +0000471 If perl wasn't found by the configure script, don't attempt to run the tests
472 but explain something nice why it doesn't.
Daniel Stenberg35840a22004-07-01 08:22:52 +0000473
Daniel Stenberg41d81862007-12-08 23:00:00 +000047413.3 more protocols supported
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000475
Daniel Stenberg41d81862007-12-08 23:00:00 +0000476 Extend the test suite to include more protocols. The telnet could just do ftp
477 or http operations (for which we have test servers).
Daniel Stenberga00e7f02004-10-25 11:28:40 +0000478
Daniel Stenberg41d81862007-12-08 23:00:00 +000047913.4 more platforms supported
480
481 Make the test suite work on more platforms. OpenBSD and Mac OS. Remove
482 fork()s and it should become even more portable.
483
48414. Next SONAME bump
485
48614.1 http-style HEAD output for ftp
487
488 #undef CURL_FTP_HTTPSTYLE_HEAD in lib/ftp.c to remove the HTTP-style headers
489 from being output in NOBODY requests over ftp
490
49114.2 combine error codes
492
493 Combine some of the error codes to remove duplicates. The original
494 numbering should not be changed, and the old identifiers would be
495 macroed to the new ones in an CURL_NO_OLDIES section to help with
496 backward compatibility.
497
498 Candidates for removal and their replacements:
499
500 CURLE_FILE_COULDNT_READ_FILE => CURLE_REMOTE_FILE_NOT_FOUND
501 CURLE_FTP_COULDNT_RETR_FILE => CURLE_REMOTE_FILE_NOT_FOUND
502 CURLE_FTP_COULDNT_USE_REST => CURLE_RANGE_ERROR
503 CURLE_FUNCTION_NOT_FOUND => CURLE_FAILED_INIT
504 CURLE_LDAP_INVALID_URL => CURLE_URL_MALFORMAT
505 CURLE_TFTP_NOSUCHUSER => CURLE_TFTP_ILLEGAL
506 CURLE_TFTP_NOTFOUND => CURLE_REMOTE_FILE_NOT_FOUND
507 CURLE_TFTP_PERM => CURLE_REMOTE_ACCESS_DENIED
508
Daniel Stenbergfcc48502008-01-04 22:16:16 +000050914.3 extend CURLOPT_SOCKOPTFUNCTION prototype
510
511 The current prototype only provides 'purpose' that tells what the
512 connection/socket is for, but not any protocol or similar. It makes it hard
513 for applications to differentiate on TCP vs UDP and even HTTP vs FTP and
514 similar.
515
Daniel Stenberg41d81862007-12-08 23:00:00 +000051615. Next major release
517
51815.1 cleanup return codes
519
520 curl_easy_cleanup() returns void, but curl_multi_cleanup() returns a
521 CURLMcode. These should be changed to be the same.
522
52315.2 remove obsolete defines
524
525 remove obsolete defines from curl/curl.h
526
52715.3 size_t
528
529 make several functions use size_t instead of int in their APIs
530
53115.4 remove several functions
532
533 remove the following functions from the public API:
534
535 curl_getenv
536
537 curl_mprintf (and variations)
538
539 curl_strequal
540
541 curl_strnequal
542
543 They will instead become curlx_ - alternatives. That makes the curl app
Daniel Stenberg44103ab2009-05-11 20:35:26 +0000544 still capable of using them, by building with them from source.
545
546 These functions have no purpose anymore:
547
548 curl_multi_socket
549
550 curl_multi_socket_all
Daniel Stenberg41d81862007-12-08 23:00:00 +0000551
55215.5 remove CURLOPT_FAILONERROR
553
554 Remove support for CURLOPT_FAILONERROR, it has gotten too kludgy and weird
555 internally. Let the app judge success or not for itself.
Daniel Stenberg56f17d22008-01-15 22:15:55 +0000556
55715.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE
558
559 Remove support for a global DNS cache. Anything global is silly, and we
560 already offer the share interface for the same functionality but done
561 "right".
Daniel Stenbergb0e2d472010-01-23 20:02:50 +0000562
56315.7 remove progress meter from libcurl
564
565 The internally provided progress meter output doesn't belong in the library.
566 Basically no application wants it (apart from curl) but instead applications
567 can and should do their own progress meters using the progress callback.
568
569 The progress callback should then be bumped as well to get proper 64bit
570 variable types passed to it instead of doubles so that big files work
571 correctly.