blob: 7b2e5447c5870f80838e469f94588e74e3b5505a [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
18 1.4 Get IP address
19 1.5 c-ares ipv6
Daniel Stenberg3d09cb02007-12-09 12:20:06 +000020 1.6 configure-based info in public headers
Daniel Stenberg6704d442001-08-22 11:22:43 +000021
Daniel Stenberg41d81862007-12-08 23:00:00 +000022 2. libcurl - multi interface
23 2.1 More non-blocking
24 2.2 Pause transfers
25 2.3 Remove easy interface internally
26 2.4 Avoid having to remove/readd handles
Daniel Stenberge60e7412001-11-02 12:51:18 +000027
Daniel Stenberg41d81862007-12-08 23:00:00 +000028 3. Documentation
29 3.1 More and better
Daniel Stenberg097938e2004-03-01 09:08:52 +000030
Daniel Stenberg41d81862007-12-08 23:00:00 +000031 4. FTP
32 4.1 PRET
33 4.2 Alter passive/active on failure and retry
34 4.3 Earlier bad letter detection
35 4.4 REST for large files
36 4.5 FTP proxy support
37 4.6 PORT port range
38 4.7 ASCII support
Daniel Stenberg01cfe672002-01-18 12:48:36 +000039
Daniel Stenberg41d81862007-12-08 23:00:00 +000040 5. HTTP
41 5.1 Other HTTP versions with CONNECT
Daniel Stenberga03c2d82007-12-09 12:12:52 +000042 5.2 Better persistancy for HTTP 1.0
Daniel Stenberg0d2cdd92004-10-08 09:57:33 +000043
Daniel Stenberg41d81862007-12-08 23:00:00 +000044 6. TELNET
45 6.1 ditch stdin
46 6.2 ditch telnet-specific select
Daniel Stenberg9395cad2005-01-11 22:26:00 +000047
Daniel Stenberg41d81862007-12-08 23:00:00 +000048 7. SSL
49 7.1 Disable specific versions
50 7.2 Provide mytex locking API
51 7.3 dumpcert
52 7.4 Evaluate SSL patches
53 7.5 Cache OpenSSL contexts
54 7.6 Export session ids
55 7.7 Provide callback for cert verfication
56 7.8 Support other SSL libraries
57 7.9 Support SRP on the TLS layer
58 7.10 improve configure --with-ssl
Daniel Stenberg86660c72005-07-08 13:28:16 +000059
Daniel Stenberg41d81862007-12-08 23:00:00 +000060 8. GnuTLS
61 8.1 Make NTLM work without OpenSSL functions
62 8.2 SSl engine stuff
63 8.3 SRP
64 8.4 non-blocking
65 8.5 check connection
Daniel Stenbergb4113362005-12-10 22:14:17 +000066
Daniel Stenberg41d81862007-12-08 23:00:00 +000067 9. LDAP
68 9.1 ditch ldap-specific select
Daniel Stenberg16f3a322006-01-28 13:14:38 +000069
Daniel Stenberg41d81862007-12-08 23:00:00 +000070 10. New protocols
71 10.1 RTSP
72 10.2 RSYNC
Daniel Stenberg71b105c2007-12-09 12:26:05 +000073 10.3 RTMP
Daniel Stenberg58b04152007-08-07 13:01:36 +000074
Daniel Stenberg41d81862007-12-08 23:00:00 +000075 11. Client
76 11.1 Content-Disposition
77 11.2 sync
78 11.3 glob posts
79 11.4 prevent file overwriting
80 11.5 ftp wildcard download
81 11.6 simultaneous parallel transfers
82 11.7 provide formpost headers
83 11.8 url-specific options
Daniel Stenberg87c43512002-08-26 22:32:46 +000084
Daniel Stenberg41d81862007-12-08 23:00:00 +000085 12. Build
86 12.1 roffit
Daniel Stenberg87c43512002-08-26 22:32:46 +000087
Daniel Stenberg41d81862007-12-08 23:00:00 +000088 13. Test suite
89 13.1 SSL tunnel
90 13.2 nicer lacking perl message
91 13.3 more protocols supported
92 13.4 more platforms supported
Daniel Stenberg87c43512002-08-26 22:32:46 +000093
Daniel Stenberg41d81862007-12-08 23:00:00 +000094 14. Next SONAME bump
95 14.1 http-style HEAD output for ftp
96 14.2 combine error codes
Daniel Stenberg57007e82005-07-30 23:48:07 +000097
Daniel Stenberg41d81862007-12-08 23:00:00 +000098 15. Next major release
99 15.1 cleanup return codes
100 15.2 remove obsolete defines
101 15.3 size_t
102 15.4 remove several functions
103 15.5 remove CURLOPT_FAILONERROR
Daniel Stenberg5cdcc2b2007-08-14 10:11:34 +0000104
Daniel Stenberg41d81862007-12-08 23:00:00 +0000105==============================================================================
Daniel Stenberge60e7412001-11-02 12:51:18 +0000106
Daniel Stenberg41d81862007-12-08 23:00:00 +00001071. libcurl
Daniel Stenberge60e7412001-11-02 12:51:18 +0000108
Daniel Stenberg41d81862007-12-08 23:00:00 +00001091.1 Zero-copy interface
Daniel Stenberge60e7412001-11-02 12:51:18 +0000110
Daniel Stenberg41d81862007-12-08 23:00:00 +0000111 Introdue another callback interface for upload/download that makes one less
112 copy of data and thus a faster operation.
113 [http://curl.haxx.se/dev/no_copy_callbacks.txt]
Daniel Stenberg3dbe7082007-09-13 09:02:15 +0000114
Daniel Stenberg41d81862007-12-08 23:00:00 +00001151.2 More data sharing
Daniel Stenberg3dbe7082007-09-13 09:02:15 +0000116
Daniel Stenberg41d81862007-12-08 23:00:00 +0000117 curl_share_* functions already exist and work, and they can be extended to
118 share more. For example, enable sharing of the ares channel and the
119 connection cache.
Daniel Stenberg3050ae52005-01-19 21:56:02 +0000120
Daniel Stenberg41d81862007-12-08 23:00:00 +00001211.3 struct lifreq
Daniel Stenberg3b491d02004-04-06 15:29:01 +0000122
Daniel Stenberg41d81862007-12-08 23:00:00 +0000123 Use 'struct lifreq' and SIOCGLIFADDR instead of 'struct ifreq' and
124 SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete.
125 To support ipv6 interface addresses for network interfaces properly.
Daniel Stenberg339f84f2003-07-30 13:41:59 +0000126
Daniel Stenberg41d81862007-12-08 23:00:00 +00001271.4 Get IP address
Daniel Stenbergc0acaa52003-04-28 17:29:32 +0000128
Daniel Stenberg41d81862007-12-08 23:00:00 +0000129 Add the following to curl_easy_getinfo(): GET_HTTP_IP, GET_FTP_IP and
130 GET_FTP_DATA_IP. Return a string with the used IP.
Daniel Stenberg0058e872001-05-18 12:55:13 +0000131
Daniel Stenberg41d81862007-12-08 23:00:00 +00001321.5 c-ares ipv6
Daniel Stenbergeb6a14f2003-01-07 07:54:14 +0000133
Daniel Stenberg41d81862007-12-08 23:00:00 +0000134 Make libcurl built with c-ares use c-ares' IPv6 abilities. They weren't
135 present when we first added c-ares support but they have been added since!
136 When this is done and works, we can actually start considering making c-ares
137 powered libcurl the default build (which of course would require that we'd
138 bundle the c-ares source code in the libcurl source code releases).
Daniel Stenberg73323502004-05-05 06:11:57 +0000139
Daniel Stenberg3d09cb02007-12-09 12:20:06 +00001401.6 configure-based info in public headers
Daniel Stenberg2c39a432001-07-02 08:21:25 +0000141
Daniel Stenberg06fb2422007-12-09 12:00:54 +0000142 Make the public headers include the proper system includes based on what was
143 present at the time when configure was run. Currently, the sys/select.h
Daniel Stenberg41d81862007-12-08 23:00:00 +0000144 header is for example included by curl/multi.h only on specific platforms we
145 know MUST have it. This is error-prone. We therefore want the header files to
146 adapt to configure results. Those results must be stored in a new header and
147 they must use a curl name space, i.e not be HAVE_* prefix (as that would risk
148 collide with other apps that use libcurl and that runs configure).
Daniel Stenberg29108802004-12-22 09:19:29 +0000149
Daniel Stenberg41d81862007-12-08 23:00:00 +0000150 Work on this has been started but hasn't been finished, and the initial patch
151 and some details are found here:
152 http://curl.haxx.se/mail/lib-2006-12/0084.html
Daniel Stenberg3dbe7082007-09-13 09:02:15 +0000153
Daniel Stenberg41d81862007-12-08 23:00:00 +0000154 The remaining problems to solve involve the platforms that can't run
155 configure.
Daniel Stenberg7c37c6a2000-05-22 17:35:35 +0000156
Daniel Stenberg41d81862007-12-08 23:00:00 +00001572. libcurl - multi interface
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000158
Daniel Stenberg41d81862007-12-08 23:00:00 +00001592.1 More non-blocking
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000160
Daniel Stenberg41d81862007-12-08 23:00:00 +0000161 Make sure we don't ever loop because of non-blocking sockets return
162 EWOULDBLOCK or similar. The GnuTLS connection etc.
Daniel Stenberge60e7412001-11-02 12:51:18 +0000163
Daniel Stenberg41d81862007-12-08 23:00:00 +00001642.2 Pause transfers
Daniel Stenberg3dbe7082007-09-13 09:02:15 +0000165
Daniel Stenberg41d81862007-12-08 23:00:00 +0000166 Make transfers treated more carefully. We need a way to tell libcurl we have
167 data to write, as the current system expects us to upload data each time the
168 socket is writable and there is no way to say that we want to upload data
169 soon just not right now, without that aborting the upload. The opposite
170 situation should be possible as well, that we tell libcurl we're ready to
171 accept read data. Today libcurl feeds the data as soon as it is available for
172 reading, no matter what.
Daniel Stenberg25411e02006-06-24 15:21:49 +0000173
Daniel Stenberg41d81862007-12-08 23:00:00 +00001742.3 Remove easy interface internally
Daniel Stenberg3b491d02004-04-06 15:29:01 +0000175
Daniel Stenberg41d81862007-12-08 23:00:00 +0000176 Make curl_easy_perform() a wrapper-function that simply creates a multi
177 handle, adds the easy handle to it, runs curl_multi_perform() until the
178 transfer is done, then detach the easy handle, destroy the multi handle and
179 return the easy handle's return code. This will thus make everything
180 internally use and assume the multi interface. The select()-loop should use
181 curl_multi_socket().
Daniel Stenberg3b491d02004-04-06 15:29:01 +0000182
Daniel Stenberg41d81862007-12-08 23:00:00 +00001832.4 Avoid having to remove/readd handles
Daniel Stenberg5cffe052002-02-07 10:43:43 +0000184
Daniel Stenberg41d81862007-12-08 23:00:00 +0000185 curl_multi_handle_control() - this can control the easy handle (while) added
186 to a multi handle in various ways:
Daniel Stenberg60f19262001-11-13 09:56:29 +0000187
Daniel Stenberg41d81862007-12-08 23:00:00 +0000188 o RESTART, unconditionally restart this easy handle's transfer from the
189 start, re-init the state
Daniel Stenberg5c4b4222002-02-18 10:51:28 +0000190
Daniel Stenberg41d81862007-12-08 23:00:00 +0000191 o RESTART_COMPLETED, restart this easy handle's transfer but only if the
192 existing transfer has already completed and it is in a "finished state".
Daniel Stenberge60e7412001-11-02 12:51:18 +0000193
Daniel Stenberg41d81862007-12-08 23:00:00 +0000194 o STOP, just stop this transfer and consider it completed
Daniel Stenberg57007e82005-07-30 23:48:07 +0000195
Daniel Stenberg41d81862007-12-08 23:00:00 +0000196 o PAUSE?
Daniel Stenberg9853acb2005-08-29 06:59:44 +0000197
Daniel Stenberg41d81862007-12-08 23:00:00 +0000198 o RESUME?
Daniel Stenberg9853acb2005-08-29 06:59:44 +0000199
Daniel Stenberg41d81862007-12-08 23:00:00 +00002003. Documentation
Daniel Stenberg9853acb2005-08-29 06:59:44 +0000201
Daniel Stenberg41d81862007-12-08 23:00:00 +00002023.1 More and better
Daniel Stenberg9853acb2005-08-29 06:59:44 +0000203
Daniel Stenberg41d81862007-12-08 23:00:00 +0000204 Exactly
Daniel Stenberg9853acb2005-08-29 06:59:44 +0000205
Daniel Stenberg41d81862007-12-08 23:00:00 +00002064. FTP
Daniel Stenbergbcccd2f2006-05-30 08:45:59 +0000207
Daniel Stenberg41d81862007-12-08 23:00:00 +00002084.1 PRET
Daniel Stenbergbcccd2f2006-05-30 08:45:59 +0000209
Daniel Stenberg41d81862007-12-08 23:00:00 +0000210 PRET is a command that primarily "drftpd" supports, which could be useful
211 when using libcurl against such a server. It is a non-standard and a rather
212 oddly designed command, but...
213 http://curl.haxx.se/bug/feature.cgi?id=1729967
214
2154.2 Alter passive/active on failure and retry
216
217 When trying to connect passively to a server which only supports active
218 connections, libcurl returns CURLE_FTP_WEIRD_PASV_REPLY and closes the
219 connection. There could be a way to fallback to an active connection (and
220 vice versa). http://curl.haxx.se/bug/feature.cgi?id=1754793
221
2224.3 Earlier bad letter detection
223
224 Make the detection of (bad) %0d and %0a codes in FTP url parts earlier in the
225 process to avoid doing a resolve and connect in vain.
226
2274.4 REST for large files
228
229 REST fix for servers not behaving well on >2GB requests. This should fail if
230 the server doesn't set the pointer to the requested index. The tricky
231 (impossible?) part is to figure out if the server did the right thing or not.
232
2334.5 FTP proxy support
234
235 Support the most common FTP proxies, Philip Newton provided a list allegedly
236 from ncftp. This is not a subject without debate, and is probably not really
237 suitable for libcurl. http://curl.haxx.se/mail/archive-2003-04/0126.html
238
2394.6 PORT port range
240
241 Make CURLOPT_FTPPORT support an additional port number on the IP/if/name,
242 like "blabla:[port]" or possibly even "blabla:[portfirst]-[portsecond]".
243 http://curl.haxx.se/bug/feature.cgi?id=1505166
244
2454.7 ASCII support
246
247 FTP ASCII transfers do not follow RFC959. They don't convert the data
248 accordingly.
249
2505. HTTP
251
2525.1 Other HTTP versions with CONNECT
253
254 When doing CONNECT to a HTTP proxy, libcurl always uses HTTP/1.0. This has
255 never been reported as causing trouble to anyone, but should be considered to
256 use the HTTP version the user has chosen.
257
Daniel Stenberga03c2d82007-12-09 12:12:52 +00002585.2 Better persistancy for HTTP 1.0
Daniel Stenberg41d81862007-12-08 23:00:00 +0000259
260 "Better" support for persistent connections over HTTP 1.0
261 http://curl.haxx.se/bug/feature.cgi?id=1089001
262
2636. TELNET
264
2656.1 ditch stdin
266
267Reading input (to send to the remote server) on stdin is a crappy solution for
268library purposes. We need to invent a good way for the application to be able
269to provide the data to send.
270
2716.2 ditch telnet-specific select
272
273 Move the telnet support's network select() loop go away and merge the code
274 into the main transfer loop. Until this is done, the multi interface won't
275 work for telnet.
276
2777. SSL
278
2797.1 Disable specific versions
280
281 Provide an option that allows for disabling specific SSL versions, such as
282 SSLv2 http://curl.haxx.se/bug/feature.cgi?id=1767276
283
2847.2 Provide mytex locking API
285
286 Provide a libcurl API for setting mutex callbacks in the underlying SSL
287 library, so that the same application code can use mutex-locking
288 independently of OpenSSL or GnutTLS being used.
289
2907.3 dumpcert
291
292 Anton Fedorov's "dumpcert" patch:
293 http://curl.haxx.se/mail/lib-2004-03/0088.html
294
2957.4 Evaluate SSL patches
296
297 Evaluate/apply Gertjan van Wingerde's SSL patches:
298 http://curl.haxx.se/mail/lib-2004-03/0087.html
299
3007.5 Cache OpenSSL contexts
301
302 "Look at SSL cafile - quick traces look to me like these are done on every
303 request as well, when they should only be necessary once per ssl context (or
304 once per handle)". The major improvement we can rather easily do is to make
305 sure we don't create and kill a new SSL "context" for every request, but
306 instead make one for every connection and re-use that SSL context in the same
307 style connections are re-used. It will make us use slightly more memory but
308 it will libcurl do less creations and deletions of SSL contexts.
309
3107.6 Export session ids
311
312 Add an interface to libcurl that enables "session IDs" to get
313 exported/imported. Cris Bailiff said: "OpenSSL has functions which can
314 serialise the current SSL state to a buffer of your choice, and recover/reset
315 the state from such a buffer at a later date - this is used by mod_ssl for
316 apache to implement and SSL session ID cache".
317
3187.7 Provide callback for cert verfication
319
320 OpenSSL supports a callback for customised verification of the peer
321 certificate, but this doesn't seem to be exposed in the libcurl APIs. Could
322 it be? There's so much that could be done if it were!
323
3247.8 Support other SSL libraries
325
326 Make curl's SSL layer capable of using other free SSL libraries. Such as
327 MatrixSSL (http://www.matrixssl.org/).
328
3297.9 Support SRP on the TLS layer
330
331 Peter Sylvester's patch for SRP on the TLS layer. Awaits OpenSSL support for
332 this, no need to support this in libcurl before there's an OpenSSL release
333 that does it.
334
3357.10 improve configure --with-ssl
336
337 make the configure --with-ssl option first check for OpenSSL, then GnuTLS,
338 then NSS...
339
3408. GnuTLS
341
3428.1 Make NTLM work without OpenSSL functions
343
344 Get NTLM working using the functions provided by libgcrypt, since GnuTLS
345 already depends on that to function. Not strictly SSL/TLS related, but
346 hey... Another option is to get available DES and MD4 source code from the
347 cryptopp library. They are fine license-wise, but are C++.
348
3498.2 SSl engine stuff
350
351 Is this even possible?
352
3538.3 SRP
354
355 Work out a common method with Peter Sylvester's OpenSSL-patch for SRP on the
356 TLS to provide name and password. GnuTLS already supports it...
357
3588.4 non-blocking
359
360 Fix the connection phase to be non-blocking when multi interface is used
361
3628.5 check connection
363
364 Add a way to check if the connection seems to be alive, to correspond to the
365 SSL_peak() way we use with OpenSSL.
366
3679. LDAP
368
3699.1 ditch ldap-specific select
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000370
371 * Look over the implementation. The looping will have to "go away" from the
372 lib/ldap.c source file and get moved to the main network code so that the
373 multi interface and friends will work for LDAP as well.
374
Daniel Stenberg41d81862007-12-08 23:00:00 +000037510. New protocols
Daniel Stenberg29108802004-12-22 09:19:29 +0000376
Daniel Stenberg41d81862007-12-08 23:00:00 +000037710.1 RTSP
Daniel Stenberg29108802004-12-22 09:19:29 +0000378
Daniel Stenberg41d81862007-12-08 23:00:00 +0000379 RFC2326 (protocol - very HTTP-like, also contains URL description)
Daniel Stenberg29108802004-12-22 09:19:29 +0000380
Daniel Stenberg41d81862007-12-08 23:00:00 +000038110.2 RSYNC
Daniel Stenberge60e7412001-11-02 12:51:18 +0000382
Daniel Stenberga03c2d82007-12-09 12:12:52 +0000383 There's no RFC for protocol nor URI/URL format. An implementation should
384 most probably use an existing rsync library, such as librsync.
Daniel Stenberg3dbe7082007-09-13 09:02:15 +0000385
Daniel Stenbergccb49562007-12-09 12:22:22 +000038610.3 RTMP
387
388 There exists a patch that claims to introduce this protocol:
389 http://osdir.com/ml/gnu.gnash.devel2/2006-11/msg00278.html, further details
390 in the feature-request: http://curl.haxx.se/bug/feature.cgi?id=1843469
391
Daniel Stenberg41d81862007-12-08 23:00:00 +000039211. Client
Daniel Stenberg33929112004-09-09 06:58:01 +0000393
Daniel Stenberg41d81862007-12-08 23:00:00 +000039411.1 Content-Disposition
Daniel Stenberg33929112004-09-09 06:58:01 +0000395
Daniel Stenberg41d81862007-12-08 23:00:00 +0000396 Add option that is similar to -O but that takes the output file name from the
397 Content-Disposition: header, and/or uses the local file name used in
398 redirections for the cases the server bounces the request further to a
399 different file (name): http://curl.haxx.se/bug/feature.cgi?id=1364676
Daniel Stenberg84ec4062004-08-13 12:06:30 +0000400
Daniel Stenberg41d81862007-12-08 23:00:00 +000040111.2 sync
Daniel Stenberg87c43512002-08-26 22:32:46 +0000402
Daniel Stenberg41d81862007-12-08 23:00:00 +0000403 "curl --sync http://example.com/feed[1-100].rss" or
404 "curl --sync http://example.net/{index,calendar,history}.html"
Daniel Stenberge60e7412001-11-02 12:51:18 +0000405
Daniel Stenberg41d81862007-12-08 23:00:00 +0000406 Downloads a range or set of URLs using the remote name, but only if the
407 remote file is newer than the local file. A Last-Modified HTTP date header
408 should also be used to set the mod date on the downloaded file.
Daniel Stenbergd12fd892001-12-06 14:40:16 +0000409
Daniel Stenberg41d81862007-12-08 23:00:00 +000041011.3 glob posts
Daniel Stenberg5c4b4222002-02-18 10:51:28 +0000411
Daniel Stenberg41d81862007-12-08 23:00:00 +0000412 Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'.
413 This is easily scripted though.
Daniel Stenberg5c4b4222002-02-18 10:51:28 +0000414
Daniel Stenberg41d81862007-12-08 23:00:00 +000041511.4 prevent file overwriting
Daniel Stenberg5c4b4222002-02-18 10:51:28 +0000416
Daniel Stenberg41d81862007-12-08 23:00:00 +0000417 Add an option that prevents cURL from overwriting existing local files. When
418 used, and there already is an existing file with the target file name
419 (either -O or -o), a number should be appended (and increased if already
420 existing). So that index.html becomes first index.html.1 and then
421 index.html.2 etc.
Daniel Stenberg4c3a2312004-01-09 08:59:55 +0000422
Daniel Stenberg41d81862007-12-08 23:00:00 +000042311.5 ftp wildcard download
Daniel Stenberg391a37e2003-12-08 13:48:23 +0000424
Daniel Stenberg41d81862007-12-08 23:00:00 +0000425 "curl ftp://site.com/*.txt"
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000426
Daniel Stenberg41d81862007-12-08 23:00:00 +000042711.6 simultaneous parallel transfers
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000428
Daniel Stenberg41d81862007-12-08 23:00:00 +0000429 The client could be told to use maximum N simultaneous parallel transfers and
430 then just make sure that happens. It should of course not make more than one
431 connection to the same remote host. This would require the client to use the
432 multi interface. http://curl.haxx.se/bug/feature.cgi?id=1558595
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000433
Daniel Stenberg41d81862007-12-08 23:00:00 +000043411.7 provide formpost headers
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000435
Daniel Stenberg41d81862007-12-08 23:00:00 +0000436 Extending the capabilities of the multipart formposting. How about leaving
437 the ';type=foo' syntax as it is and adding an extra tag (headers) which
438 works like this: curl -F "coolfiles=@fil1.txt;headers=@fil1.hdr" where
439 fil1.hdr contains extra headers like
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000440
Daniel Stenberg41d81862007-12-08 23:00:00 +0000441 Content-Type: text/plain; charset=KOI8-R"
442 Content-Transfer-Encoding: base64
443 X-User-Comment: Please don't use browser specific HTML code
Daniel Stenberg3de85772004-12-21 10:54:21 +0000444
Daniel Stenberg41d81862007-12-08 23:00:00 +0000445 which should overwrite the program reasonable defaults (plain/text,
446 8bit...)
Daniel Stenberge60e7412001-11-02 12:51:18 +0000447
Daniel Stenberg41d81862007-12-08 23:00:00 +000044811.8 url-specific options
Daniel Stenberg0e899d72006-12-19 14:28:01 +0000449
Daniel Stenberg41d81862007-12-08 23:00:00 +0000450 Provide a way to make options bound to a specific URL among several on the
451 command line. Possibly by letting ':' separate options between URLs,
452 similar to this:
Daniel Stenberg96b71312003-03-15 15:08:55 +0000453
Daniel Stenberg41d81862007-12-08 23:00:00 +0000454 curl --data foo --url url.com : \
455 --url url2.com : \
456 --url url3.com --data foo3
Daniel Stenberge60e7412001-11-02 12:51:18 +0000457
Daniel Stenberg41d81862007-12-08 23:00:00 +0000458 (More details: http://curl.haxx.se/mail/archive-2004-07/0133.html)
Daniel Stenberge60e7412001-11-02 12:51:18 +0000459
Daniel Stenberg41d81862007-12-08 23:00:00 +0000460 The example would do a POST-GET-POST combination on a single command line.
Daniel Stenbergf3c7adc2007-08-17 22:21:41 +0000461
Daniel Stenberg41d81862007-12-08 23:00:00 +000046212. Build
Daniel Stenbergf3c7adc2007-08-17 22:21:41 +0000463
Daniel Stenberg41d81862007-12-08 23:00:00 +000046412.1 roffit
Dan Fandrich9f44a952007-08-30 20:34:57 +0000465
Daniel Stenberg41d81862007-12-08 23:00:00 +0000466 Consider extending 'roffit' to produce decent ASCII output, and use that
467 instead of (g)nroff when building src/hugehelp.c
Dan Fandrich9f44a952007-08-30 20:34:57 +0000468
Daniel Stenberg41d81862007-12-08 23:00:00 +000046913. Test suite
Dan Fandrich9f44a952007-08-30 20:34:57 +0000470
Daniel Stenberg41d81862007-12-08 23:00:00 +000047113.1 SSL tunnel
Daniel Stenberg83a46382003-03-10 20:46:54 +0000472
Daniel Stenberg41d81862007-12-08 23:00:00 +0000473 Make our own version of stunnel for simple port forwarding to enable HTTPS
474 and FTP-SSL tests without the stunnel dependency, and it could allow us to
475 provide test tools built with either OpenSSL or GnuTLS
Daniel Stenberg83a46382003-03-10 20:46:54 +0000476
Daniel Stenberg41d81862007-12-08 23:00:00 +000047713.2 nicer lacking perl message
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000478
Daniel Stenberg41d81862007-12-08 23:00:00 +0000479 If perl wasn't found by the configure script, don't attempt to run the tests
480 but explain something nice why it doesn't.
Daniel Stenberg35840a22004-07-01 08:22:52 +0000481
Daniel Stenberg41d81862007-12-08 23:00:00 +000048213.3 more protocols supported
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000483
Daniel Stenberg41d81862007-12-08 23:00:00 +0000484 Extend the test suite to include more protocols. The telnet could just do ftp
485 or http operations (for which we have test servers).
Daniel Stenberga00e7f02004-10-25 11:28:40 +0000486
Daniel Stenberg41d81862007-12-08 23:00:00 +000048713.4 more platforms supported
488
489 Make the test suite work on more platforms. OpenBSD and Mac OS. Remove
490 fork()s and it should become even more portable.
491
49214. Next SONAME bump
493
49414.1 http-style HEAD output for ftp
495
496 #undef CURL_FTP_HTTPSTYLE_HEAD in lib/ftp.c to remove the HTTP-style headers
497 from being output in NOBODY requests over ftp
498
49914.2 combine error codes
500
501 Combine some of the error codes to remove duplicates. The original
502 numbering should not be changed, and the old identifiers would be
503 macroed to the new ones in an CURL_NO_OLDIES section to help with
504 backward compatibility.
505
506 Candidates for removal and their replacements:
507
508 CURLE_FILE_COULDNT_READ_FILE => CURLE_REMOTE_FILE_NOT_FOUND
509 CURLE_FTP_COULDNT_RETR_FILE => CURLE_REMOTE_FILE_NOT_FOUND
510 CURLE_FTP_COULDNT_USE_REST => CURLE_RANGE_ERROR
511 CURLE_FUNCTION_NOT_FOUND => CURLE_FAILED_INIT
512 CURLE_LDAP_INVALID_URL => CURLE_URL_MALFORMAT
513 CURLE_TFTP_NOSUCHUSER => CURLE_TFTP_ILLEGAL
514 CURLE_TFTP_NOTFOUND => CURLE_REMOTE_FILE_NOT_FOUND
515 CURLE_TFTP_PERM => CURLE_REMOTE_ACCESS_DENIED
516
51715. Next major release
518
51915.1 cleanup return codes
520
521 curl_easy_cleanup() returns void, but curl_multi_cleanup() returns a
522 CURLMcode. These should be changed to be the same.
523
52415.2 remove obsolete defines
525
526 remove obsolete defines from curl/curl.h
527
52815.3 size_t
529
530 make several functions use size_t instead of int in their APIs
531
53215.4 remove several functions
533
534 remove the following functions from the public API:
535
536 curl_getenv
537
538 curl_mprintf (and variations)
539
540 curl_strequal
541
542 curl_strnequal
543
544 They will instead become curlx_ - alternatives. That makes the curl app
545 still capable of building with them from source.
546
54715.5 remove CURLOPT_FAILONERROR
548
549 Remove support for CURLOPT_FAILONERROR, it has gotten too kludgy and weird
550 internally. Let the app judge success or not for itself.