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