blob: c94bc5f9836f4acb1274499a406defe4f674a449 [file] [log] [blame]
Daniel Stenberg7c37c6a2000-05-22 17:35:35 +00001 _ _ ____ _
2 ___| | | | _ \| |
3 / __| | | | |_) | |
4 | (__| |_| | _ <| |___
5 \___|\___/|_| \_\_____|
6
7TODO
8
Daniel Stenberg9d68fde2002-08-14 23:35:19 +00009 Things to do in project cURL. Please tell us what you think, contribute and
10 send us patches that improve things! Also check the http://curl.haxx.se/dev
11 web section for various technical development notes.
Daniel Stenberg7c37c6a2000-05-22 17:35:35 +000012
Daniel Stenberg3660f672003-08-11 16:17:51 +000013 All bugs documented in the KNOWN_BUGS document are subject for fixing!
14
Daniel Stenberge60e7412001-11-02 12:51:18 +000015 LIBCURL
Daniel Stenberg6704d442001-08-22 11:22:43 +000016
Daniel Stenberg2d503912001-06-19 09:12:27 +000017 * Introduce another callback interface for upload/download that makes one
18 less copy of data and thus a faster operation.
Daniel Stenberge60e7412001-11-02 12:51:18 +000019 [http://curl.haxx.se/dev/no_copy_callbacks.txt]
20
Daniel Stenberg3660f672003-08-11 16:17:51 +000021 * More data sharing. curl_share_* functions already exist and work, and they
Daniel Stenberg097938e2004-03-01 09:08:52 +000022 can be extended to share more. For example, enable sharing of the ares
Daniel Stenberg5ad2a252005-04-11 13:50:19 +000023 channel and the connection cache.
Daniel Stenberg097938e2004-03-01 09:08:52 +000024
25 * Introduce a new error code indicating authentication problems (for proxy
26 CONNECT error 407 for example). This cannot be an error code, we must not
27 return informational stuff as errors, consider a new info returned by
Daniel Stenberga1287ec2005-09-16 07:18:25 +000028 curl_easy_getinfo() http://curl.haxx.se/bug/view.cgi?id=845941
Daniel Stenberg01cfe672002-01-18 12:48:36 +000029
Daniel Stenberg0d2cdd92004-10-08 09:57:33 +000030 * Use 'struct lifreq' and SIOCGLIFADDR instead of 'struct ifreq' and
31 SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete.
Daniel Stenberg5ad2a252005-04-11 13:50:19 +000032 To support ipv6 interface addresses properly.
Daniel Stenberg0d2cdd92004-10-08 09:57:33 +000033
Daniel Stenberg9395cad2005-01-11 22:26:00 +000034 * Add the following to curl_easy_getinfo(): GET_HTTP_IP, GET_FTP_IP and
35 GET_FTP_DATA_IP. Return a string with the used IP. Suggested by Alan.
36
Daniel Stenberg86660c72005-07-08 13:28:16 +000037 * Add option that changes the interval in which the progress callback is
38 called at most.
39
Daniel Stenbergb4113362005-12-10 22:14:17 +000040 * Make libcurl built with c-ares use c-ares' IPv6 abilities. They weren't
41 present when we first added c-ares support but they have been added since!
42 When this is done and works, we can actually start considering making c-ares
43 powered libcurl the default build (which of course would require that we'd
44 bundle the c-ares source code in the libcurl source code releases).
45
Daniel Stenberg16f3a322006-01-28 13:14:38 +000046 * Make the curl/*.h headers include the proper system includes based on what
47 was present at the time when configure was run. Currently, the sys/select.h
48 header is for example included by curl/multi.h only on specific platforms
49 we know MUST have it. This is error-prone. We therefore want the header
50 files to adapt to configure results. Those results must be stored in a new
51 header and they must use a curl name space, i.e not be HAVE_* prefix (as
52 that would risk collide with other apps that use libcurl and that runs
53 configure).
54
Daniel Stenberg87c43512002-08-26 22:32:46 +000055 LIBCURL - multi interface
56
Daniel Stenberg87c43512002-08-26 22:32:46 +000057 * Make sure we don't ever loop because of non-blocking sockets return
Daniel Stenbergbcccd2f2006-05-30 08:45:59 +000058 EWOULDBLOCK or similar. The GnuTLS connection etc.
Daniel Stenberg87c43512002-08-26 22:32:46 +000059
Daniel Stenberg065b87e2003-02-24 18:14:48 +000060 * Make transfers treated more carefully. We need a way to tell libcurl we
61 have data to write, as the current system expects us to upload data each
62 time the socket is writable and there is no way to say that we want to
63 upload data soon just not right now, without that aborting the upload. The
64 opposite situation should be possible as well, that we tell libcurl we're
65 ready to accept read data. Today libcurl feeds the data as soon as it is
66 available for reading, no matter what.
Daniel Stenberg87c43512002-08-26 22:32:46 +000067
Daniel Stenberg57007e82005-07-30 23:48:07 +000068 * Make curl_easy_perform() a wrapper-function that simply creates a multi
69 handle, adds the easy handle to it, runs curl_multi_perform() until the
70 transfer is done, then detach the easy handle, destroy the multi handle and
71 return the easy handle's return code. This will thus make everything
72 internally use and assume the multi interface. The select()-loop should use
73 curl_multi_socket().
74
Daniel Stenberge60e7412001-11-02 12:51:18 +000075 DOCUMENTATION
76
Daniel Stenberg87c43512002-08-26 22:32:46 +000077 * More and better
Daniel Stenberge60e7412001-11-02 12:51:18 +000078
79 FTP
80
Daniel Stenberg3050ae52005-01-19 21:56:02 +000081 * Make the detection of (bad) %0d and %0a codes in FTP url parts earlier in
82 the process to avoid doing a resolve and connect in vain.
83
Daniel Stenberg338c2da2004-08-09 12:39:28 +000084 * Support GSS/Kerberos 5 for ftp file transfer. This will allow user
85 authentication and file encryption. Possible libraries and example clients
Dan Fandrich4d7f08a2005-10-18 18:15:01 +000086 are available from MIT or Heimdal. Requested by Markus Moeller.
Daniel Stenberg338c2da2004-08-09 12:39:28 +000087
Daniel Stenberg3b491d02004-04-06 15:29:01 +000088 * REST fix for servers not behaving well on >2GB requests. This should fail
89 if the server doesn't set the pointer to the requested index. The tricky
Daniel Stenberg16e9a9e2004-11-28 13:04:34 +000090 (impossible?) part is to figure out if the server did the right thing or
91 not.
Daniel Stenberg3b491d02004-04-06 15:29:01 +000092
Daniel Stenberg339f84f2003-07-30 13:41:59 +000093 * Support the most common FTP proxies, Philip Newton provided a list
94 allegedly from ncftp:
95 http://curl.haxx.se/mail/archive-2003-04/0126.html
96
Daniel Stenbergc0acaa52003-04-28 17:29:32 +000097 * Make CURLOPT_FTPPORT support an additional port number on the IP/if/name,
98 like "blabla:[port]" or possibly even "blabla:[portfirst]-[portsecond]".
99
Daniel Stenbergb7567972003-05-26 08:19:06 +0000100 * FTP ASCII transfers do not follow RFC959. They don't convert the data
101 accordingly.
Daniel Stenberg0058e872001-05-18 12:55:13 +0000102
Daniel Stenbergeb6a14f2003-01-07 07:54:14 +0000103 * Since USERPWD always override the user and password specified in URLs, we
104 might need another way to specify user+password for anonymous ftp logins.
105
Daniel Stenberg73323502004-05-05 06:11:57 +0000106 * The FTP code should get a way of returning errors that is known to still
107 have the control connection alive and sound. Currently, a returned error
108 from within ftp-functions does not tell if the control connection is still
109 OK to use or not. This causes libcurl to fail to re-use connections
110 slightly too often.
111
Daniel Stenberge60e7412001-11-02 12:51:18 +0000112 HTTP
Daniel Stenberg2c39a432001-07-02 08:21:25 +0000113
Daniel Stenberg29108802004-12-22 09:19:29 +0000114 * When doing CONNECT to a HTTP proxy, libcurl always uses HTTP/1.0. This has
115 never been reported as causing trouble to anyone, but should be considered
116 to use the HTTP version the user has chosen.
117
Daniel Stenberge60e7412001-11-02 12:51:18 +0000118 TELNET
Daniel Stenberg7c37c6a2000-05-22 17:35:35 +0000119
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000120 * Reading input (to send to the remote server) on stdin is a crappy solution
121 for library purposes. We need to invent a good way for the application to
122 be able to provide the data to send.
123
124 * Move the telnet support's network select() loop go away and merge the code
125 into the main transfer loop. Until this is done, the multi interface won't
126 work for telnet.
127
Daniel Stenberge60e7412001-11-02 12:51:18 +0000128 SSL
129
Daniel Stenberg25411e02006-06-24 15:21:49 +0000130 * Provide a libcurl API for setting mutex callbacks in the underlying SSL
131 library, so that the same application code can use mutex-locking
132 independently of OpenSSL or GnutTLS being used.
133
Daniel Stenberg3b491d02004-04-06 15:29:01 +0000134 * Anton Fedorov's "dumpcert" patch:
135 http://curl.haxx.se/mail/lib-2004-03/0088.html
136
137 * Evaluate/apply Gertjan van Wingerde's SSL patches:
138 http://curl.haxx.se/mail/lib-2004-03/0087.html
139
Daniel Stenberg9432bfe2004-08-27 07:17:52 +0000140 * "Look at SSL cafile - quick traces look to me like these are done on every
141 request as well, when they should only be necessary once per ssl context
142 (or once per handle)". The major improvement we can rather easily do is to
143 make sure we don't create and kill a new SSL "context" for every request,
144 but instead make one for every connection and re-use that SSL context in
145 the same style connections are re-used. It will make us use slightly more
146 memory but it will libcurl do less creations and deletions of SSL contexts.
Daniel Stenberg5cffe052002-02-07 10:43:43 +0000147
Daniel Stenberg60f19262001-11-13 09:56:29 +0000148 * Add an interface to libcurl that enables "session IDs" to get
149 exported/imported. Cris Bailiff said: "OpenSSL has functions which can
150 serialise the current SSL state to a buffer of your choice, and
151 recover/reset the state from such a buffer at a later date - this is used
Daniel Stenberg9432bfe2004-08-27 07:17:52 +0000152 by mod_ssl for apache to implement and SSL session ID cache".
Daniel Stenberg60f19262001-11-13 09:56:29 +0000153
Daniel Stenberg5c4b4222002-02-18 10:51:28 +0000154 * OpenSSL supports a callback for customised verification of the peer
155 certificate, but this doesn't seem to be exposed in the libcurl APIs. Could
156 it be? There's so much that could be done if it were! (brought by Chris
157 Clark)
158
Daniel Stenberg5ad2a252005-04-11 13:50:19 +0000159 * Make curl's SSL layer capable of using other free SSL libraries. Such as
Daniel Stenberg60e26192005-05-11 11:56:04 +0000160 Mozilla Security Services
161 (http://www.mozilla.org/projects/security/pki/nss/), MatrixSSL
162 (http://www.matrixssl.org/) or yaSSL (http://yassl.com/). At least the
163 latter two could be alternatives for those looking to reduce the footprint
164 of libcurl built with OpenSSL or GnuTLS.
Daniel Stenberge60e7412001-11-02 12:51:18 +0000165
Daniel Stenberg57007e82005-07-30 23:48:07 +0000166 * Peter Sylvester's patch for SRP on the TLS layer.
167 Awaits OpenSSL support for this, no need to support this in libcurl before
168 there's an OpenSSL release that does it.
169
Daniel Stenberg9853acb2005-08-29 06:59:44 +0000170 * make the configure --with-ssl option first check for OpenSSL and then for
171 GnuTLS if OpenSSL wasn't detected.
172
173 GnuTLS
174
175 * Get NTLM working using the functions provided by libgcrypt, since GnuTLS
176 already depends on that to function. Not strictly SSL/TLS related, but
177 hey... Another option is to get available DES and MD4 source code from the
178 cryptopp library. They are fine license-wise, but are C++.
179
180 * SSL engine stuff?
181
182 * Work out a common method with Peter Sylvester's OpenSSL-patch for SRP
183 on the TLS to provide name and password
184
Daniel Stenbergbcccd2f2006-05-30 08:45:59 +0000185 * Fix the connection phase to be non-blocking when multi interface is used
186
Daniel Stenberg0e899d72006-12-19 14:28:01 +0000187 * Add a way to check if the connection seems to be alive, to correspond to
188 the SSL_peak() way we use with OpenSSL.
Daniel Stenbergbcccd2f2006-05-30 08:45:59 +0000189
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000190 LDAP
191
192 * Look over the implementation. The looping will have to "go away" from the
193 lib/ldap.c source file and get moved to the main network code so that the
194 multi interface and friends will work for LDAP as well.
195
Daniel Stenberg29108802004-12-22 09:19:29 +0000196 NEW PROTOCOLS
197
Daniel Stenberg29108802004-12-22 09:19:29 +0000198 * RTSP - RFC2326 (protocol - very HTTP-like, also contains URL description)
199
Daniel Stenberg29108802004-12-22 09:19:29 +0000200 * RSYNC (no RFCs for protocol nor URI/URL format). An implementation should
Daniel Stenbergdbb69792004-12-22 09:21:04 +0000201 most probably use an existing rsync library, such as librsync.
Daniel Stenberg29108802004-12-22 09:19:29 +0000202
Daniel Stenberg3e049a92001-11-13 09:06:32 +0000203 CLIENT
Daniel Stenberge60e7412001-11-02 12:51:18 +0000204
Daniel Stenberg33929112004-09-09 06:58:01 +0000205 * "curl --sync http://example.com/feed[1-100].rss" or
206 "curl --sync http://example.net/{index,calendar,history}.html"
207
208 Downloads a range or set of URLs using the remote name, but only if the
209 remote file is newer than the local file. A Last-Modified HTTP date header
210 should also be used to set the mod date on the downloaded file.
211 (idea from "Brianiac")
212
Daniel Stenberg84ec4062004-08-13 12:06:30 +0000213 * Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'.
Daniel Stenberg9432bfe2004-08-27 07:17:52 +0000214 Requested by Dane Jensen and others. This is easily scripted though.
Daniel Stenberg84ec4062004-08-13 12:06:30 +0000215
Dan Fandrich4d7f08a2005-10-18 18:15:01 +0000216 * Add an option that prevents cURL from overwriting existing local files. When
Daniel Stenberg87c43512002-08-26 22:32:46 +0000217 used, and there already is an existing file with the target file name
218 (either -O or -o), a number should be appended (and increased if already
219 existing). So that index.html becomes first index.html.1 and then
220 index.html.2 etc. Jeff Pohlmeyer suggested.
221
Daniel Stenberg3e049a92001-11-13 09:06:32 +0000222 * "curl ftp://site.com/*.txt"
Daniel Stenberge60e7412001-11-02 12:51:18 +0000223
Daniel Stenbergd095b202003-10-17 12:37:15 +0000224 * The client could be told to use maximum N simultaneous transfers and then
225 just make sure that happens. It should of course not make more than one
226 connection to the same remote host. This would require the client to use
227 the multi interface.
Daniel Stenbergd12fd892001-12-06 14:40:16 +0000228
Daniel Stenberg5c4b4222002-02-18 10:51:28 +0000229 * Extending the capabilities of the multipart formposting. How about leaving
230 the ';type=foo' syntax as it is and adding an extra tag (headers) which
231 works like this: curl -F "coolfiles=@fil1.txt;headers=@fil1.hdr" where
232 fil1.hdr contains extra headers like
233
234 Content-Type: text/plain; charset=KOI8-R"
235 Content-Transfer-Encoding: base64
236 X-User-Comment: Please don't use browser specific HTML code
237
238 which should overwrite the program reasonable defaults (plain/text,
239 8bit...) (Idea brough to us by kromJx)
240
Daniel Stenberg4c3a2312004-01-09 08:59:55 +0000241 * ability to specify the classic computing suffixes on the range
242 specifications. For example, to download the first 500 Kilobytes of a file,
243 be able to specify the following for the -r option: "-r 0-500K" or for the
244 first 2 Megabytes of a file: "-r 0-2M". (Mark Smith suggested)
245
Daniel Stenberg391a37e2003-12-08 13:48:23 +0000246 * --data-encode that URL encodes the data before posting
247 http://curl.haxx.se/mail/archive-2003-11/0091.html (Kevin Roth suggested)
248
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000249 * Provide a way to make options bound to a specific URL among several on the
Daniel Stenbergb5cafc02004-08-09 12:36:17 +0000250 command line. Possibly by letting ':' separate options between URLs,
251 similar to this:
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000252
Daniel Stenberg9432bfe2004-08-27 07:17:52 +0000253 curl --data foo --url url.com : \
Daniel Stenbergb5cafc02004-08-09 12:36:17 +0000254 --url url2.com : \
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000255 --url url3.com --data foo3
256
Daniel Stenbergb5cafc02004-08-09 12:36:17 +0000257 (More details: http://curl.haxx.se/mail/archive-2004-07/0133.html)
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000258
259 The example would do a POST-GET-POST combination on a single command line.
260
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000261 BUILD
262
263 * Consider extending 'roffit' to produce decent ASCII output, and use that
264 instead of (g)nroff when building src/hugehelp.c
Daniel Stenberg3de85772004-12-21 10:54:21 +0000265
Daniel Stenberge60e7412001-11-02 12:51:18 +0000266 TEST SUITE
267
Daniel Stenberg0e899d72006-12-19 14:28:01 +0000268 * Make our own version of stunnel for simple port forwarding to enable HTTPS
269 and FTP-SSL tests without the stunnel dependency, and it could allow us to
270 provide test tools built with either OpenSSL or GnuTLS
271
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000272 * Make the test servers able to serve multiple running test suites. Like if
273 two users run 'make test' at once.
274
Daniel Stenberg96b71312003-03-15 15:08:55 +0000275 * If perl wasn't found by the configure script, don't attempt to run the
276 tests but explain something nice why it doesn't.
277
Daniel Stenberge60e7412001-11-02 12:51:18 +0000278 * Extend the test suite to include more protocols. The telnet could just do
279 ftp or http operations (for which we have test servers).
280
281 * Make the test suite work on more platforms. OpenBSD and Mac OS. Remove
282 fork()s and it should become even more portable.
283
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000284 NEXT MAJOR RELEASE
Daniel Stenberg83a46382003-03-10 20:46:54 +0000285
286 * curl_easy_cleanup() returns void, but curl_multi_cleanup() returns a
287 CURLMcode. These should be changed to be the same.
288
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000289 * remove obsolete defines from curl/curl.h
290
Daniel Stenberg35840a22004-07-01 08:22:52 +0000291 * make several functions use size_t instead of int in their APIs
292
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000293 * remove the following functions from the public API:
294 curl_getenv
295 curl_mprintf (and variations)
296 curl_strequal
297 curl_strnequal
298
299 They will instead become curlx_ - alternatives. That makes the curl app
300 still capable of building with them from source.
Daniel Stenberga00e7f02004-10-25 11:28:40 +0000301
302 * Remove support for CURLOPT_FAILONERROR, it has gotten too kludgy and weird
303 internally. Let the app judge success or not for itself.