blob: aa843b3814ffb9a4983f42852d0988eac526d323 [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 Stenberg9d68fde2002-08-14 23:35:19 +000017 * Introduce an interface to libcurl that allows applications to easier get to
Daniel Stenbergd5be1142004-12-18 10:28:04 +000018 know what cookies that are received. CURLINFO_COOKIELIST to get a
19 curl_slist with cookies (netscape/mozilla cookie file formatted), and
20 CURLOPT_COOKIELIST to set a list of cookies (using the same format).
21 http://curl.haxx.se/mail/lib-2004-12/0195.html
Daniel Stenberg2c39a432001-07-02 08:21:25 +000022
Daniel Stenberg2d503912001-06-19 09:12:27 +000023 * Introduce another callback interface for upload/download that makes one
24 less copy of data and thus a faster operation.
Daniel Stenberge60e7412001-11-02 12:51:18 +000025 [http://curl.haxx.se/dev/no_copy_callbacks.txt]
26
Daniel Stenberg3660f672003-08-11 16:17:51 +000027 * More data sharing. curl_share_* functions already exist and work, and they
Daniel Stenberg097938e2004-03-01 09:08:52 +000028 can be extended to share more. For example, enable sharing of the ares
Daniel Stenberg5ad2a252005-04-11 13:50:19 +000029 channel and the connection cache.
Daniel Stenberg097938e2004-03-01 09:08:52 +000030
31 * Introduce a new error code indicating authentication problems (for proxy
32 CONNECT error 407 for example). This cannot be an error code, we must not
33 return informational stuff as errors, consider a new info returned by
34 curl_easy_getinfo() #845941
Daniel Stenberg01cfe672002-01-18 12:48:36 +000035
Daniel Stenberg0d2cdd92004-10-08 09:57:33 +000036 * Use 'struct lifreq' and SIOCGLIFADDR instead of 'struct ifreq' and
37 SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete.
Daniel Stenberg5ad2a252005-04-11 13:50:19 +000038 To support ipv6 interface addresses properly.
Daniel Stenberg0d2cdd92004-10-08 09:57:33 +000039
Daniel Stenberg9395cad2005-01-11 22:26:00 +000040 * Add the following to curl_easy_getinfo(): GET_HTTP_IP, GET_FTP_IP and
41 GET_FTP_DATA_IP. Return a string with the used IP. Suggested by Alan.
42
Daniel Stenberg87c43512002-08-26 22:32:46 +000043 LIBCURL - multi interface
44
Daniel Stenberg5ad2a252005-04-11 13:50:19 +000045 * Add a curl_multi_fdset() alternative. this allows apps to avoid the
46 FD_SETSIZE problem with select().
Daniel Stenberg3e1caa62004-11-24 16:11:35 +000047
Daniel Stenberg3660f672003-08-11 16:17:51 +000048 * Add curl_multi_timeout() to make libcurl's ares-functionality better.
49
Daniel Stenberg87c43512002-08-26 22:32:46 +000050 * Make sure we don't ever loop because of non-blocking sockets return
Daniel Stenberg065b87e2003-02-24 18:14:48 +000051 EWOULDBLOCK or similar. This FTP command sending, the SSL connection etc.
Daniel Stenberg87c43512002-08-26 22:32:46 +000052
Daniel Stenberg065b87e2003-02-24 18:14:48 +000053 * Make transfers treated more carefully. We need a way to tell libcurl we
54 have data to write, as the current system expects us to upload data each
55 time the socket is writable and there is no way to say that we want to
56 upload data soon just not right now, without that aborting the upload. The
57 opposite situation should be possible as well, that we tell libcurl we're
58 ready to accept read data. Today libcurl feeds the data as soon as it is
59 available for reading, no matter what.
Daniel Stenberg87c43512002-08-26 22:32:46 +000060
Daniel Stenberge60e7412001-11-02 12:51:18 +000061 DOCUMENTATION
62
Daniel Stenberg87c43512002-08-26 22:32:46 +000063 * More and better
Daniel Stenberge60e7412001-11-02 12:51:18 +000064
65 FTP
66
Daniel Stenberg3050ae52005-01-19 21:56:02 +000067 * Make the detection of (bad) %0d and %0a codes in FTP url parts earlier in
68 the process to avoid doing a resolve and connect in vain.
69
Daniel Stenberg338c2da2004-08-09 12:39:28 +000070 * Support GSS/Kerberos 5 for ftp file transfer. This will allow user
71 authentication and file encryption. Possible libraries and example clients
72 are available from MIT or Heimdal. Requsted by Markus Moeller.
73
Daniel Stenberg3b491d02004-04-06 15:29:01 +000074 * REST fix for servers not behaving well on >2GB requests. This should fail
75 if the server doesn't set the pointer to the requested index. The tricky
Daniel Stenberg16e9a9e2004-11-28 13:04:34 +000076 (impossible?) part is to figure out if the server did the right thing or
77 not.
Daniel Stenberg3b491d02004-04-06 15:29:01 +000078
Daniel Stenberg339f84f2003-07-30 13:41:59 +000079 * Support the most common FTP proxies, Philip Newton provided a list
80 allegedly from ncftp:
81 http://curl.haxx.se/mail/archive-2003-04/0126.html
82
Daniel Stenbergc0acaa52003-04-28 17:29:32 +000083 * Make CURLOPT_FTPPORT support an additional port number on the IP/if/name,
84 like "blabla:[port]" or possibly even "blabla:[portfirst]-[portsecond]".
85
Daniel Stenbergb7567972003-05-26 08:19:06 +000086 * FTP ASCII transfers do not follow RFC959. They don't convert the data
87 accordingly.
Daniel Stenberg0058e872001-05-18 12:55:13 +000088
Daniel Stenbergeb6a14f2003-01-07 07:54:14 +000089 * Since USERPWD always override the user and password specified in URLs, we
90 might need another way to specify user+password for anonymous ftp logins.
91
Daniel Stenberg73323502004-05-05 06:11:57 +000092 * The FTP code should get a way of returning errors that is known to still
93 have the control connection alive and sound. Currently, a returned error
94 from within ftp-functions does not tell if the control connection is still
95 OK to use or not. This causes libcurl to fail to re-use connections
96 slightly too often.
97
Daniel Stenberge60e7412001-11-02 12:51:18 +000098 HTTP
Daniel Stenberg2c39a432001-07-02 08:21:25 +000099
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000100 * Pipelining. Sending multiple requests before the previous one(s) are done.
101 This could possibly be implemented using the multi interface to queue
102 requests and the response data.
Daniel Stenberg7c37c6a2000-05-22 17:35:35 +0000103
Daniel Stenberg29108802004-12-22 09:19:29 +0000104 * When doing CONNECT to a HTTP proxy, libcurl always uses HTTP/1.0. This has
105 never been reported as causing trouble to anyone, but should be considered
106 to use the HTTP version the user has chosen.
107
Daniel Stenberge60e7412001-11-02 12:51:18 +0000108 TELNET
Daniel Stenberg7c37c6a2000-05-22 17:35:35 +0000109
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000110 * Reading input (to send to the remote server) on stdin is a crappy solution
111 for library purposes. We need to invent a good way for the application to
112 be able to provide the data to send.
113
114 * Move the telnet support's network select() loop go away and merge the code
115 into the main transfer loop. Until this is done, the multi interface won't
116 work for telnet.
117
Daniel Stenberge60e7412001-11-02 12:51:18 +0000118 SSL
119
Daniel Stenberg3b491d02004-04-06 15:29:01 +0000120 * Anton Fedorov's "dumpcert" patch:
121 http://curl.haxx.se/mail/lib-2004-03/0088.html
122
123 * Evaluate/apply Gertjan van Wingerde's SSL patches:
124 http://curl.haxx.se/mail/lib-2004-03/0087.html
125
Daniel Stenberg9432bfe2004-08-27 07:17:52 +0000126 * "Look at SSL cafile - quick traces look to me like these are done on every
127 request as well, when they should only be necessary once per ssl context
128 (or once per handle)". The major improvement we can rather easily do is to
129 make sure we don't create and kill a new SSL "context" for every request,
130 but instead make one for every connection and re-use that SSL context in
131 the same style connections are re-used. It will make us use slightly more
132 memory but it will libcurl do less creations and deletions of SSL contexts.
Daniel Stenberg5cffe052002-02-07 10:43:43 +0000133
Daniel Stenberg60f19262001-11-13 09:56:29 +0000134 * Add an interface to libcurl that enables "session IDs" to get
135 exported/imported. Cris Bailiff said: "OpenSSL has functions which can
136 serialise the current SSL state to a buffer of your choice, and
137 recover/reset the state from such a buffer at a later date - this is used
Daniel Stenberg9432bfe2004-08-27 07:17:52 +0000138 by mod_ssl for apache to implement and SSL session ID cache".
Daniel Stenberg60f19262001-11-13 09:56:29 +0000139
Daniel Stenberg5c4b4222002-02-18 10:51:28 +0000140 * OpenSSL supports a callback for customised verification of the peer
141 certificate, but this doesn't seem to be exposed in the libcurl APIs. Could
142 it be? There's so much that could be done if it were! (brought by Chris
143 Clark)
144
Daniel Stenberg5ad2a252005-04-11 13:50:19 +0000145 * Make curl's SSL layer capable of using other free SSL libraries. Such as
146 the Mozilla Security Services:
147 http://www.mozilla.org/projects/security/pki/nss/
Daniel Stenberge60e7412001-11-02 12:51:18 +0000148
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000149 LDAP
150
151 * Look over the implementation. The looping will have to "go away" from the
152 lib/ldap.c source file and get moved to the main network code so that the
153 multi interface and friends will work for LDAP as well.
154
Daniel Stenberg29108802004-12-22 09:19:29 +0000155 NEW PROTOCOLS
156
157 * TFTP - RFC1350 (protocol) and RFC3617 (URI format)
158
159 Dan Fandrich: I wrote a tftp protocol module as part of the I-Boot
160 bootloader under a BSD-style license with attribution clause
161 http://download.intrinsyc.com/supported/tools/i-boot-lite/i-boot-lite-1.8/src/libs/net/tftp.c
162
163 * RTSP - RFC2326 (protocol - very HTTP-like, also contains URL description)
164
165 * SFTP/SCP/SSH (no RFCs for protocol nor URI/URL format). An implementation
166 should most probably use an existing ssh library, such as OpenSSH.
167
168 * RSYNC (no RFCs for protocol nor URI/URL format). An implementation should
Daniel Stenbergdbb69792004-12-22 09:21:04 +0000169 most probably use an existing rsync library, such as librsync.
Daniel Stenberg29108802004-12-22 09:19:29 +0000170
Daniel Stenberg3e049a92001-11-13 09:06:32 +0000171 CLIENT
Daniel Stenberge60e7412001-11-02 12:51:18 +0000172
Daniel Stenberg33929112004-09-09 06:58:01 +0000173 * "curl --sync http://example.com/feed[1-100].rss" or
174 "curl --sync http://example.net/{index,calendar,history}.html"
175
176 Downloads a range or set of URLs using the remote name, but only if the
177 remote file is newer than the local file. A Last-Modified HTTP date header
178 should also be used to set the mod date on the downloaded file.
179 (idea from "Brianiac")
180
Daniel Stenberg84ec4062004-08-13 12:06:30 +0000181 * Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'.
Daniel Stenberg9432bfe2004-08-27 07:17:52 +0000182 Requested by Dane Jensen and others. This is easily scripted though.
Daniel Stenberg84ec4062004-08-13 12:06:30 +0000183
Daniel Stenberg87c43512002-08-26 22:32:46 +0000184 * Add an option that prevents cURL from overwiting existing local files. When
185 used, and there already is an existing file with the target file name
186 (either -O or -o), a number should be appended (and increased if already
187 existing). So that index.html becomes first index.html.1 and then
188 index.html.2 etc. Jeff Pohlmeyer suggested.
189
Daniel Stenberg3e049a92001-11-13 09:06:32 +0000190 * "curl ftp://site.com/*.txt"
Daniel Stenberge60e7412001-11-02 12:51:18 +0000191
Daniel Stenbergd095b202003-10-17 12:37:15 +0000192 * The client could be told to use maximum N simultaneous transfers and then
193 just make sure that happens. It should of course not make more than one
194 connection to the same remote host. This would require the client to use
195 the multi interface.
Daniel Stenbergd12fd892001-12-06 14:40:16 +0000196
Daniel Stenberg5c4b4222002-02-18 10:51:28 +0000197 * Extending the capabilities of the multipart formposting. How about leaving
198 the ';type=foo' syntax as it is and adding an extra tag (headers) which
199 works like this: curl -F "coolfiles=@fil1.txt;headers=@fil1.hdr" where
200 fil1.hdr contains extra headers like
201
202 Content-Type: text/plain; charset=KOI8-R"
203 Content-Transfer-Encoding: base64
204 X-User-Comment: Please don't use browser specific HTML code
205
206 which should overwrite the program reasonable defaults (plain/text,
207 8bit...) (Idea brough to us by kromJx)
208
Daniel Stenberg4c3a2312004-01-09 08:59:55 +0000209 * ability to specify the classic computing suffixes on the range
210 specifications. For example, to download the first 500 Kilobytes of a file,
211 be able to specify the following for the -r option: "-r 0-500K" or for the
212 first 2 Megabytes of a file: "-r 0-2M". (Mark Smith suggested)
213
Daniel Stenberg391a37e2003-12-08 13:48:23 +0000214 * --data-encode that URL encodes the data before posting
215 http://curl.haxx.se/mail/archive-2003-11/0091.html (Kevin Roth suggested)
216
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000217 * Provide a way to make options bound to a specific URL among several on the
Daniel Stenbergb5cafc02004-08-09 12:36:17 +0000218 command line. Possibly by letting ':' separate options between URLs,
219 similar to this:
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000220
Daniel Stenberg9432bfe2004-08-27 07:17:52 +0000221 curl --data foo --url url.com : \
Daniel Stenbergb5cafc02004-08-09 12:36:17 +0000222 --url url2.com : \
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000223 --url url3.com --data foo3
224
Daniel Stenbergb5cafc02004-08-09 12:36:17 +0000225 (More details: http://curl.haxx.se/mail/archive-2004-07/0133.html)
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000226
227 The example would do a POST-GET-POST combination on a single command line.
228
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000229 BUILD
230
231 * Consider extending 'roffit' to produce decent ASCII output, and use that
232 instead of (g)nroff when building src/hugehelp.c
Daniel Stenberg3de85772004-12-21 10:54:21 +0000233
Daniel Stenberge60e7412001-11-02 12:51:18 +0000234 TEST SUITE
235
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000236 * Make the test servers able to serve multiple running test suites. Like if
237 two users run 'make test' at once.
238
Daniel Stenberg96b71312003-03-15 15:08:55 +0000239 * If perl wasn't found by the configure script, don't attempt to run the
240 tests but explain something nice why it doesn't.
241
Daniel Stenberge60e7412001-11-02 12:51:18 +0000242 * Extend the test suite to include more protocols. The telnet could just do
243 ftp or http operations (for which we have test servers).
244
245 * Make the test suite work on more platforms. OpenBSD and Mac OS. Remove
246 fork()s and it should become even more portable.
247
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000248 NEXT MAJOR RELEASE
Daniel Stenberg83a46382003-03-10 20:46:54 +0000249
250 * curl_easy_cleanup() returns void, but curl_multi_cleanup() returns a
251 CURLMcode. These should be changed to be the same.
252
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000253 * remove obsolete defines from curl/curl.h
254
Daniel Stenberg35840a22004-07-01 08:22:52 +0000255 * make several functions use size_t instead of int in their APIs
256
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000257 * remove the following functions from the public API:
258 curl_getenv
259 curl_mprintf (and variations)
260 curl_strequal
261 curl_strnequal
262
263 They will instead become curlx_ - alternatives. That makes the curl app
264 still capable of building with them from source.
Daniel Stenberga00e7f02004-10-25 11:28:40 +0000265
266 * Remove support for CURLOPT_FAILONERROR, it has gotten too kludgy and weird
267 internally. Let the app judge success or not for itself.