blob: 62f8f26e71aff501e999f7523897d86a6696596b [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 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
Daniel Stenberg87c43512002-08-26 22:32:46 +000083
Daniel Stenberg41d81862007-12-08 23:00:00 +000084 12. Build
85 12.1 roffit
Daniel Stenberg87c43512002-08-26 22:32:46 +000086
Daniel Stenberg41d81862007-12-08 23:00:00 +000087 13. Test suite
88 13.1 SSL tunnel
89 13.2 nicer lacking perl message
90 13.3 more protocols supported
91 13.4 more platforms supported
Daniel Stenberg87c43512002-08-26 22:32:46 +000092
Daniel Stenberg41d81862007-12-08 23:00:00 +000093 14. Next SONAME bump
94 14.1 http-style HEAD output for ftp
95 14.2 combine error codes
Daniel Stenberg57007e82005-07-30 23:48:07 +000096
Daniel Stenberg41d81862007-12-08 23:00:00 +000097 15. Next major release
98 15.1 cleanup return codes
99 15.2 remove obsolete defines
100 15.3 size_t
101 15.4 remove several functions
102 15.5 remove CURLOPT_FAILONERROR
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
Daniel Stenberg41d81862007-12-08 23:00:00 +0000110 Introdue another callback interface for upload/download that makes one less
111 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 Stenberg41d81862007-12-08 23:00:00 +00001261.4 Get IP address
Daniel Stenbergc0acaa52003-04-28 17:29:32 +0000127
Daniel Stenberg41d81862007-12-08 23:00:00 +0000128 Add the following to curl_easy_getinfo(): GET_HTTP_IP, GET_FTP_IP and
129 GET_FTP_DATA_IP. Return a string with the used IP.
Daniel Stenberg0058e872001-05-18 12:55:13 +0000130
Daniel Stenberg41d81862007-12-08 23:00:00 +00001311.5 c-ares ipv6
Daniel Stenbergeb6a14f2003-01-07 07:54:14 +0000132
Daniel Stenberg41d81862007-12-08 23:00:00 +0000133 Make libcurl built with c-ares use c-ares' IPv6 abilities. They weren't
134 present when we first added c-ares support but they have been added since!
135 When this is done and works, we can actually start considering making c-ares
136 powered libcurl the default build (which of course would require that we'd
137 bundle the c-ares source code in the libcurl source code releases).
Daniel Stenberg73323502004-05-05 06:11:57 +0000138
Daniel Stenberg3d09cb02007-12-09 12:20:06 +00001391.6 configure-based info in public headers
Daniel Stenberg2c39a432001-07-02 08:21:25 +0000140
Daniel Stenberg06fb2422007-12-09 12:00:54 +0000141 Make the public headers include the proper system includes based on what was
142 present at the time when configure was run. Currently, the sys/select.h
Daniel Stenberg41d81862007-12-08 23:00:00 +0000143 header is for example included by curl/multi.h only on specific platforms we
144 know MUST have it. This is error-prone. We therefore want the header files to
145 adapt to configure results. Those results must be stored in a new header and
146 they must use a curl name space, i.e not be HAVE_* prefix (as that would risk
147 collide with other apps that use libcurl and that runs configure).
Daniel Stenberg29108802004-12-22 09:19:29 +0000148
Daniel Stenberg41d81862007-12-08 23:00:00 +0000149 Work on this has been started but hasn't been finished, and the initial patch
150 and some details are found here:
151 http://curl.haxx.se/mail/lib-2006-12/0084.html
Daniel Stenberg3dbe7082007-09-13 09:02:15 +0000152
Daniel Stenberg41d81862007-12-08 23:00:00 +0000153 The remaining problems to solve involve the platforms that can't run
154 configure.
Daniel Stenberg7c37c6a2000-05-22 17:35:35 +0000155
Daniel Stenberg41d81862007-12-08 23:00:00 +00001562. libcurl - multi interface
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000157
Daniel Stenberg41d81862007-12-08 23:00:00 +00001582.1 More non-blocking
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000159
Daniel Stenberg41d81862007-12-08 23:00:00 +0000160 Make sure we don't ever loop because of non-blocking sockets return
161 EWOULDBLOCK or similar. The GnuTLS connection etc.
Daniel Stenberge60e7412001-11-02 12:51:18 +0000162
Daniel Stenberg41d81862007-12-08 23:00:00 +00001632.2 Pause transfers
Daniel Stenberg3dbe7082007-09-13 09:02:15 +0000164
Daniel Stenberg41d81862007-12-08 23:00:00 +0000165 Make transfers treated more carefully. We need a way to tell libcurl we have
166 data to write, as the current system expects us to upload data each time the
167 socket is writable and there is no way to say that we want to upload data
168 soon just not right now, without that aborting the upload. The opposite
169 situation should be possible as well, that we tell libcurl we're ready to
170 accept read data. Today libcurl feeds the data as soon as it is available for
171 reading, no matter what.
Daniel Stenberg25411e02006-06-24 15:21:49 +0000172
Daniel Stenberg41d81862007-12-08 23:00:00 +00001732.3 Remove easy interface internally
Daniel Stenberg3b491d02004-04-06 15:29:01 +0000174
Daniel Stenberg41d81862007-12-08 23:00:00 +0000175 Make curl_easy_perform() a wrapper-function that simply creates a multi
176 handle, adds the easy handle to it, runs curl_multi_perform() until the
177 transfer is done, then detach the easy handle, destroy the multi handle and
178 return the easy handle's return code. This will thus make everything
179 internally use and assume the multi interface. The select()-loop should use
180 curl_multi_socket().
Daniel Stenberg3b491d02004-04-06 15:29:01 +0000181
Daniel Stenberg41d81862007-12-08 23:00:00 +00001822.4 Avoid having to remove/readd handles
Daniel Stenberg5cffe052002-02-07 10:43:43 +0000183
Daniel Stenberg41d81862007-12-08 23:00:00 +0000184 curl_multi_handle_control() - this can control the easy handle (while) added
185 to a multi handle in various ways:
Daniel Stenberg60f19262001-11-13 09:56:29 +0000186
Daniel Stenberg41d81862007-12-08 23:00:00 +0000187 o RESTART, unconditionally restart this easy handle's transfer from the
188 start, re-init the state
Daniel Stenberg5c4b4222002-02-18 10:51:28 +0000189
Daniel Stenberg41d81862007-12-08 23:00:00 +0000190 o RESTART_COMPLETED, restart this easy handle's transfer but only if the
191 existing transfer has already completed and it is in a "finished state".
Daniel Stenberge60e7412001-11-02 12:51:18 +0000192
Daniel Stenberg41d81862007-12-08 23:00:00 +0000193 o STOP, just stop this transfer and consider it completed
Daniel Stenberg57007e82005-07-30 23:48:07 +0000194
Daniel Stenberg41d81862007-12-08 23:00:00 +0000195 o PAUSE?
Daniel Stenberg9853acb2005-08-29 06:59:44 +0000196
Daniel Stenberg41d81862007-12-08 23:00:00 +0000197 o RESUME?
Daniel Stenberg9853acb2005-08-29 06:59:44 +0000198
Daniel Stenberg41d81862007-12-08 23:00:00 +00001993. Documentation
Daniel Stenberg9853acb2005-08-29 06:59:44 +0000200
Daniel Stenberg41d81862007-12-08 23:00:00 +00002013.1 More and better
Daniel Stenberg9853acb2005-08-29 06:59:44 +0000202
Daniel Stenberg41d81862007-12-08 23:00:00 +0000203 Exactly
Daniel Stenberg9853acb2005-08-29 06:59:44 +0000204
Daniel Stenberg41d81862007-12-08 23:00:00 +00002054. FTP
Daniel Stenbergbcccd2f2006-05-30 08:45:59 +0000206
Daniel Stenberg41d81862007-12-08 23:00:00 +00002074.1 PRET
Daniel Stenbergbcccd2f2006-05-30 08:45:59 +0000208
Daniel Stenberg41d81862007-12-08 23:00:00 +0000209 PRET is a command that primarily "drftpd" supports, which could be useful
210 when using libcurl against such a server. It is a non-standard and a rather
211 oddly designed command, but...
212 http://curl.haxx.se/bug/feature.cgi?id=1729967
213
2144.2 Alter passive/active on failure and retry
215
216 When trying to connect passively to a server which only supports active
217 connections, libcurl returns CURLE_FTP_WEIRD_PASV_REPLY and closes the
218 connection. There could be a way to fallback to an active connection (and
219 vice versa). http://curl.haxx.se/bug/feature.cgi?id=1754793
220
2214.3 Earlier bad letter detection
222
223 Make the detection of (bad) %0d and %0a codes in FTP url parts earlier in the
224 process to avoid doing a resolve and connect in vain.
225
2264.4 REST for large files
227
228 REST fix for servers not behaving well on >2GB requests. This should fail if
229 the server doesn't set the pointer to the requested index. The tricky
230 (impossible?) part is to figure out if the server did the right thing or not.
231
2324.5 FTP proxy support
233
234 Support the most common FTP proxies, Philip Newton provided a list allegedly
235 from ncftp. This is not a subject without debate, and is probably not really
236 suitable for libcurl. http://curl.haxx.se/mail/archive-2003-04/0126.html
237
2384.6 PORT port range
239
240 Make CURLOPT_FTPPORT support an additional port number on the IP/if/name,
241 like "blabla:[port]" or possibly even "blabla:[portfirst]-[portsecond]".
242 http://curl.haxx.se/bug/feature.cgi?id=1505166
243
2444.7 ASCII support
245
246 FTP ASCII transfers do not follow RFC959. They don't convert the data
247 accordingly.
248
2495. HTTP
250
2515.1 Other HTTP versions with CONNECT
252
253 When doing CONNECT to a HTTP proxy, libcurl always uses HTTP/1.0. This has
254 never been reported as causing trouble to anyone, but should be considered to
255 use the HTTP version the user has chosen.
256
Daniel Stenberga03c2d82007-12-09 12:12:52 +00002575.2 Better persistancy for HTTP 1.0
Daniel Stenberg41d81862007-12-08 23:00:00 +0000258
259 "Better" support for persistent connections over HTTP 1.0
260 http://curl.haxx.se/bug/feature.cgi?id=1089001
261
2626. TELNET
263
2646.1 ditch stdin
265
266Reading input (to send to the remote server) on stdin is a crappy solution for
267library purposes. We need to invent a good way for the application to be able
268to provide the data to send.
269
2706.2 ditch telnet-specific select
271
272 Move the telnet support's network select() loop go away and merge the code
273 into the main transfer loop. Until this is done, the multi interface won't
274 work for telnet.
275
2767. 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
2837.2 Provide mytex locking API
284
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
2897.3 dumpcert
290
291 Anton Fedorov's "dumpcert" patch:
292 http://curl.haxx.se/mail/lib-2004-03/0088.html
293
2947.4 Evaluate SSL patches
295
296 Evaluate/apply Gertjan van Wingerde's SSL patches:
297 http://curl.haxx.se/mail/lib-2004-03/0087.html
298
2997.5 Cache OpenSSL contexts
300
301 "Look at SSL cafile - quick traces look to me like these are done on every
302 request as well, when they should only be necessary once per ssl context (or
303 once per handle)". The major improvement we can rather easily do is to make
304 sure we don't create and kill a new SSL "context" for every request, but
305 instead make one for every connection and re-use that SSL context in the same
306 style connections are re-used. It will make us use slightly more memory but
307 it will libcurl do less creations and deletions of SSL contexts.
308
3097.6 Export session ids
310
311 Add an interface to libcurl that enables "session IDs" to get
312 exported/imported. Cris Bailiff said: "OpenSSL has functions which can
313 serialise the current SSL state to a buffer of your choice, and recover/reset
314 the state from such a buffer at a later date - this is used by mod_ssl for
315 apache to implement and SSL session ID cache".
316
3177.7 Provide callback for cert verfication
318
319 OpenSSL supports a callback for customised verification of the peer
320 certificate, but this doesn't seem to be exposed in the libcurl APIs. Could
321 it be? There's so much that could be done if it were!
322
3237.8 Support other SSL libraries
324
325 Make curl's SSL layer capable of using other free SSL libraries. Such as
326 MatrixSSL (http://www.matrixssl.org/).
327
3287.9 Support SRP on the TLS layer
329
330 Peter Sylvester's patch for SRP on the TLS layer. Awaits OpenSSL support for
331 this, no need to support this in libcurl before there's an OpenSSL release
332 that does it.
333
3347.10 improve configure --with-ssl
335
336 make the configure --with-ssl option first check for OpenSSL, then GnuTLS,
337 then NSS...
338
3398. GnuTLS
340
3418.1 Make NTLM work without OpenSSL functions
342
343 Get NTLM working using the functions provided by libgcrypt, since GnuTLS
344 already depends on that to function. Not strictly SSL/TLS related, but
345 hey... Another option is to get available DES and MD4 source code from the
346 cryptopp library. They are fine license-wise, but are C++.
347
3488.2 SSl engine stuff
349
350 Is this even possible?
351
3528.3 SRP
353
354 Work out a common method with Peter Sylvester's OpenSSL-patch for SRP on the
355 TLS to provide name and password. GnuTLS already supports it...
356
3578.4 non-blocking
358
359 Fix the connection phase to be non-blocking when multi interface is used
360
3618.5 check connection
362
363 Add a way to check if the connection seems to be alive, to correspond to the
364 SSL_peak() way we use with OpenSSL.
365
3669. LDAP
367
3689.1 ditch ldap-specific select
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000369
370 * Look over the implementation. The looping will have to "go away" from the
371 lib/ldap.c source file and get moved to the main network code so that the
372 multi interface and friends will work for LDAP as well.
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
Daniel Stenberg41d81862007-12-08 23:00:00 +000046112. Build
Daniel Stenbergf3c7adc2007-08-17 22:21:41 +0000462
Daniel Stenberg41d81862007-12-08 23:00:00 +000046312.1 roffit
Dan Fandrich9f44a952007-08-30 20:34:57 +0000464
Daniel Stenberg41d81862007-12-08 23:00:00 +0000465 Consider extending 'roffit' to produce decent ASCII output, and use that
466 instead of (g)nroff when building src/hugehelp.c
Dan Fandrich9f44a952007-08-30 20:34:57 +0000467
Daniel Stenberg41d81862007-12-08 23:00:00 +000046813. Test suite
Dan Fandrich9f44a952007-08-30 20:34:57 +0000469
Daniel Stenberg41d81862007-12-08 23:00:00 +000047013.1 SSL tunnel
Daniel Stenberg83a46382003-03-10 20:46:54 +0000471
Daniel Stenberg41d81862007-12-08 23:00:00 +0000472 Make our own version of stunnel for simple port forwarding to enable HTTPS
473 and FTP-SSL tests without the stunnel dependency, and it could allow us to
474 provide test tools built with either OpenSSL or GnuTLS
Daniel Stenberg83a46382003-03-10 20:46:54 +0000475
Daniel Stenberg41d81862007-12-08 23:00:00 +000047613.2 nicer lacking perl message
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000477
Daniel Stenberg41d81862007-12-08 23:00:00 +0000478 If perl wasn't found by the configure script, don't attempt to run the tests
479 but explain something nice why it doesn't.
Daniel Stenberg35840a22004-07-01 08:22:52 +0000480
Daniel Stenberg41d81862007-12-08 23:00:00 +000048113.3 more protocols supported
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000482
Daniel Stenberg41d81862007-12-08 23:00:00 +0000483 Extend the test suite to include more protocols. The telnet could just do ftp
484 or http operations (for which we have test servers).
Daniel Stenberga00e7f02004-10-25 11:28:40 +0000485
Daniel Stenberg41d81862007-12-08 23:00:00 +000048613.4 more platforms supported
487
488 Make the test suite work on more platforms. OpenBSD and Mac OS. Remove
489 fork()s and it should become even more portable.
490
49114. Next SONAME bump
492
49314.1 http-style HEAD output for ftp
494
495 #undef CURL_FTP_HTTPSTYLE_HEAD in lib/ftp.c to remove the HTTP-style headers
496 from being output in NOBODY requests over ftp
497
49814.2 combine error codes
499
500 Combine some of the error codes to remove duplicates. The original
501 numbering should not be changed, and the old identifiers would be
502 macroed to the new ones in an CURL_NO_OLDIES section to help with
503 backward compatibility.
504
505 Candidates for removal and their replacements:
506
507 CURLE_FILE_COULDNT_READ_FILE => CURLE_REMOTE_FILE_NOT_FOUND
508 CURLE_FTP_COULDNT_RETR_FILE => CURLE_REMOTE_FILE_NOT_FOUND
509 CURLE_FTP_COULDNT_USE_REST => CURLE_RANGE_ERROR
510 CURLE_FUNCTION_NOT_FOUND => CURLE_FAILED_INIT
511 CURLE_LDAP_INVALID_URL => CURLE_URL_MALFORMAT
512 CURLE_TFTP_NOSUCHUSER => CURLE_TFTP_ILLEGAL
513 CURLE_TFTP_NOTFOUND => CURLE_REMOTE_FILE_NOT_FOUND
514 CURLE_TFTP_PERM => CURLE_REMOTE_ACCESS_DENIED
515
51615. 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
544 still capable of building with them from source.
545
54615.5 remove CURLOPT_FAILONERROR
547
548 Remove support for CURLOPT_FAILONERROR, it has gotten too kludgy and weird
549 internally. Let the app judge success or not for itself.