| Daniel Stenberg | 7c37c6a | 2000-05-22 17:35:35 +0000 | [diff] [blame] | 1 | _ _ ____ _ |
| 2 | ___| | | | _ \| | |
| 3 | / __| | | | |_) | | |
| 4 | | (__| |_| | _ <| |___ |
| 5 | \___|\___/|_| \_\_____| |
| 6 | |
| 7 | TODO |
| 8 | |
| Daniel Stenberg | 9d68fde | 2002-08-14 23:35:19 +0000 | [diff] [blame] | 9 | 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 Stenberg | 7c37c6a | 2000-05-22 17:35:35 +0000 | [diff] [blame] | 12 | |
| Daniel Stenberg | 3660f67 | 2003-08-11 16:17:51 +0000 | [diff] [blame] | 13 | All bugs documented in the KNOWN_BUGS document are subject for fixing! |
| 14 | |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 15 | LIBCURL |
| Daniel Stenberg | 6704d44 | 2001-08-22 11:22:43 +0000 | [diff] [blame] | 16 | |
| Daniel Stenberg | 9d68fde | 2002-08-14 23:35:19 +0000 | [diff] [blame] | 17 | * Introduce an interface to libcurl that allows applications to easier get to |
| 18 | know what cookies that are received. Pushing interface that calls a |
| 19 | callback on each received cookie? Querying interface that asks about |
| Daniel Stenberg | eb6a14f | 2003-01-07 07:54:14 +0000 | [diff] [blame] | 20 | existing cookies? We probably need both. Enable applications to modify |
| Daniel Stenberg | 1a393f5 | 2003-06-26 11:38:53 +0000 | [diff] [blame] | 21 | existing cookies as well. http://curl.haxx.se/dev/COOKIES |
| Daniel Stenberg | 2c39a43 | 2001-07-02 08:21:25 +0000 | [diff] [blame] | 22 | |
| Daniel Stenberg | 2d50391 | 2001-06-19 09:12:27 +0000 | [diff] [blame] | 23 | * Introduce another callback interface for upload/download that makes one |
| 24 | less copy of data and thus a faster operation. |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 25 | [http://curl.haxx.se/dev/no_copy_callbacks.txt] |
| 26 | |
| Daniel Stenberg | 3660f67 | 2003-08-11 16:17:51 +0000 | [diff] [blame] | 27 | * More data sharing. curl_share_* functions already exist and work, and they |
| 28 | can be extended to share more. |
| Daniel Stenberg | 01cfe67 | 2002-01-18 12:48:36 +0000 | [diff] [blame] | 29 | |
| Daniel Stenberg | 01cfe67 | 2002-01-18 12:48:36 +0000 | [diff] [blame] | 30 | * Set the SO_KEEPALIVE socket option to make libcurl notice and disconnect |
| 31 | very long time idle connections. |
| Daniel Stenberg | 558d12d | 2001-12-17 10:32:10 +0000 | [diff] [blame] | 32 | |
| Daniel Stenberg | c9c00d2 | 2002-01-22 13:10:16 +0000 | [diff] [blame] | 33 | * Go through the code and verify that libcurl deals with big files >2GB and |
| Daniel Stenberg | 3660f67 | 2003-08-11 16:17:51 +0000 | [diff] [blame] | 34 | >4GB all over. Bug reports (and source reviews) show that it doesn't |
| 35 | currently work. |
| Daniel Stenberg | c9c00d2 | 2002-01-22 13:10:16 +0000 | [diff] [blame] | 36 | |
| Daniel Stenberg | 87c4351 | 2002-08-26 22:32:46 +0000 | [diff] [blame] | 37 | LIBCURL - multi interface |
| 38 | |
| Daniel Stenberg | 3660f67 | 2003-08-11 16:17:51 +0000 | [diff] [blame] | 39 | * Add curl_multi_timeout() to make libcurl's ares-functionality better. |
| 40 | |
| Daniel Stenberg | 87c4351 | 2002-08-26 22:32:46 +0000 | [diff] [blame] | 41 | * Make sure we don't ever loop because of non-blocking sockets return |
| Daniel Stenberg | 065b87e | 2003-02-24 18:14:48 +0000 | [diff] [blame] | 42 | EWOULDBLOCK or similar. This FTP command sending, the SSL connection etc. |
| Daniel Stenberg | 87c4351 | 2002-08-26 22:32:46 +0000 | [diff] [blame] | 43 | |
| Daniel Stenberg | 065b87e | 2003-02-24 18:14:48 +0000 | [diff] [blame] | 44 | * Make transfers treated more carefully. We need a way to tell libcurl we |
| 45 | have data to write, as the current system expects us to upload data each |
| 46 | time the socket is writable and there is no way to say that we want to |
| 47 | upload data soon just not right now, without that aborting the upload. The |
| 48 | opposite situation should be possible as well, that we tell libcurl we're |
| 49 | ready to accept read data. Today libcurl feeds the data as soon as it is |
| 50 | available for reading, no matter what. |
| Daniel Stenberg | 87c4351 | 2002-08-26 22:32:46 +0000 | [diff] [blame] | 51 | |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 52 | DOCUMENTATION |
| 53 | |
| Daniel Stenberg | 87c4351 | 2002-08-26 22:32:46 +0000 | [diff] [blame] | 54 | * More and better |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 55 | |
| 56 | FTP |
| 57 | |
| Daniel Stenberg | 339f84f | 2003-07-30 13:41:59 +0000 | [diff] [blame] | 58 | * Support the most common FTP proxies, Philip Newton provided a list |
| 59 | allegedly from ncftp: |
| 60 | http://curl.haxx.se/mail/archive-2003-04/0126.html |
| 61 | |
| Daniel Stenberg | c0acaa5 | 2003-04-28 17:29:32 +0000 | [diff] [blame] | 62 | * Make CURLOPT_FTPPORT support an additional port number on the IP/if/name, |
| 63 | like "blabla:[port]" or possibly even "blabla:[portfirst]-[portsecond]". |
| 64 | |
| Daniel Stenberg | b756797 | 2003-05-26 08:19:06 +0000 | [diff] [blame] | 65 | * FTP ASCII transfers do not follow RFC959. They don't convert the data |
| 66 | accordingly. |
| Daniel Stenberg | 0058e87 | 2001-05-18 12:55:13 +0000 | [diff] [blame] | 67 | |
| Daniel Stenberg | eb6a14f | 2003-01-07 07:54:14 +0000 | [diff] [blame] | 68 | * Since USERPWD always override the user and password specified in URLs, we |
| 69 | might need another way to specify user+password for anonymous ftp logins. |
| 70 | |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 71 | HTTP |
| Daniel Stenberg | 2c39a43 | 2001-07-02 08:21:25 +0000 | [diff] [blame] | 72 | |
| Daniel Stenberg | d095b20 | 2003-10-17 12:37:15 +0000 | [diff] [blame] | 73 | * Digest and GSS-Negotiate support for HTTP proxies. They only work on |
| 74 | direct-connections to the server. |
| Daniel Stenberg | 01cfe67 | 2002-01-18 12:48:36 +0000 | [diff] [blame] | 75 | |
| 76 | * Pipelining. Sending multiple requests before the previous one(s) are done. |
| 77 | This could possibly be implemented using the multi interface to queue |
| 78 | requests and the response data. |
| Daniel Stenberg | 7c37c6a | 2000-05-22 17:35:35 +0000 | [diff] [blame] | 79 | |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 80 | TELNET |
| Daniel Stenberg | 7c37c6a | 2000-05-22 17:35:35 +0000 | [diff] [blame] | 81 | |
| Daniel Stenberg | 01cfe67 | 2002-01-18 12:48:36 +0000 | [diff] [blame] | 82 | * Reading input (to send to the remote server) on stdin is a crappy solution |
| 83 | for library purposes. We need to invent a good way for the application to |
| 84 | be able to provide the data to send. |
| 85 | |
| 86 | * Move the telnet support's network select() loop go away and merge the code |
| 87 | into the main transfer loop. Until this is done, the multi interface won't |
| 88 | work for telnet. |
| 89 | |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 90 | SSL |
| 91 | |
| Daniel Stenberg | 5cffe05 | 2002-02-07 10:43:43 +0000 | [diff] [blame] | 92 | * If you really want to improve the SSL situation, you should probably have a |
| 93 | look at SSL cafile loading as well - quick traces look to me like these are |
| 94 | done on every request as well, when they should only be necessary once per |
| 95 | ssl context (or once per handle). Even better would be to support the SSL |
| 96 | CAdir option - instead of loading all of the root CA certs for every |
| 97 | request, this option allows you to only read the CA chain that is actually |
| 98 | required (into the cache)... |
| 99 | |
| Daniel Stenberg | 60f1926 | 2001-11-13 09:56:29 +0000 | [diff] [blame] | 100 | * Add an interface to libcurl that enables "session IDs" to get |
| 101 | exported/imported. Cris Bailiff said: "OpenSSL has functions which can |
| 102 | serialise the current SSL state to a buffer of your choice, and |
| 103 | recover/reset the state from such a buffer at a later date - this is used |
| Daniel Stenberg | 01cfe67 | 2002-01-18 12:48:36 +0000 | [diff] [blame] | 104 | by mod_ssl for apache to implement and SSL session ID cache". This whole |
| 105 | idea might become moot if we enable the 'data sharing' as mentioned in the |
| 106 | LIBCURL label above. |
| Daniel Stenberg | 60f1926 | 2001-11-13 09:56:29 +0000 | [diff] [blame] | 107 | |
| Daniel Stenberg | 5c4b422 | 2002-02-18 10:51:28 +0000 | [diff] [blame] | 108 | * OpenSSL supports a callback for customised verification of the peer |
| 109 | certificate, but this doesn't seem to be exposed in the libcurl APIs. Could |
| 110 | it be? There's so much that could be done if it were! (brought by Chris |
| 111 | Clark) |
| 112 | |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 113 | * Make curl's SSL layer option capable of using other free SSL libraries. |
| 114 | Such as the Mozilla Security Services |
| 115 | (http://www.mozilla.org/projects/security/pki/nss/) and GNUTLS |
| 116 | (http://gnutls.hellug.gr/) |
| 117 | |
| Daniel Stenberg | 01cfe67 | 2002-01-18 12:48:36 +0000 | [diff] [blame] | 118 | LDAP |
| 119 | |
| 120 | * Look over the implementation. The looping will have to "go away" from the |
| 121 | lib/ldap.c source file and get moved to the main network code so that the |
| 122 | multi interface and friends will work for LDAP as well. |
| 123 | |
| Daniel Stenberg | 3e049a9 | 2001-11-13 09:06:32 +0000 | [diff] [blame] | 124 | CLIENT |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 125 | |
| Daniel Stenberg | 87c4351 | 2002-08-26 22:32:46 +0000 | [diff] [blame] | 126 | * Add an option that prevents cURL from overwiting existing local files. When |
| 127 | used, and there already is an existing file with the target file name |
| 128 | (either -O or -o), a number should be appended (and increased if already |
| 129 | existing). So that index.html becomes first index.html.1 and then |
| 130 | index.html.2 etc. Jeff Pohlmeyer suggested. |
| 131 | |
| Daniel Stenberg | 3e049a9 | 2001-11-13 09:06:32 +0000 | [diff] [blame] | 132 | * "curl ftp://site.com/*.txt" |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 133 | |
| Daniel Stenberg | d095b20 | 2003-10-17 12:37:15 +0000 | [diff] [blame] | 134 | * The client could be told to use maximum N simultaneous transfers and then |
| 135 | just make sure that happens. It should of course not make more than one |
| 136 | connection to the same remote host. This would require the client to use |
| 137 | the multi interface. |
| Daniel Stenberg | d12fd89 | 2001-12-06 14:40:16 +0000 | [diff] [blame] | 138 | |
| Daniel Stenberg | 5c4b422 | 2002-02-18 10:51:28 +0000 | [diff] [blame] | 139 | * Extending the capabilities of the multipart formposting. How about leaving |
| 140 | the ';type=foo' syntax as it is and adding an extra tag (headers) which |
| 141 | works like this: curl -F "coolfiles=@fil1.txt;headers=@fil1.hdr" where |
| 142 | fil1.hdr contains extra headers like |
| 143 | |
| 144 | Content-Type: text/plain; charset=KOI8-R" |
| 145 | Content-Transfer-Encoding: base64 |
| 146 | X-User-Comment: Please don't use browser specific HTML code |
| 147 | |
| 148 | which should overwrite the program reasonable defaults (plain/text, |
| 149 | 8bit...) (Idea brough to us by kromJx) |
| 150 | |
| Daniel Stenberg | 391a37e | 2003-12-08 13:48:23 +0000 | [diff] [blame^] | 151 | * --data-encode that URL encodes the data before posting |
| 152 | http://curl.haxx.se/mail/archive-2003-11/0091.html (Kevin Roth suggested) |
| 153 | |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 154 | TEST SUITE |
| 155 | |
| Daniel Stenberg | 96b7131 | 2003-03-15 15:08:55 +0000 | [diff] [blame] | 156 | * If perl wasn't found by the configure script, don't attempt to run the |
| 157 | tests but explain something nice why it doesn't. |
| 158 | |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 159 | * Extend the test suite to include more protocols. The telnet could just do |
| 160 | ftp or http operations (for which we have test servers). |
| 161 | |
| 162 | * Make the test suite work on more platforms. OpenBSD and Mac OS. Remove |
| 163 | fork()s and it should become even more portable. |
| 164 | |
| 165 | * Introduce a test suite that tests libcurl better and more explicitly. |
| Daniel Stenberg | 83a4638 | 2003-03-10 20:46:54 +0000 | [diff] [blame] | 166 | |
| 167 | NEXT MAJOR RELEASE |
| 168 | |
| 169 | * curl_easy_cleanup() returns void, but curl_multi_cleanup() returns a |
| 170 | CURLMcode. These should be changed to be the same. |
| 171 | |
| 172 | * curl_formparse() should be removed |