Imported Upstream version 7.44.0
[platform/upstream/curl.git] / docs / TODO
1                                   _   _ ____  _
2                               ___| | | |  _ \| |
3                              / __| | | | |_) | |
4                             | (__| |_| |  _ <| |___
5                              \___|\___/|_| \_\_____|
6
7                 Things that could be nice to do in the future
8
9  Things to do in project cURL. Please tell us what you think, contribute and
10  send us patches that improve things!
11
12  Be aware that these are things that we could do, or have once been considered
13  things we could do. If you want to work on any of these areas, please
14  consider bringing it up for discussions first on the mailing list so that we
15  all agree it is still a good idea for the project!
16
17  All bugs documented in the KNOWN_BUGS document are subject for fixing!
18
19  1. libcurl
20  1.2 More data sharing
21  1.3 struct lifreq
22  1.4 signal-based resolver timeouts
23  1.5 get rid of PATH_MAX
24  1.6 Modified buffer size approach
25  1.7 Detect when called from within callbacks
26  1.8 Allow SSL (HTTPS) to proxy
27  1.9 Cache negative name resolves
28  1.10 Support IDNA2008
29  1.11 minimize dependencies with dynamicly loaded modules
30
31  2. libcurl - multi interface
32  2.1 More non-blocking
33  2.2 Fix HTTP Pipelining for PUT
34  2.3 Better support for same name resolves
35
36  3. Documentation
37  3.1 Update date and version in man pages
38
39  4. FTP
40  4.1 HOST
41  4.2 Alter passive/active on failure and retry
42  4.3 Earlier bad letter detection
43  4.4 REST for large files
44  4.5 ASCII support
45  4.6 GSSAPI via Windows SSPI
46  4.7 STAT for LIST without data connection
47
48  5. HTTP
49  5.1 Better persistency for HTTP 1.0
50  5.2 support FF3 sqlite cookie files
51  5.3 Rearrange request header order
52  5.4 SPDY
53  5.5 auth= in URLs
54  5.6 Refuse "downgrade" redirects
55
56  6. TELNET
57  6.1 ditch stdin
58  6.2 ditch telnet-specific select
59  6.3 feature negotiation debug data
60  6.4 send data in chunks
61
62  7. SMTP
63  7.1 Pipelining
64  7.2 Enhanced capability support
65  
66  8. POP3
67  8.1 Pipelining
68  8.2 Enhanced capability support
69  
70  9. IMAP
71  9.1 Enhanced capability support
72  
73  10. LDAP
74  10.1 SASL based authentication mechanisms
75  
76  11. SMB
77  11.1 File listing support
78  11.2 Honor file timestamps
79  11.3 Use NTLMv2
80  
81  12. New protocols
82  12.1 RSYNC
83
84  13. SSL
85  13.1 Disable specific versions
86  13.2 Provide mutex locking API
87  13.3 Evaluate SSL patches
88  13.4 Cache OpenSSL contexts
89  13.5 Export session ids
90  13.6 Provide callback for cert verification
91  13.7 improve configure --with-ssl
92  13.8 Support DANE
93
94  14. GnuTLS
95  14.1 SSL engine stuff
96  14.2 check connection
97
98  15. WinSSL/SChannel
99  15.1 Add support for client certificate authentication
100  15.2 Add support for custom server certificate validation
101  15.3 Add support for the --ciphers option
102
103  16. SASL
104  16.1 Other authentication mechanisms
105  16.2 Add QOP support to GSSAPI authentication
106  
107  17. Client
108  17.1 sync
109  17.2 glob posts
110  17.3 prevent file overwriting
111  17.4 simultaneous parallel transfers
112  17.5 provide formpost headers
113  17.6 warning when setting an option
114  17.7 warning when sending binary output to terminal
115  17.8 offer color-coded HTTP header output
116  17.9 Choose the name of file in braces for complex URLs
117  17.10 improve how curl works in a windows console window
118
119  18. Build
120  18.1 roffit
121
122  19. Test suite
123  19.1 SSL tunnel
124  19.2 nicer lacking perl message
125  19.3 more protocols supported
126  19.4 more platforms supported
127  19.5 Add support for concurrent connections
128
129  20. Next SONAME bump
130  20.1 http-style HEAD output for FTP
131  20.2 combine error codes
132  20.3 extend CURLOPT_SOCKOPTFUNCTION prototype
133
134  21. Next major release
135  21.1 cleanup return codes
136  21.2 remove obsolete defines
137  21.3 size_t
138  21.4 remove several functions
139  21.5 remove CURLOPT_FAILONERROR
140  21.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE
141  21.7 remove progress meter from libcurl
142  21.8 remove 'curl_httppost' from public
143  21.9 have form functions use CURL handle argument
144  21.10 Add CURLOPT_MAIL_CLIENT option
145
146 ==============================================================================
147
148 1. libcurl
149
150 1.2 More data sharing
151
152  curl_share_* functions already exist and work, and they can be extended to
153  share more. For example, enable sharing of the ares channel and the
154  connection cache.
155
156 1.3 struct lifreq
157
158  Use 'struct lifreq' and SIOCGLIFADDR instead of 'struct ifreq' and
159  SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete.
160  To support IPv6 interface addresses for network interfaces properly.
161
162 1.4 signal-based resolver timeouts
163
164  libcurl built without an asynchronous resolver library uses alarm() to time
165  out DNS lookups. When a timeout occurs, this causes libcurl to jump from the
166  signal handler back into the library with a sigsetjmp, which effectively
167  causes libcurl to continue running within the signal handler. This is
168  non-portable and could cause problems on some platforms. A discussion on the
169  problem is available at http://curl.haxx.se/mail/lib-2008-09/0197.html
170
171  Also, alarm() provides timeout resolution only to the nearest second. alarm
172  ought to be replaced by setitimer on systems that support it.
173
174 1.5 get rid of PATH_MAX
175
176  Having code use and rely on PATH_MAX is not nice:
177  http://insanecoding.blogspot.com/2007/11/pathmax-simply-isnt.html
178
179  Currently the SSH based code uses it a bit, but to remove PATH_MAX from there
180  we need libssh2 to properly tell us when we pass in a too small buffer and
181  its current API (as of libssh2 1.2.7) doesn't.
182
183 1.6 Modified buffer size approach
184
185  Current libcurl allocates a fixed 16K size buffer for download and an
186  additional 16K for upload. They are always unconditionally part of the easy
187  handle. If CRLF translations are requested, an additional 32K "scratch
188  buffer" is allocated. A total of 64K transfer buffers in the worst case.
189
190  First, while the handles are not actually in use these buffers could be freed
191  so that lingering handles just kept in queues or whatever waste less memory.
192
193  Secondly, SFTP is a protocol that needs to handle many ~30K blocks at once
194  since each need to be individually acked and therefore libssh2 must be
195  allowed to send (or receive) many separate ones in parallel to achieve high
196  transfer speeds. A current libcurl build with a 16K buffer makes that
197  impossible, but one with a 512K buffer will reach MUCH faster transfers. But
198  allocating 512K unconditionally for all buffers just in case they would like
199  to do fast SFTP transfers at some point is not a good solution either.
200
201  Dynamically allocate buffer size depending on protocol in use in combination
202  with freeing it after each individual transfer? Other suggestions?
203
204 1.7 Detect when called from within callbacks
205
206  We should set a state variable before calling callbacks, so that we
207  subsequently can add code within libcurl that returns error if called within
208  callbacks for when that's not supported.
209
210 1.8 Allow SSL (HTTPS) to proxy
211
212  To prevent local users from snooping on your traffic to the proxy. Supported
213  by Chrome already:
214  https://www.chromium.org/developers/design-documents/secure-web-proxy
215
216  ...and by Firefox soon:
217  https://bugzilla.mozilla.org/show_bug.cgi?id=378637
218
219 1.9 Cache negative name resolves
220
221  A name resolve that has failed is likely to fail when made again within a
222  short period of time. Currently we only cache positive responses.
223
224 1.10 Support IDNA2008
225
226  International Domain Names are supported in libcurl since years back, powered
227  by libidn. libidn implements IDNA2003 which has been superseded by IDNA2008.
228  libidn2 is an existing library offering support for IDNA2008.
229
230 1.11 minimize dependencies with dynamicly loaded modules
231
232  We can create a system with loadable modules/plug-ins, where these modules
233  would be the ones that link to 3rd party libs. That would allow us to avoid
234  having to load ALL dependencies since only the necessary ones for this
235  app/invoke/used protocols would be necessary to load.  See
236  https://github.com/bagder/curl/issues/349
237
238 2. libcurl - multi interface
239
240 2.1 More non-blocking
241
242  Make sure we don't ever loop because of non-blocking sockets returning
243  EWOULDBLOCK or similar. Blocking cases include:
244
245  - Name resolves on non-windows unless c-ares is used
246  - NSS SSL connections
247  - HTTP proxy CONNECT operations
248  - SOCKS proxy handshakes
249  - file:// transfers
250  - TELNET transfers
251  - The "DONE" operation (post transfer protocol-specific actions) for the
252    protocols SFTP, SMTP, FTP. Fixing Curl_done() for this is a worthy task.
253
254 2.2 Fix HTTP Pipelining for PUT
255
256  HTTP Pipelining can be a way to greatly enhance performance for multiple
257  serial requests and currently libcurl only supports that for HEAD and GET
258  requests but it should also be possible for PUT.
259
260 2.3 Better support for same name resolves
261
262  If a name resolve has been initiated for name NN and a second easy handle
263  wants to resolve that name as well, make it wait for the first resolve to end
264  up in the cache instead of doing a second separate resolve. This is
265  especially needed when adding many simultaneous handles using the same host
266  name when the DNS resolver can get flooded.
267
268
269 3. Documentation
270
271 3.1 Update date and version in man pages
272
273  'maketgz' or another suitable script could update the .TH sections of the man
274  pages at release time to use the current date and curl/libcurl version
275  number.
276
277 4. FTP
278
279 4.1 HOST
280
281  HOST is a command for a client to tell which host name to use, to offer FTP
282  servers named-based virtual hosting:
283
284  https://tools.ietf.org/html/rfc7151
285
286 4.2 Alter passive/active on failure and retry
287
288  When trying to connect passively to a server which only supports active
289  connections, libcurl returns CURLE_FTP_WEIRD_PASV_REPLY and closes the
290  connection. There could be a way to fallback to an active connection (and
291  vice versa). http://curl.haxx.se/bug/feature.cgi?id=1754793
292
293 4.3 Earlier bad letter detection
294
295  Make the detection of (bad) %0d and %0a codes in FTP URL parts earlier in the
296  process to avoid doing a resolve and connect in vain.
297
298 4.4 REST for large files
299
300  REST fix for servers not behaving well on >2GB requests. This should fail if
301  the server doesn't set the pointer to the requested index. The tricky
302  (impossible?) part is to figure out if the server did the right thing or not.
303
304 4.5 ASCII support
305
306  FTP ASCII transfers do not follow RFC959. They don't convert the data
307  accordingly.
308
309 4.6 GSSAPI via Windows SSPI
310
311 In addition to currently supporting the SASL GSSAPI mechanism (Kerberos V5)
312 via third-party GSS-API libraries, such as Heimdal or MIT Kerberos, also add
313 support for GSSAPI authentication via Windows SSPI.
314
315 4.7 STAT for LIST without data connection
316
317 Some FTP servers allow STAT for listing directories instead of using LIST, and
318 the response is then sent over the control connection instead of as the
319 otherwise usedw data connection: http://www.nsftools.com/tips/RawFTP.htm#STAT
320
321 This is not detailed in any FTP specification.
322
323 5. HTTP
324
325 5.1 Better persistency for HTTP 1.0
326
327  "Better" support for persistent connections over HTTP 1.0
328  http://curl.haxx.se/bug/feature.cgi?id=1089001
329
330 5.2 support FF3 sqlite cookie files
331
332  Firefox 3 is changing from its former format to a a sqlite database instead.
333  We should consider how (lib)curl can/should support this.
334  http://curl.haxx.se/bug/feature.cgi?id=1871388
335
336 5.3 Rearrange request header order
337
338  Server implementors often make an effort to detect browser and to reject
339  clients it can detect to not match. One of the last details we cannot yet
340  control in libcurl's HTTP requests, which also can be exploited to detect
341  that libcurl is in fact used even when it tries to impersonate a browser, is
342  the order of the request headers. I propose that we introduce a new option in
343  which you give headers a value, and then when the HTTP request is built it
344  sorts the headers based on that number. We could then have internally created
345  headers use a default value so only headers that need to be moved have to be
346  specified.
347
348 5.4 SPDY
349
350  Chrome and Firefox already support SPDY and lots of web services do. There's
351  a library for us to use for this (spdylay) that has a similar API and the
352  same author as nghttp2.
353
354  spdylay: https://github.com/tatsuhiro-t/spdylay
355
356 5.5 auth= in URLs
357
358  Add the ability to specify the preferred authentication mechanism to use by
359  using ;auth=<mech> in the login part of the URL.
360
361  For example:
362
363  http://test:pass;auth=NTLM@example.com would be equivalent to specifying --user
364  test:pass;auth=NTLM or --user test:pass --ntlm from the command line. 
365
366  Additionally this should be implemented for proxy base URLs as well.
367
368 5.6 Refuse "downgrade" redirects
369
370  See https://github.com/bagder/curl/issues/226
371
372  Consider a way to tell curl to refuse to "downgrade" protocol with a redirect
373  and/or possibly a bit that refuses redirect to change protocol completely.
374
375
376 6. TELNET
377
378 6.1 ditch stdin
379
380 Reading input (to send to the remote server) on stdin is a crappy solution for
381 library purposes. We need to invent a good way for the application to be able
382 to provide the data to send.
383
384 6.2 ditch telnet-specific select
385
386  Move the telnet support's network select() loop go away and merge the code
387  into the main transfer loop. Until this is done, the multi interface won't
388  work for telnet.
389
390 6.3 feature negotiation debug data
391
392   Add telnet feature negotiation data to the debug callback as header data.
393
394 6.4 send data in chunks
395
396   Currently, telnet sends data one byte at a time.  This is fine for interactive
397   use, but inefficient for any other.  Sent data should be sent in larger
398   chunks.
399
400 7. SMTP
401
402 7.1 Pipelining
403
404  Add support for pipelining emails.
405
406 7.2 Enhanced capability support
407
408  Add the ability, for an application that uses libcurl, to obtain the list of
409  capabilities returned from the EHLO command.
410
411 8. POP3
412
413 8.1 Pipelining
414
415  Add support for pipelining commands.
416
417 8.2 Enhanced capability support
418
419  Add the ability, for an application that uses libcurl, to obtain the list of
420  capabilities returned from the CAPA command.
421
422 9. IMAP
423
424 9.1 Enhanced capability support
425
426  Add the ability, for an application that uses libcurl, to obtain the list of
427  capabilities returned from the CAPABILITY command.
428
429 10. LDAP
430
431 10.1 SASL based authentication mechanisms
432
433  Currently the LDAP module only supports ldap_simple_bind_s() in order to bind
434  to an LDAP server. However, this function sends username and password details
435  using the simple authentication mechanism (as clear text). However, it should
436  be possible to use ldap_bind_s() instead specifying the security context
437  information ourselves.
438
439 11. SMB
440
441 11.1 File listing support
442
443 Add support for listing the contents of a SMB share. The output should probably
444 be the same as/similar to FTP.
445
446 11.2 Honor file timestamps
447
448 The timestamp of the transferred file should reflect that of the original file.
449
450 11.3 Use NTLMv2
451
452 Currently the SMB authentication uses NTLMv1.
453
454 12. New protocols
455
456 12.1 RSYNC
457
458  There's no RFC for the protocol or an URI/URL format.  An implementation
459  should most probably use an existing rsync library, such as librsync.
460
461 13. SSL
462
463 13.1 Disable specific versions
464
465  Provide an option that allows for disabling specific SSL versions, such as
466  SSLv2 http://curl.haxx.se/bug/feature.cgi?id=1767276
467
468 13.2 Provide mutex locking API
469
470  Provide a libcurl API for setting mutex callbacks in the underlying SSL
471  library, so that the same application code can use mutex-locking
472  independently of OpenSSL or GnutTLS being used.
473
474 13.3 Evaluate SSL patches
475
476  Evaluate/apply Gertjan van Wingerde's SSL patches:
477  http://curl.haxx.se/mail/lib-2004-03/0087.html
478
479 13.4 Cache OpenSSL contexts
480
481  "Look at SSL cafile - quick traces look to me like these are done on every
482  request as well, when they should only be necessary once per SSL context (or
483  once per handle)". The major improvement we can rather easily do is to make
484  sure we don't create and kill a new SSL "context" for every request, but
485  instead make one for every connection and re-use that SSL context in the same
486  style connections are re-used. It will make us use slightly more memory but
487  it will libcurl do less creations and deletions of SSL contexts.
488
489 13.5 Export session ids
490
491  Add an interface to libcurl that enables "session IDs" to get
492  exported/imported. Cris Bailiff said: "OpenSSL has functions which can
493  serialise the current SSL state to a buffer of your choice, and recover/reset
494  the state from such a buffer at a later date - this is used by mod_ssl for
495  apache to implement and SSL session ID cache".
496
497 13.6 Provide callback for cert verification
498
499  OpenSSL supports a callback for customised verification of the peer
500  certificate, but this doesn't seem to be exposed in the libcurl APIs. Could
501  it be? There's so much that could be done if it were!
502
503 13.7 improve configure --with-ssl
504
505  make the configure --with-ssl option first check for OpenSSL, then GnuTLS,
506  then NSS...
507
508 13.8 Support DANE
509
510  DNS-Based Authentication of Named Entities (DANE) is a way to provide SSL
511  keys and certs over DNS using DNSSEC as an alternative to the CA model.
512  https://www.rfc-editor.org/rfc/rfc6698.txt
513
514  An initial patch was posted by Suresh Krishnaswamy on March 7th 2013
515  (http://curl.haxx.se/mail/lib-2013-03/0075.html) but it was a too simple
516  approach. See Daniel's comments:
517  http://curl.haxx.se/mail/lib-2013-03/0103.html . libunbound may be the
518  correct library to base this development on.
519
520 14. GnuTLS
521
522 14.1 SSL engine stuff
523
524  Is this even possible?
525
526 14.2 check connection
527
528  Add a way to check if the connection seems to be alive, to correspond to the
529  SSL_peak() way we use with OpenSSL.
530
531 15. WinSSL/SChannel
532
533 15.1 Add support for client certificate authentication
534
535  WinSSL/SChannel currently makes use of the OS-level system and user
536  certificate and private key stores. This does not allow the application
537  or the user to supply a custom client certificate using curl or libcurl.
538
539  Therefore support for the existing -E/--cert and --key options should be
540  implemented by supplying a custom certificate to the SChannel APIs, see:
541  - Getting a Certificate for Schannel
542    https://msdn.microsoft.com/en-us/library/windows/desktop/aa375447.aspx
543
544 15.2 Add support for custom server certificate validation
545
546  WinSSL/SChannel currently makes use of the OS-level system and user
547  certificate trust store. This does not allow the application or user to
548  customize the server certificate validation process using curl or libcurl.
549
550  Therefore support for the existing --cacert or --capath options should be
551  implemented by supplying a custom certificate to the SChannel APIs, see:
552  - Getting a Certificate for Schannel
553    https://msdn.microsoft.com/en-us/library/windows/desktop/aa375447.aspx
554
555 15.3 Add support for the --ciphers option
556
557  The cipher suites used by WinSSL/SChannel are configured on an OS-level
558  instead of an application-level. This does not allow the application or
559  the user to customize the configured cipher suites using curl or libcurl.
560
561  Therefore support for the existing --ciphers option should be implemented
562  by mapping the OpenSSL/GnuTLS cipher suites to the SChannel APIs, see
563  - Specifying Schannel Ciphers and Cipher Strengths
564    https://msdn.microsoft.com/en-us/library/windows/desktop/aa380161.aspx
565
566 16. SASL
567
568 16.1 Other authentication mechanisms
569
570  Add support for other authentication mechanisms such as OLP,
571  GSS-SPNEGO and others.
572  
573 16.2 Add QOP support to GSSAPI authentication
574
575  Currently the GSSAPI authentication only supports the default QOP of auth
576  (Authentication), whilst Kerberos V5 supports both auth-int (Authentication
577  with integrity protection) and auth-conf (Authentication with integrity and
578  privacy protection).
579
580 17. Client
581
582 17.1 sync
583
584  "curl --sync http://example.com/feed[1-100].rss" or
585  "curl --sync http://example.net/{index,calendar,history}.html"
586
587  Downloads a range or set of URLs using the remote name, but only if the
588  remote file is newer than the local file. A Last-Modified HTTP date header
589  should also be used to set the mod date on the downloaded file.
590
591 17.2 glob posts
592
593  Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'.
594  This is easily scripted though.
595
596 17.3 prevent file overwriting
597
598  Add an option that prevents cURL from overwriting existing local files. When
599  used, and there already is an existing file with the target file name
600  (either -O or -o), a number should be appended (and increased if already
601  existing). So that index.html becomes first index.html.1 and then
602  index.html.2 etc.
603
604 17.4 simultaneous parallel transfers
605
606  The client could be told to use maximum N simultaneous parallel transfers and
607  then just make sure that happens. It should of course not make more than one
608  connection to the same remote host. This would require the client to use the
609  multi interface. http://curl.haxx.se/bug/feature.cgi?id=1558595
610
611 17.5 provide formpost headers
612
613  Extending the capabilities of the multipart formposting. How about leaving
614  the ';type=foo' syntax as it is and adding an extra tag (headers) which
615  works like this: curl -F "coolfiles=@fil1.txt;headers=@fil1.hdr" where
616  fil1.hdr contains extra headers like
617
618    Content-Type: text/plain; charset=KOI8-R"
619    Content-Transfer-Encoding: base64
620    X-User-Comment: Please don't use browser specific HTML code
621
622  which should overwrite the program reasonable defaults (plain/text,
623  8bit...)
624
625 17.6 warning when setting an option
626
627  Display a warning when libcurl returns an error when setting an option.
628  This can be useful to tell when support for a particular feature hasn't been
629  compiled into the library.
630
631 17.7 warning when sending binary output to terminal
632
633  Provide a way that prompts the user for confirmation before binary data is
634  sent to the terminal, much in the style 'less' does it.
635
636 17.8 offer color-coded HTTP header output
637
638  By offering different color output on the header name and the header
639  contents, they could be made more readable and thus help users working on
640  HTTP services.
641
642 17.9 Choose the name of file in braces for complex URLs
643
644  When using braces to download a list of URLs and you use complicated names
645  in the list of alternatives, it could be handy to allow curl to use other
646  names when saving.
647
648  Consider a way to offer that. Possibly like
649  {partURL1:name1,partURL2:name2,partURL3:name3} where the name following the
650  colon is the output name.
651
652  See https://github.com/bagder/curl/issues/221
653
654 17.10 improve how curl works in a windows console window
655
656  If you pull the scrollbar when transferring with curl in a Windows console
657  window, the transfer is interrupted and can get disconnected. This can
658  probably be improved. See https://github.com/bagder/curl/issues/322
659
660
661 18. Build
662
663 18.1 roffit
664
665  Consider extending 'roffit' to produce decent ASCII output, and use that
666  instead of (g)nroff when building src/tool_hugehelp.c
667
668 19. Test suite
669
670 19.1 SSL tunnel
671
672  Make our own version of stunnel for simple port forwarding to enable HTTPS
673  and FTP-SSL tests without the stunnel dependency, and it could allow us to
674  provide test tools built with either OpenSSL or GnuTLS
675
676 19.2 nicer lacking perl message
677
678  If perl wasn't found by the configure script, don't attempt to run the tests
679  but explain something nice why it doesn't.
680
681 19.3 more protocols supported
682
683  Extend the test suite to include more protocols. The telnet could just do FTP
684  or http operations (for which we have test servers).
685
686 19.4 more platforms supported
687
688  Make the test suite work on more platforms. OpenBSD and Mac OS. Remove
689  fork()s and it should become even more portable.
690
691 19.5 Add support for concurrent connections
692
693  Tests 836, 882 and 938 were designed to verify that separate connections aren't
694  used when using different login credentials in protocols that shouldn't re-use
695  a connection under such circumstances.
696
697  Unfortunately, ftpserver.pl doesn't appear to support multiple concurrent
698  connections. The read while() loop seems to loop until it receives a disconnect
699  from the client, where it then enters the waiting for connections loop. When
700  the client opens a second connection to the server, the first connection hasn't
701  been dropped (unless it has been forced - which we shouldn't do in these tests)
702  and thus the wait for connections loop is never entered to receive the second
703  connection.
704
705 20. Next SONAME bump
706
707 20.1 http-style HEAD output for FTP
708
709  #undef CURL_FTP_HTTPSTYLE_HEAD in lib/ftp.c to remove the HTTP-style headers
710  from being output in NOBODY requests over FTP
711
712 20.2 combine error codes
713
714  Combine some of the error codes to remove duplicates.  The original
715  numbering should not be changed, and the old identifiers would be
716  macroed to the new ones in an CURL_NO_OLDIES section to help with
717  backward compatibility.
718
719  Candidates for removal and their replacements:
720
721     CURLE_FILE_COULDNT_READ_FILE => CURLE_REMOTE_FILE_NOT_FOUND
722
723     CURLE_FTP_COULDNT_RETR_FILE => CURLE_REMOTE_FILE_NOT_FOUND
724
725     CURLE_FTP_COULDNT_USE_REST => CURLE_RANGE_ERROR
726
727     CURLE_FUNCTION_NOT_FOUND => CURLE_FAILED_INIT
728
729     CURLE_LDAP_INVALID_URL => CURLE_URL_MALFORMAT
730
731     CURLE_TFTP_NOSUCHUSER => CURLE_TFTP_ILLEGAL
732
733     CURLE_TFTP_NOTFOUND => CURLE_REMOTE_FILE_NOT_FOUND
734
735     CURLE_TFTP_PERM => CURLE_REMOTE_ACCESS_DENIED
736
737 20.3 extend CURLOPT_SOCKOPTFUNCTION prototype
738
739  The current prototype only provides 'purpose' that tells what the
740  connection/socket is for, but not any protocol or similar. It makes it hard
741  for applications to differentiate on TCP vs UDP and even HTTP vs FTP and
742  similar.
743
744 21. Next major release
745
746 21.1 cleanup return codes
747
748  curl_easy_cleanup() returns void, but curl_multi_cleanup() returns a
749  CURLMcode. These should be changed to be the same.
750
751 21.2 remove obsolete defines
752
753  remove obsolete defines from curl/curl.h
754
755 21.3 size_t
756
757  make several functions use size_t instead of int in their APIs
758
759 21.4 remove several functions
760
761  remove the following functions from the public API:
762
763  curl_getenv
764
765  curl_mprintf (and variations)
766
767  curl_strequal
768
769  curl_strnequal
770
771  They will instead become curlx_ - alternatives. That makes the curl app
772  still capable of using them, by building with them from source.
773
774  These functions have no purpose anymore:
775
776  curl_multi_socket
777
778  curl_multi_socket_all
779
780 21.5 remove CURLOPT_FAILONERROR
781
782  Remove support for CURLOPT_FAILONERROR, it has gotten too kludgy and weird
783  internally. Let the app judge success or not for itself.
784
785 21.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE
786
787  Remove support for a global DNS cache. Anything global is silly, and we
788  already offer the share interface for the same functionality but done
789  "right".
790
791 21.7 remove progress meter from libcurl
792
793  The internally provided progress meter output doesn't belong in the library.
794  Basically no application wants it (apart from curl) but instead applications
795  can and should do their own progress meters using the progress callback.
796
797  The progress callback should then be bumped as well to get proper 64bit
798  variable types passed to it instead of doubles so that big files work
799  correctly.
800
801 21.8 remove 'curl_httppost' from public
802
803  curl_formadd() was made to fill in a public struct, but the fact that the
804  struct is public is never really used by application for their own advantage
805  but instead often restricts how the form functions can or can't be modified.
806
807  Changing them to return a private handle will benefit the implementation and
808  allow us much greater freedoms while still maintaining a solid API and ABI.
809
810 21.9 have form functions use CURL handle argument
811
812  curl_formadd() and curl_formget() both currently have no CURL handle
813  argument, but both can use a callback that is set in the easy handle, and
814  thus curl_formget() with callback cannot function without first having
815  curl_easy_perform() (or similar) called - which is hard to grasp and a design
816  mistake.
817
818 21.10 Add CURLOPT_MAIL_CLIENT option
819
820  Rather than use the URL to specify the mail client string to present in the
821  HELO and EHLO commands, libcurl should support a new CURLOPT specifically for
822  specifying this data as the URL is non-standard and to be honest a bit of a
823  hack ;-)
824
825  Please see the following thread for more information:
826  http://curl.haxx.se/mail/lib-2012-05/0178.html
827