Compare commits
	
		
			712 Commits
		
	
	
		
			curl-7_42_
			...
			curl-7_46_
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | e2ae32ff5f | ||
|   | 6623a485d3 | ||
|   | 940c2f51aa | ||
|   | a47137c4a5 | ||
|   | 5648f0a32c | ||
|   | 2fddc4e3e1 | ||
|   | e55f15454e | ||
|   | fe7c39d353 | ||
|   | 8f281fb76d | ||
|   | 8cbd80686e | ||
|   | a14fa8f8ff | ||
|   | 81ae6d01fa | ||
|   | 19a8afb3c0 | ||
|   | 78c25c854a | ||
|   | db05d7a731 | ||
|   | cd2b73b3ed | ||
|   | 5b96b5e79e | ||
|   | 99d17a5e2b | ||
|   | facf2925c7 | ||
|   | be0d4141af | ||
|   | 40c349ada9 | ||
|   | bb9ec5ebb2 | ||
|   | c341311a0e | ||
|   | fc5d783589 | ||
|   | 98acebb526 | ||
|   | 06b288a72d | ||
|   | d55f9071fb | ||
|   | b7f3f1b68f | ||
|   | c2f1730e17 | ||
|   | 8d17117683 | ||
|   | c90e348579 | ||
|   | f024ece8c7 | ||
|   | ad6f6e17d3 | ||
|   | 0ddc59be0a | ||
|   | bbb34b6f15 | ||
|   | 41efdadf09 | ||
|   | 6af80afe49 | ||
|   | 80562083da | ||
|   | ff8d352ae9 | ||
|   | 250d786bd2 | ||
|   | 0cf80c05ea | ||
|   | b27893d15c | ||
|   | 05cd55f229 | ||
|   | b4c39010b5 | ||
|   | a72207ecf0 | ||
|   | 6c5f4303fe | ||
|   | 39904d6f7d | ||
|   | 88f585c3a1 | ||
|   | 051485d9e0 | ||
|   | 3c4065f402 | ||
|   | d0ddfe2216 | ||
|   | ca770d87e2 | ||
|   | ee04bee82b | ||
|   | 6cfd646f58 | ||
|   | 808a17ee67 | ||
|   | ba4d8f7eba | ||
|   | febda2f305 | ||
|   | ceb396c54a | ||
|   | 796c6ef02b | ||
|   | 60cf8157c7 | ||
|   | ad2d517545 | ||
|   | 1ee0aded89 | ||
|   | f322ca7765 | ||
|   | fd0c678e21 | ||
|   | aba281e762 | ||
|   | 64e959ffe3 | ||
|   | 86e2197337 | ||
|   | 6c20a87105 | ||
|   | b430d94fb2 | ||
|   | 0755308a6a | ||
|   | 53b13d0c71 | ||
|   | 431ba85829 | ||
|   | eb3703f052 | ||
|   | d7e352402c | ||
|   | 278ea24a7a | ||
|   | 1f82df9146 | ||
|   | 077fd8f1fa | ||
|   | b6baa108fa | ||
|   | 88702ebb31 | ||
|   | d6d58dd558 | ||
|   | a7c4bcd971 | ||
|   | 3c24400636 | ||
|   | dcf5b614ca | ||
|   | 6479f5a076 | ||
|   | d64add3c71 | ||
|   | a215381c94 | ||
|   | 3e0d64d075 | ||
|   | 01b7d8274c | ||
|   | 7023d8aa37 | ||
|   | eaa98cef8d | ||
|   | 4e3d396900 | ||
|   | f54a4aa9a3 | ||
|   | 6225c48a03 | ||
|   | 9b7f8ab21b | ||
|   | 2200bf6205 | ||
|   | 729b92afbe | ||
|   | 23b8fc15c8 | ||
|   | e3c85405d0 | ||
|   | 2581585961 | ||
|   | 007f3e0971 | ||
|   | 23c4090fd3 | ||
|   | 50bff12ac8 | ||
|   | 1a614c6c37 | ||
|   | 505d966850 | ||
|   | 748ffc77c6 | ||
|   | 60c86297bf | ||
|   | cd3aba1a5c | ||
|   | f6fbbd6dc3 | ||
|   | 210fc95c0f | ||
|   | 3bd7f28000 | ||
|   | 3f7b1bb89f | ||
|   | 1ea3a7d5e4 | ||
|   | cba5bc5854 | ||
|   | ca5f9341ef | ||
|   | 49a991346e | ||
|   | fbf09b7775 | ||
|   | f6ce8c9abb | ||
|   | 4c62066cec | ||
|   | 9b87078d55 | ||
|   | 370ee919b3 | ||
|   | e2f430c74a | ||
|   | ea2c959db4 | ||
|   | ca20ca54b2 | ||
|   | d9a1776b32 | ||
|   | 72d99f2e7b | ||
|   | 2f4f4108d6 | ||
|   | 03b6e07816 | ||
|   | 6288cb9304 | ||
|   | eefd5a95af | ||
|   | b1fc8c0e97 | ||
|   | 529f9310b1 | ||
|   | b1199def8c | ||
|   | b7d894d808 | ||
|   | d31ed6ac71 | ||
|   | 419d410ca0 | ||
|   | 3042cb5043 | ||
|   | 23cc0c00d4 | ||
|   | ace68fdc0c | ||
|   | 9744ef2289 | ||
|   | c238d4da1b | ||
|   | 5fecdc26f7 | ||
|   | 257a1c0d14 | ||
|   | fe7590f729 | ||
|   | 72646c2e48 | ||
|   | 4201e4a9ac | ||
|   | 4c773bcb47 | ||
|   | cb922d47d6 | ||
|   | 06b5fd8fde | ||
|   | 5cf0166636 | ||
|   | 19cb0c4a88 | ||
|   | e77b5b7453 | ||
|   | 684816cd9b | ||
|   | 2b98cb57c4 | ||
|   | 3fde8a4971 | ||
|   | 443e81ea47 | ||
|   | c6aedf680f | ||
|   | 854976ad7b | ||
|   | 14d5a86b3e | ||
|   | db532eff1e | ||
|   | 3ad83bc3a6 | ||
|   | 13ddb9e54a | ||
|   | 7715a70ba2 | ||
|   | 6f8ecea059 | ||
|   | 048f84637f | ||
|   | d30ad55c59 | ||
|   | 08e5fb4465 | ||
|   | 2e373f4a6f | ||
|   | bce689605d | ||
|   | 8256b44e5a | ||
|   | da2d3b5805 | ||
|   | 3771da335b | ||
|   | 8bb43ecd05 | ||
|   | 645fc44764 | ||
|   | 2c000d91f3 | ||
|   | aed57fdc95 | ||
|   | 69ea579700 | ||
|   | b1d55997e5 | ||
|   | 2eb4f5efe9 | ||
|   | 5bf36ea30d | ||
|   | c6ff538ebd | ||
|   | 8fd190c04f | ||
|   | ec9cbb1757 | ||
|   | 69b89050d4 | ||
|   | 963b7bd4f7 | ||
|   | af90becf4b | ||
|   | 46ad4f7f93 | ||
|   | 790d6de485 | ||
|   | 4f037367ed | ||
|   | 32fc638ddf | ||
|   | 119037325d | ||
|   | 710bb89cf3 | ||
|   | 095fe60e27 | ||
|   | 4d60e125de | ||
|   | 7c478cad57 | ||
|   | 0110cced2a | ||
|   | 5f87906e0e | ||
|   | 684bf30802 | ||
|   | 6b56901b56 | ||
|   | 7362008c1c | ||
|   | 1467dec147 | ||
|   | 0583ed3e48 | ||
|   | 67ae07c2e0 | ||
|   | 3f8d4e264d | ||
|   | bb72b9453d | ||
|   | 5fde69cdc3 | ||
|   | 443014e905 | ||
|   | 37af1766e9 | ||
|   | 67dbf8aa9c | ||
|   | 4d95491636 | ||
|   | 47b7d658b4 | ||
|   | f65e07ca59 | ||
|   | 30c131f51f | ||
|   | c979a3d0c4 | ||
|   | c184a5c6bc | ||
|   | c00cec9864 | ||
|   | 958d2ffb19 | ||
|   | a9fd53887b | ||
|   | 65ca3b083c | ||
|   | 82e3e8e31f | ||
|   | 887a4a19aa | ||
|   | b550a1c067 | ||
|   | 202162daeb | ||
|   | a7cb6a28e2 | ||
|   | 3d4ffa71f7 | ||
|   | cdba82e1c2 | ||
|   | 68c620fdc7 | ||
|   | fad9604613 | ||
|   | 0e17369f5b | ||
|   | 481e0de00a | ||
|   | df6a4d3519 | ||
|   | e30763c72e | ||
|   | 6a0bd6ce8b | ||
|   | 4e6f7aee64 | ||
|   | 1b8a5afe78 | ||
|   | 87e533ace0 | ||
|   | 27620171ff | ||
|   | 664398e43b | ||
|   | 3a4f42dd0c | ||
|   | 5ea0004438 | ||
|   | f1ccf68e8c | ||
|   | d36d83ba4b | ||
|   | 5dc556031b | ||
|   | 0e91737615 | ||
|   | 7380433d6a | ||
|   | a60bde79f9 | ||
|   | 82db076d9f | ||
|   | 25a2e8ebaf | ||
|   | 1869164293 | ||
|   | 4ceddcf8ca | ||
|   | e1a4bab86a | ||
|   | 8a0ff1e529 | ||
|   | 668231c309 | ||
|   | cb6a07fed0 | ||
|   | b604b7f040 | ||
|   | 9bb198026e | ||
|   | 749c0ca05b | ||
|   | c764cb4add | ||
|   | 6099f5fcac | ||
|   | 4963948089 | ||
|   | b850437991 | ||
|   | eb8283bb1a | ||
|   | 415f0370ea | ||
|   | 347a6ee597 | ||
|   | 2a59fb25cc | ||
|   | fb0825cb0a | ||
|   | dfeb85a187 | ||
|   | 96a3488eae | ||
|   | 45e918564a | ||
|   | 1abb218fe0 | ||
|   | ac7be02e69 | ||
|   | 37f173cfd0 | ||
|   | 2132708ac2 | ||
|   | 4a889441d3 | ||
|   | ce034356d2 | ||
|   | f21408132a | ||
|   | aec249f89f | ||
|   | e7d171da6b | ||
|   | 874413b3e1 | ||
|   | 62f306ff34 | ||
|   | 36f6f6f4f2 | ||
|   | a78534794e | ||
|   | 110d99c661 | ||
|   | 6d91b70d8b | ||
|   | 2acaf3c804 | ||
|   | 9756d1da76 | ||
|   | 22cb631198 | ||
|   | 613e5022fe | ||
|   | 2c12ac8de2 | ||
|   | 30aa38c818 | ||
|   | 8363656cb4 | ||
|   | 38ef1b3e7f | ||
|   | 1d89fd983a | ||
|   | b3c7f5159a | ||
|   | 1cea72bfde | ||
|   | 14ff86256b | ||
|   | e4fb5f2f61 | ||
|   | e67e71d62b | ||
|   | 618dfd65e4 | ||
|   | 1f1f131e09 | ||
|   | 9518139c73 | ||
|   | 5a136398ed | ||
|   | 7166d91a03 | ||
|   | 31673ff517 | ||
|   | bedf0a588e | ||
|   | 6ba9a1b952 | ||
|   | bc66c21c23 | ||
|   | a9c97fba81 | ||
|   | 1a85c8ef15 | ||
|   | 9e1b1ca606 | ||
|   | 15da07d2f2 | ||
|   | 5be0c88297 | ||
|   | 052a9dfdad | ||
|   | 7332ac565c | ||
|   | 105828a309 | ||
|   | 2bcd3ef7b2 | ||
|   | 1a7f66a3de | ||
|   | c75a1e7750 | ||
|   | daf7f98c11 | ||
|   | bb0acba67d | ||
|   | 5778e6f526 | ||
|   | c8a656d3c7 | ||
|   | 9ee40ce2ab | ||
|   | 0b8e9c8522 | ||
|   | 9a5574ca7b | ||
|   | ade6682f8d | ||
|   | 002d58f1e8 | ||
|   | cde447217f | ||
|   | 9d29afdfe3 | ||
|   | 0cc0b7e268 | ||
|   | aa9ead36a4 | ||
|   | ecece2cfb5 | ||
|   | 4d13b78aec | ||
|   | 39dcf352d2 | ||
|   | 55a255ee9c | ||
|   | 4c47cbf533 | ||
|   | c22fae7ccc | ||
|   | d712da787e | ||
|   | 2b743dcf8e | ||
|   | 333c36b276 | ||
|   | 1ab763acce | ||
|   | a8e9e0c205 | ||
|   | 4a21346ef3 | ||
|   | 4aee1f9cf5 | ||
|   | b9b7ccd04a | ||
|   | 84d122a8d6 | ||
|   | 5b9151231d | ||
|   | cf8975387f | ||
|   | 0342ada31f | ||
|   | 3f5f042e5d | ||
|   | bb6b521f69 | ||
|   | 8279dd7d39 | ||
|   | fe6049f04b | ||
|   | 7f11259eb7 | ||
|   | 473807b95f | ||
|   | f08e30d7bc | ||
|   | 6428b8de42 | ||
|   | 97c9d31884 | ||
|   | 9947f259bf | ||
|   | 33de75ed63 | ||
|   | df5965ebf4 | ||
|   | 6e566451ce | ||
|   | 07f7cdc309 | ||
|   | 3725748599 | ||
|   | 1e67bc5eaf | ||
|   | 12f915ca2a | ||
|   | 4b96240d3f | ||
|   | 1b3d3f9237 | ||
|   | c4eb10e2f0 | ||
|   | 3b4ee0d432 | ||
|   | c092b0f0f3 | ||
|   | f75b6065db | ||
|   | 11ab3f8918 | ||
|   | a1b2a6bd93 | ||
|   | c8331f515e | ||
|   | 23b84e448f | ||
|   | 0da1f5dc5c | ||
|   | 909f0a82b0 | ||
|   | 8b1d00ac1a | ||
|   | f7dcc7c118 | ||
|   | ecf7618e12 | ||
|   | 5b9a006b8f | ||
|   | fc69e2f7ec | ||
|   | bdd8cf4777 | ||
|   | dda81c1d5f | ||
|   | 2d7e165761 | ||
|   | 8356022d17 | ||
|   | 467309406e | ||
|   | b656715da3 | ||
|   | 9b95306d4c | ||
|   | 98e8b050ef | ||
|   | d9efd36907 | ||
|   | 1627930177 | ||
|   | 299b74fcfc | ||
|   | 279965c923 | ||
|   | 7db03e5c21 | ||
|   | a728225a92 | ||
|   | 29e5cf2a2d | ||
|   | 0f645adc95 | ||
|   | 373b77bca2 | ||
|   | 6d62d2c55d | ||
|   | 14b9e780d4 | ||
|   | 8204844f47 | ||
|   | b46a7744bc | ||
|   | a284b0ebc4 | ||
|   | c5d060cab4 | ||
|   | 98835eed29 | ||
|   | cee21eb6a7 | ||
|   | da650c1e54 | ||
|   | 40c921f8b8 | ||
|   | 7a8e861a56 | ||
|   | ad32457623 | ||
|   | 32d4260c2d | ||
|   | 1df8d28381 | ||
|   | fa0eeedf35 | ||
|   | 68d17643f5 | ||
|   | aab76af1fa | ||
|   | 172b2beba6 | ||
|   | 606b29fe0d | ||
|   | 60b19630b0 | ||
|   | de74e856e6 | ||
|   | cd20e81e89 | ||
|   | 79416fb2d6 | ||
|   | 8f0178a56b | ||
|   | 845b011614 | ||
|   | ce1bf87a04 | ||
|   | 5602ad721b | ||
|   | 55b78c5ae9 | ||
|   | c00b18d540 | ||
|   | 4ed8537be6 | ||
|   | 66a5f76583 | ||
|   | 616cecfdb6 | ||
|   | b59f296bf6 | ||
|   | e6749055d6 | ||
|   | 8208dd3b22 | ||
|   | 0c46abd79a | ||
|   | 1f70cdef98 | ||
|   | e3e06e1aee | ||
|   | 37402b5eb8 | ||
|   | 69c77f69a5 | ||
|   | dc2cbfda89 | ||
|   | 1b5eba8324 | ||
|   | ddb106d7f6 | ||
|   | 77044b53f7 | ||
|   | c712aa0ebe | ||
|   | a384f28ca6 | ||
|   | bf445b6e12 | ||
|   | a3a55d80ec | ||
|   | e9f0dd43bc | ||
|   | f65ab8864e | ||
|   | feea9263e9 | ||
|   | ea7134ac87 | ||
|   | 70191958b5 | ||
|   | 5156982377 | ||
|   | 903b6e0556 | ||
|   | f44b803f16 | ||
|   | 6842afbf44 | ||
|   | ea1eec8ea8 | ||
|   | 570076e82c | ||
|   | ef0fdb83b8 | ||
|   | 1c3811f4fd | ||
|   | afbee791d5 | ||
|   | 2546134b97 | ||
|   | 93aacc3050 | ||
|   | 307f212379 | ||
|   | 26ddc536b0 | ||
|   | 0e7d76d6a8 | ||
|   | 26583a62ab | ||
|   | cf6ef2dc92 | ||
|   | 3b93f1a3ec | ||
|   | 46d0eba2e9 | ||
|   | 4a2398627c | ||
|   | b88f980a74 | ||
|   | 85739723ba | ||
|   | f72b30e6fb | ||
|   | 52d83cb0c6 | ||
|   | 38e07886ed | ||
|   | bdf89d80ca | ||
|   | 24a8359b25 | ||
|   | 24f0b6ebf7 | ||
|   | 50c7f17e50 | ||
|   | 3e7ec1e849 | ||
|   | 28f4fc5272 | ||
|   | 45f21e0f37 | ||
|   | f93da27756 | ||
|   | f29f2cbd00 | ||
|   | 4fd187c677 | ||
|   | 496e96c242 | ||
|   | bb5b29ec14 | ||
|   | 75ba107767 | ||
|   | b430cb2a58 | ||
|   | 99eafc49bb | ||
|   | 45bad4ac97 | ||
|   | f3288196ff | ||
|   | ff7097f72c | ||
|   | 55fc47a401 | ||
|   | d186be9510 | ||
|   | 878c5757c0 | ||
|   | dd39a67101 | ||
|   | da08a204c2 | ||
|   | a9ed0fd6cb | ||
|   | a3e5a4371b | ||
|   | 4a7feea31a | ||
|   | 8d0d688296 | ||
|   | a5fb9151ee | ||
|   | f348b2d3bc | ||
|   | 1514f3506b | ||
|   | 55f3eb588d | ||
|   | cbf2920d02 | ||
|   | 0fcfe4d7ac | ||
|   | 20ac345806 | ||
|   | eaeeed2e8f | ||
|   | 56b7663f73 | ||
|   | 025dbe46df | ||
|   | 1a8926d12f | ||
|   | b8673bb9f0 | ||
|   | 8f4791440a | ||
|   | 6befade68f | ||
|   | 3587da9e7c | ||
|   | 1ce14037c0 | ||
|   | 30bd59ba6e | ||
|   | ccfdd5986c | ||
|   | fc16d9cec8 | ||
|   | 7c17b58eec | ||
|   | 3013bb6b1c | ||
|   | 001ab7d860 | ||
|   | 59432503c0 | ||
|   | f6af9aef7e | ||
|   | 46a050e9f5 | ||
|   | 3cac8c9049 | ||
|   | 33ee411848 | ||
|   | 3bbcb4b036 | ||
|   | e8423f9ce1 | ||
|   | 9f5dcab83d | ||
|   | 41db5aed7a | ||
|   | 4bb815a32e | ||
|   | 4e7c3c12d3 | ||
|   | 9a0a16a61c | ||
|   | 2f1eae0f27 | ||
|   | 3628a90852 | ||
|   | a8904b39f3 | ||
|   | 8a7c1c76b3 | ||
|   | f348a6b4ab | ||
|   | d1b1d782f5 | ||
|   | e57f08863a | ||
|   | 44fe4b9029 | ||
|   | 9972666b47 | ||
|   | c005790ff1 | ||
|   | 49a6642f01 | ||
|   | f81d356c21 | ||
|   | b18a1654c1 | ||
|   | 02dfc930b5 | ||
|   | 96c0164b88 | ||
|   | 4bef1c7bf4 | ||
|   | 4a79475b13 | ||
|   | b6e3da5f08 | ||
|   | 28cdc0d82c | ||
|   | 3a973517a9 | ||
|   | f9f22b0d63 | ||
|   | ef02da3156 | ||
|   | e582cd16ff | ||
|   | 1514977bcd | ||
|   | fda0e74c22 | ||
|   | 03e2a9b023 | ||
|   | 817323ed82 | ||
|   | 42ed88e70a | ||
|   | 84d811f6af | ||
|   | d04bab8873 | ||
|   | 640f283bbb | ||
|   | 995c6006fe | ||
|   | 78ac944dc2 | ||
|   | ee04c20b74 | ||
|   | 126e7f7253 | ||
|   | b0143a2a33 | ||
|   | 6a688976f0 | ||
|   | c175d184a2 | ||
|   | d5aab55b33 | ||
|   | 0f6f7c100a | ||
|   | db979fea73 | ||
|   | a393d64456 | ||
|   | 265f83a9f0 | ||
|   | 301ba7772c | ||
|   | 00a770b3f5 | ||
|   | dd23c49546 | ||
|   | 3d38a38012 | ||
|   | d4313b1f01 | ||
|   | 7da064fdd2 | ||
|   | 897a7b3a13 | ||
|   | 155b1f5df9 | ||
|   | 979670988a | ||
|   | 0b26b94bdc | ||
|   | 4883f7019d | ||
|   | 39b9bf60d1 | ||
|   | d69eee0964 | ||
|   | 7ff7e45405 | ||
|   | 4ac6cc3ebd | ||
|   | 077f12b0ae | ||
|   | d6f1c74330 | ||
|   | 7d0df07e48 | ||
|   | 811443754a | ||
|   | df3a970cb4 | ||
|   | 193251794a | ||
|   | 8b38fcf2f6 | ||
|   | 5871affc7a | ||
|   | 3e8a5d88a5 | ||
|   | 522ca8c035 | ||
|   | a66ed407d2 | ||
|   | 61a94d6f77 | ||
|   | 56c362b1a7 | ||
|   | 72105ebf05 | ||
|   | 38bd6bf0bb | ||
|   | be4c8fd1ef | ||
|   | 783b3c7b42 | ||
|   | 02ec1ced9b | ||
|   | 2ce2f03007 | ||
|   | d722138f29 | ||
|   | 0dc0de0351 | ||
|   | d261652d42 | ||
|   | 74a4bd5ecd | ||
|   | 591a6933da | ||
|   | e91aedd840 | ||
|   | ee3ad233a2 | ||
|   | 70b5b698b0 | ||
|   | a28734be09 | ||
|   | 5252f13dfa | ||
|   | 153f940198 | ||
|   | f4b8b39881 | ||
|   | 01e1bdb10c | ||
|   | 7bbac214f5 | ||
|   | 84c6b6561f | ||
|   | 2c238ea1fc | ||
|   | 5fe71975e4 | ||
|   | 77f1029ecd | ||
|   | 7957d2eb92 | ||
|   | 47caff7bdf | ||
|   | d6440d7366 | ||
|   | f858624052 | ||
|   | 6e6b02f398 | ||
|   | 5fa82ca56f | ||
|   | 1c01cee601 | ||
|   | 750d678c0e | ||
|   | a6af3df660 | ||
|   | 2a746f6c28 | ||
|   | fd137786e5 | ||
|   | b419e7ae0c | ||
|   | d37e0160c2 | ||
|   | 640296c95d | ||
|   | c4d6f9163a | ||
|   | c720cd6356 | ||
|   | 3377e692ee | ||
|   | 5bf472fd39 | ||
|   | 8936a23f51 | ||
|   | f010f3e3ca | ||
|   | 33058a1dc3 | ||
|   | 9fcc297ff3 | ||
|   | 8a35211f3e | ||
|   | fa08362a5f | ||
|   | a5e09e9eea | ||
|   | 86bc654532 | ||
|   | 690317aae2 | ||
|   | 3c104448d6 | ||
|   | ae8387b91c | ||
|   | d93619ca5d | ||
|   | aa99a63f03 | ||
|   | 4bb8bad964 | ||
|   | b6c9f5b7ae | ||
|   | 4335b86a10 | ||
|   | 3f88d92e92 | ||
|   | 32606e4f0b | ||
|   | 693422b79b | ||
|   | 6a61285909 | ||
|   | 4271695122 | ||
|   | b23fda76c1 | ||
|   | 926cb9ff65 | ||
|   | 55db5bdff7 | ||
|   | 790d1a4816 | ||
|   | 1c0f70f534 | ||
|   | cd39b944af | ||
|   | 6ba2e88a64 | ||
|   | 1f8a337e41 | ||
|   | b2ea1bfcd6 | ||
|   | 0741271198 | ||
|   | 97c272e5d1 | ||
|   | 54c394699d | ||
|   | 09a31fabe4 | ||
|   | d4f62f6c5d | ||
|   | 1945f99d59 | ||
|   | b55cb2eef2 | ||
|   | c0700e3c7f | ||
|   | 92e754de78 | ||
|   | 9a91e8059b | ||
|   | 3447c973d0 | ||
|   | cae43a10cb | ||
|   | aa8f613e98 | ||
|   | aff153f83a | ||
|   | 59f3f92ba6 | ||
|   | 6a7261359b | ||
|   | f1e0a0aae7 | ||
|   | 047e6aa05c | ||
|   | 48be87e5f0 | ||
|   | 49726926c6 | ||
|   | 710a2e99b5 | ||
|   | 79478fdb68 | ||
|   | 81e25b0e25 | ||
|   | 0675abbc75 | ||
|   | 26cbd7a1d9 | ||
|   | ba4741842e | ||
|   | 27ace9893c | ||
|   | 85c45d153b | ||
|   | fd9d3a1ef1 | ||
|   | d409f094a5 | ||
|   | b47c17d67c | ||
|   | 1fd33e3ec8 | 
							
								
								
									
										63
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										63
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,51 +1,52 @@ | ||||
| .deps | ||||
| .libs | ||||
| *.lib | ||||
| *.pdb | ||||
| *.asc | ||||
| *.dll | ||||
| *.exe | ||||
| *.obj | ||||
| *.asc | ||||
| .*.swp | ||||
| Debug | ||||
| Release | ||||
| *.exp | ||||
| *.la | ||||
| *.lib | ||||
| *.lo | ||||
| *.o | ||||
| *.obj | ||||
| *.pdb | ||||
| *~ | ||||
| .*.swp | ||||
| .cproject | ||||
| .deps | ||||
| .dirstamp | ||||
| .libs | ||||
| .project | ||||
| .settings | ||||
| /build/ | ||||
| /builds/ | ||||
| CHANGES.dist | ||||
| Debug | ||||
| INSTALL | ||||
| Makefile | ||||
| Makefile.in | ||||
| Release | ||||
| TAGS | ||||
| aclocal.m4 | ||||
| aclocal.m4.bak | ||||
| autom4te.cache | ||||
| compile | ||||
| config.cache | ||||
| config.guess | ||||
| config.log | ||||
| config.status | ||||
| config.sub | ||||
| configure | ||||
| depcomp | ||||
| libtool | ||||
| ltmain.sh | ||||
| compile | ||||
| curl-config | ||||
| libcurl.pc | ||||
| missing | ||||
| curl-*.tar.gz | ||||
| curl-*.tar.bz2 | ||||
| curl-*.tar.gz | ||||
| curl-*.tar.lzma | ||||
| curl-*.zip | ||||
| INSTALL | ||||
| curl-config | ||||
| depcomp | ||||
| install-sh | ||||
| *.o | ||||
| *.lo | ||||
| *.la | ||||
| libcurl.pc | ||||
| libtool | ||||
| ltmain.sh | ||||
| missing | ||||
| mkinstalldirs | ||||
| tags | ||||
| TAGS | ||||
| *~ | ||||
| aclocal.m4.bak | ||||
| CHANGES.dist | ||||
| .project | ||||
| .cproject | ||||
| .settings | ||||
| .dirstamp | ||||
| test-driver | ||||
| /build/ | ||||
| /builds/ | ||||
| scripts/_curl | ||||
|   | ||||
							
								
								
									
										10
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								.travis.yml
									
									
									
									
									
								
							| @@ -1,5 +1,15 @@ | ||||
| os: | ||||
|   - linux | ||||
|   - osx | ||||
|  | ||||
| sudo: false | ||||
|  | ||||
| language: c | ||||
|  | ||||
| install: | ||||
|   - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew update > /dev/null; fi | ||||
|   - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew install openssl libidn rtmpdump libssh2 c-ares libmetalink libressl nghttp2; fi | ||||
|  | ||||
| before_script: | ||||
|   - ./buildconf | ||||
|  | ||||
|   | ||||
							
								
								
									
										14
									
								
								CHANGES
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								CHANGES
									
									
									
									
									
								
							| @@ -1,15 +1,7 @@ | ||||
|                                   _   _ ____  _ | ||||
|                               ___| | | |  _ \| | | ||||
|                              / __| | | | |_) | | | ||||
|                             | (__| |_| |  _ <| |___ | ||||
|                              \___|\___/|_| \_\_____| | ||||
| See http://curl.haxx.se/changes.html for the edited and human readable online | ||||
| version of what has changed over the years in different curl releases. | ||||
|  | ||||
|                                   Changelog | ||||
|  | ||||
| This file no longer holds the changelog. Now you can generate it yourself | ||||
| like this: | ||||
| Generate a CHANGES file like the one present in evey release like this: | ||||
|  | ||||
| $ git log --pretty=fuller --no-color --date=short --decorate=full | \ | ||||
|   ./log2changes.pl | ||||
|  | ||||
| The older, manually edited, changelog is found in git named CHANGES.0 | ||||
|   | ||||
| @@ -139,7 +139,7 @@ int main(void) | ||||
|   rc = gethostbyname_r(address, &h, &hdata); | ||||
| #elif defined(HAVE_GETHOSTBYNAME_R_5) || \ | ||||
|       defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT) | ||||
|   rc = gethostbyname_r(address, &h, buffer, 8192, 0, &h_errnop); | ||||
|   rc = gethostbyname_r(address, &h, buffer, 8192, &h_errnop); | ||||
|   (void)hp; /* not used for test */ | ||||
| #elif defined(HAVE_GETHOSTBYNAME_R_6) || \ | ||||
|       defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT) | ||||
|   | ||||
| @@ -10,8 +10,8 @@ endmacro(add_header_include) | ||||
|  | ||||
| set(signature_call_conv) | ||||
| if(HAVE_WINDOWS_H) | ||||
|   add_header_include(HAVE_WINDOWS_H "windows.h") | ||||
|   add_header_include(HAVE_WINSOCK2_H "winsock2.h") | ||||
|   add_header_include(HAVE_WINDOWS_H "windows.h") | ||||
|   add_header_include(HAVE_WINSOCK_H "winsock.h") | ||||
|   set(_source_epilogue | ||||
|       "${_source_epilogue}\n#ifndef WIN32_LEAN_AND_MEAN\n#define WIN32_LEAN_AND_MEAN\n#endif") | ||||
|   | ||||
| @@ -122,10 +122,10 @@ endif() | ||||
| option(CURL_HIDDEN_SYMBOLS "Set to ON to hide libcurl internal symbols (=hide all symbols that aren't officially external)." ON) | ||||
| mark_as_advanced(CURL_HIDDEN_SYMBOLS) | ||||
|  | ||||
| # IF(WIN32) | ||||
| # OPTION(CURL_WINDOWS_SSPI "Use windows libraries to allow NTLM authentication without openssl" ON) | ||||
| # MARK_AS_ADVANCED(CURL_WINDOWS_SSPI) | ||||
| # ENDIF() | ||||
| IF(WIN32) | ||||
|   OPTION(CURL_WINDOWS_SSPI "Use windows libraries to allow NTLM authentication without openssl" ON) | ||||
|   MARK_AS_ADVANCED(CURL_WINDOWS_SSPI) | ||||
| ENDIF() | ||||
|  | ||||
| option(HTTP_ONLY "disables all protocols except HTTP (This overrides all CURL_DISABLE_* options)" OFF) | ||||
| mark_as_advanced(HTTP_ONLY) | ||||
| @@ -186,7 +186,7 @@ option(DISABLED_THREADSAFE "Set to explicitly specify we don't want to use threa | ||||
| mark_as_advanced(DISABLED_THREADSAFE) | ||||
| option(ENABLE_IPV6 "Define if you want to enable IPv6 support" ON) | ||||
| mark_as_advanced(ENABLE_IPV6) | ||||
| if(ENABLE_IPV6) | ||||
| if(ENABLE_IPV6 AND NOT WIN32) | ||||
|   include(CheckStructHasMember) | ||||
|   check_struct_has_member("struct sockaddr_in6" sin6_addr "netinet/in.h" | ||||
|                           HAVE_SOCKADDR_IN6_SIN6_ADDR) | ||||
| @@ -355,9 +355,10 @@ if(NOT CURL_DISABLE_LDAP) | ||||
|     check_include_file_concat("winber.h"  HAVE_WINBER_H) | ||||
|   endif() | ||||
|    | ||||
|   set(CMAKE_REQUIRED_INCLUDES_BAK ${CMAKE_REQUIRED_INCLUDES}) | ||||
|   set(CMAKE_LDAP_INCLUDE_DIR "" CACHE STRING "Path to LDAP include directory") | ||||
|   if(CMAKE_LDAP_INCLUDE_DIR) | ||||
|     set(CMAKE_REQUIRED_INCLUDES ${CMAKE_LDAP_INCLUDE_DIR}) | ||||
|     list(APPEND CMAKE_REQUIRED_INCLUDES ${CMAKE_LDAP_INCLUDE_DIR}) | ||||
|   endif() | ||||
|   check_include_file_concat("ldap.h"           HAVE_LDAP_H) | ||||
|   check_include_file_concat("lber.h"           HAVE_LBER_H) | ||||
| @@ -365,9 +366,11 @@ if(NOT CURL_DISABLE_LDAP) | ||||
|   if(NOT HAVE_LDAP_H) | ||||
|     message(STATUS "LDAP_H not found CURL_DISABLE_LDAP set ON") | ||||
|     set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE) | ||||
|     set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_BAK}) #LDAP includes won't be used | ||||
|   elseif(NOT HAVE_LIBLDAP) | ||||
|     message(STATUS "LDAP library '${CMAKE_LDAP_LIB}' not found CURL_DISABLE_LDAP set ON") | ||||
|     set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE) | ||||
|     set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_BAK}) #LDAP includes won't be used | ||||
|   else() | ||||
|     if(CMAKE_USE_OPENLDAP) | ||||
|       set(USE_OPENLDAP ON) | ||||
| @@ -448,6 +451,7 @@ if(CURL_ZLIB) | ||||
|     set(HAVE_LIBZ ON) | ||||
|     list(APPEND CURL_LIBS ${ZLIB_LIBRARIES}) | ||||
|     include_directories(${ZLIB_INCLUDE_DIRS}) | ||||
|     list(APPEND CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIRS}) | ||||
|   endif() | ||||
| endif() | ||||
|  | ||||
| @@ -463,7 +467,7 @@ if(CMAKE_USE_LIBSSH2) | ||||
|   if(LIBSSH2_FOUND) | ||||
|     list(APPEND CURL_LIBS ${LIBSSH2_LIBRARY}) | ||||
|     set(CMAKE_REQUIRED_LIBRARIES ${LIBSSH2_LIBRARY}) | ||||
|     set(CMAKE_REQUIRED_INCLUDES "${LIBSSH2_INCLUDE_DIR}") | ||||
|     list(APPEND CMAKE_REQUIRED_INCLUDES "${LIBSSH2_INCLUDE_DIR}") | ||||
|     include_directories("${LIBSSH2_INCLUDE_DIR}") | ||||
|     set(HAVE_LIBSSH2 ON) | ||||
|     set(USE_LIBSSH2 ON) | ||||
| @@ -491,12 +495,12 @@ mark_as_advanced(CMAKE_USE_GSSAPI) | ||||
| if(CMAKE_USE_GSSAPI) | ||||
|   find_package(GSS) | ||||
|  | ||||
|   set(HAVE_GSS_API ${GSS_FOUND}) | ||||
|   set(HAVE_GSSAPI ${GSS_FOUND}) | ||||
|   if(GSS_FOUND) | ||||
|  | ||||
|     message(STATUS "Found ${GSS_FLAVOUR} GSSAPI version: \"${GSS_VERSION}\"") | ||||
|  | ||||
|     set(CMAKE_REQUIRED_INCLUDES ${GSS_INCLUDE_DIR}) | ||||
|     list(APPEND CMAKE_REQUIRED_INCLUDES ${GSS_INCLUDE_DIRECTORIES}) | ||||
|     check_include_file_concat("gssapi/gssapi.h"  HAVE_GSSAPI_GSSAPI_H) | ||||
|     check_include_file_concat("gssapi/gssapi_generic.h" HAVE_GSSAPI_GSSAPI_GENERIC_H) | ||||
|     check_include_file_concat("gssapi/gssapi_krb5.h" HAVE_GSSAPI_GSSAPI_KRB5_H) | ||||
| @@ -532,7 +536,7 @@ if(CMAKE_USE_GSSAPI) | ||||
|  | ||||
|     endif() | ||||
|  | ||||
|     include_directories(${GSS_INCLUDE_DIR}) | ||||
|     include_directories(${GSS_INCLUDE_DIRECTORIES}) | ||||
|     link_directories(${GSS_LINK_DIRECTORIES}) | ||||
|     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GSS_COMPILER_FLAGS}") | ||||
|     set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${GSS_LINKER_FLAGS}") | ||||
| @@ -552,12 +556,25 @@ else() | ||||
|   unset(USE_UNIX_SOCKETS CACHE) | ||||
| endif() | ||||
|  | ||||
|  | ||||
| # Check for header files | ||||
| if(NOT UNIX) | ||||
|   check_include_file_concat("windows.h"      HAVE_WINDOWS_H) | ||||
|   check_include_file_concat("winsock.h"      HAVE_WINSOCK_H) | ||||
|   check_include_file_concat("ws2tcpip.h"     HAVE_WS2TCPIP_H) | ||||
|   check_include_file_concat("winsock2.h"     HAVE_WINSOCK2_H) | ||||
|   if(CURL_WINDOWS_SSPI) | ||||
|     set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -DSECURITY_WIN32") | ||||
|     check_include_file_concat("sspi.h"       HAVE_SSPI_H) | ||||
|     if(HAVE_SSPI_H) | ||||
|       check_include_file_concat("schannel.h" HAVE_SCHANNEL_H) | ||||
|       set(USE_WINDOWS_SSPI ON) | ||||
|       if(HAVE_SCHANNEL_H) | ||||
|         set(USE_SCHANNEL ON) | ||||
|         set(SSL_ENABLED ON) | ||||
|       endif() | ||||
|     endif() | ||||
|   endif() | ||||
| endif(NOT UNIX) | ||||
|  | ||||
| check_include_file_concat("stdio.h"          HAVE_STDIO_H) | ||||
| @@ -1046,12 +1063,12 @@ _add_if("AsynchDNS"     USE_ARES OR USE_THREADS_POSIX) | ||||
| _add_if("IDN"           HAVE_LIBIDN) | ||||
| # TODO SSP1 (WinSSL) check is missing | ||||
| _add_if("SSPI"          USE_WINDOWS_SSPI) | ||||
| _add_if("GSS-API"       HAVE_GSS_API) | ||||
| _add_if("GSS-API"       HAVE_GSSAPI) | ||||
| # TODO SSP1 missing for SPNEGO | ||||
| _add_if("SPNEGO"        NOT CURL_DISABLE_CRYPTO_AUTH AND | ||||
|                         (HAVE_GSS_API OR USE_WINDOWS_SSPI)) | ||||
|                         (HAVE_GSSAPI OR USE_WINDOWS_SSPI)) | ||||
| _add_if("Kerberos"      NOT CURL_DISABLE_CRYPTO_AUTH AND | ||||
|                         (HAVE_GSS_API OR USE_WINDOWS_SSPI)) | ||||
|                         (HAVE_GSSAPI OR USE_WINDOWS_SSPI)) | ||||
| # NTLM support requires crypto function adaptions from various SSL libs | ||||
| # TODO alternative SSL libs tests for SSP1, GNUTLS, NSS, DARWINSSL | ||||
| if(NOT CURL_DISABLE_CRYPTO_AUTH AND (USE_OPENSSL OR | ||||
| @@ -1136,7 +1153,7 @@ set(VERSIONNUM              "${CURL_VERSION_NUM}") | ||||
| # Finally generate a "curl-config" matching this config | ||||
| configure_file("${CURL_SOURCE_DIR}/curl-config.in" | ||||
|                "${CURL_BINARY_DIR}/curl-config" @ONLY) | ||||
| install(FILES "${CMAKE_BINARY_DIR}/curl-config" | ||||
| install(FILES "${CURL_BINARY_DIR}/curl-config" | ||||
|         DESTINATION bin | ||||
|         PERMISSIONS | ||||
|           OWNER_READ OWNER_WRITE OWNER_EXECUTE | ||||
| @@ -1146,7 +1163,7 @@ install(FILES "${CMAKE_BINARY_DIR}/curl-config" | ||||
| # Finally generate a pkg-config file matching this config | ||||
| configure_file("${CURL_SOURCE_DIR}/libcurl.pc.in" | ||||
|                "${CURL_BINARY_DIR}/libcurl.pc" @ONLY) | ||||
| install(FILES "${CMAKE_BINARY_DIR}/libcurl.pc" | ||||
| install(FILES "${CURL_BINARY_DIR}/libcurl.pc" | ||||
|         DESTINATION lib/pkgconfig) | ||||
|  | ||||
| # This needs to be run very last so other parts of the scripts can take advantage of this. | ||||
|   | ||||
| @@ -16,11 +16,9 @@ Send your suggestions using one of these methods: | ||||
|  | ||||
|  1. in a mail to the mailing list | ||||
|  | ||||
|  2. in the [bug tracker](https://sourceforge.net/p/curl/bugs/) | ||||
|  2. as a pull request on github | ||||
|  | ||||
|  3. as a pull request on github | ||||
|  | ||||
|  4. as an issue on github | ||||
|  3. as an issue on github | ||||
|     | ||||
|  | ||||
| / The cURL team! | ||||
|   | ||||
| @@ -65,7 +65,7 @@ else | ||||
|  ARCHES64='-arch x86_64' | ||||
|  #We "know" that 10.4 and earlier do not support 64bit | ||||
|  OLD_SDK64=`ls  $SDK_PATH|egrep -v "10.[0-4]"|head -1` | ||||
|  NEW_SDK64=`ls -r $SDK_PATH|egrep -v "10.[0-4]"|head -1` | ||||
|  NEW_SDK64=`ls -r $SDK_PATH|egrep -v "10.[0-4][^0-9]" | head -1` | ||||
|  if test $USE_OLD -gt 0 | ||||
|   then | ||||
|    SDK64=$OLD_SDK64 | ||||
|   | ||||
							
								
								
									
										92
									
								
								Makefile.am
									
									
									
									
									
								
							
							
						
						
									
										92
									
								
								Makefile.am
									
									
									
									
									
								
							| @@ -32,103 +32,115 @@ CMAKE_DIST = CMakeLists.txt CMake/CMakeConfigurableFile.in	\ | ||||
| VC6_LIBTMPL = projects/Windows/VC6/lib/libcurl.tmpl | ||||
| VC6_LIBDSP = projects/Windows/VC6/lib/libcurl.dsp.dist | ||||
| VC6_LIBDSP_DEPS = $(VC6_LIBTMPL) Makefile.am lib/Makefile.inc | ||||
| VC6_SRCTMPL = projects/Windows/VC6/src/curlsrc.tmpl | ||||
| VC6_SRCDSP = projects/Windows/VC6/src/curlsrc.dsp.dist | ||||
| VC6_SRCTMPL = projects/Windows/VC6/src/curl.tmpl | ||||
| VC6_SRCDSP = projects/Windows/VC6/src/curl.dsp.dist | ||||
| VC6_SRCDSP_DEPS = $(VC6_SRCTMPL) Makefile.am src/Makefile.inc | ||||
|  | ||||
| VC7_LIBTMPL = projects/Windows/VC7/lib/libcurl.tmpl | ||||
| VC7_LIBVCPROJ = projects/Windows/VC7/lib/libcurl.vcproj.dist | ||||
| VC7_LIBVCPROJ_DEPS = $(VC7_LIBTMPL) Makefile.am lib/Makefile.inc | ||||
| VC7_SRCTMPL = projects/Windows/VC7/src/curlsrc.tmpl | ||||
| VC7_SRCVCPROJ = projects/Windows/VC7/src/curlsrc.vcproj.dist | ||||
| VC7_SRCTMPL = projects/Windows/VC7/src/curl.tmpl | ||||
| VC7_SRCVCPROJ = projects/Windows/VC7/src/curl.vcproj.dist | ||||
| VC7_SRCVCPROJ_DEPS = $(VC7_SRCTMPL) Makefile.am src/Makefile.inc | ||||
|  | ||||
| VC71_LIBTMPL = projects/Windows/VC7.1/lib/libcurl.tmpl | ||||
| VC71_LIBVCPROJ = projects/Windows/VC7.1/lib/libcurl.vcproj.dist | ||||
| VC71_LIBVCPROJ_DEPS = $(VC71_LIBTMPL) Makefile.am lib/Makefile.inc | ||||
| VC71_SRCTMPL = projects/Windows/VC7.1/src/curlsrc.tmpl | ||||
| VC71_SRCVCPROJ = projects/Windows/VC7.1/src/curlsrc.vcproj.dist | ||||
| VC71_SRCTMPL = projects/Windows/VC7.1/src/curl.tmpl | ||||
| VC71_SRCVCPROJ = projects/Windows/VC7.1/src/curl.vcproj.dist | ||||
| VC71_SRCVCPROJ_DEPS = $(VC71_SRCTMPL) Makefile.am src/Makefile.inc | ||||
|  | ||||
| VC8_LIBTMPL = projects/Windows/VC8/lib/libcurl.tmpl | ||||
| VC8_LIBVCPROJ = projects/Windows/VC8/lib/libcurl.vcproj.dist | ||||
| VC8_LIBVCPROJ_DEPS = $(VC8_LIBTMPL) Makefile.am lib/Makefile.inc | ||||
| VC8_SRCTMPL = projects/Windows/VC8/src/curlsrc.tmpl | ||||
| VC8_SRCVCPROJ = projects/Windows/VC8/src/curlsrc.vcproj.dist | ||||
| VC8_SRCTMPL = projects/Windows/VC8/src/curl.tmpl | ||||
| VC8_SRCVCPROJ = projects/Windows/VC8/src/curl.vcproj.dist | ||||
| VC8_SRCVCPROJ_DEPS = $(VC8_SRCTMPL) Makefile.am src/Makefile.inc | ||||
|  | ||||
| VC9_LIBTMPL = projects/Windows/VC9/lib/libcurl.tmpl | ||||
| VC9_LIBVCPROJ = projects/Windows/VC9/lib/libcurl.vcproj.dist | ||||
| VC9_LIBVCPROJ_DEPS = $(VC9_LIBTMPL) Makefile.am lib/Makefile.inc | ||||
| VC9_SRCTMPL = projects/Windows/VC9/src/curlsrc.tmpl | ||||
| VC9_SRCVCPROJ = projects/Windows/VC9/src/curlsrc.vcproj.dist | ||||
| VC9_SRCTMPL = projects/Windows/VC9/src/curl.tmpl | ||||
| VC9_SRCVCPROJ = projects/Windows/VC9/src/curl.vcproj.dist | ||||
| VC9_SRCVCPROJ_DEPS = $(VC9_SRCTMPL) Makefile.am src/Makefile.inc | ||||
|  | ||||
| VC10_LIBTMPL = projects/Windows/VC10/lib/libcurl.tmpl | ||||
| VC10_LIBVCXPROJ = projects/Windows/VC10/lib/libcurl.vcxproj.dist | ||||
| VC10_LIBVCXPROJ_DEPS = $(VC10_LIBTMPL) Makefile.am lib/Makefile.inc | ||||
| VC10_SRCTMPL = projects/Windows/VC10/src/curlsrc.tmpl | ||||
| VC10_SRCVCXPROJ = projects/Windows/VC10/src/curlsrc.vcxproj.dist | ||||
| VC10_SRCTMPL = projects/Windows/VC10/src/curl.tmpl | ||||
| VC10_SRCVCXPROJ = projects/Windows/VC10/src/curl.vcxproj.dist | ||||
| VC10_SRCVCXPROJ_DEPS = $(VC10_SRCTMPL) Makefile.am src/Makefile.inc | ||||
|  | ||||
| VC11_LIBTMPL = projects/Windows/VC11/lib/libcurl.tmpl | ||||
| VC11_LIBVCXPROJ = projects/Windows/VC11/lib/libcurl.vcxproj.dist | ||||
| VC11_LIBVCXPROJ_DEPS = $(VC11_LIBTMPL) Makefile.am lib/Makefile.inc | ||||
| VC11_SRCTMPL = projects/Windows/VC11/src/curlsrc.tmpl | ||||
| VC11_SRCVCXPROJ = projects/Windows/VC11/src/curlsrc.vcxproj.dist | ||||
| VC11_SRCTMPL = projects/Windows/VC11/src/curl.tmpl | ||||
| VC11_SRCVCXPROJ = projects/Windows/VC11/src/curl.vcxproj.dist | ||||
| VC11_SRCVCXPROJ_DEPS = $(VC11_SRCTMPL) Makefile.am src/Makefile.inc | ||||
|  | ||||
| VC12_LIBTMPL = projects/Windows/VC12/lib/libcurl.tmpl | ||||
| VC12_LIBVCXPROJ = projects/Windows/VC12/lib/libcurl.vcxproj.dist | ||||
| VC12_LIBVCXPROJ_DEPS = $(VC12_LIBTMPL) Makefile.am lib/Makefile.inc | ||||
| VC12_SRCTMPL = projects/Windows/VC12/src/curlsrc.tmpl | ||||
| VC12_SRCVCXPROJ = projects/Windows/VC12/src/curlsrc.vcxproj.dist | ||||
| VC12_SRCTMPL = projects/Windows/VC12/src/curl.tmpl | ||||
| VC12_SRCVCXPROJ = projects/Windows/VC12/src/curl.vcxproj.dist | ||||
| VC12_SRCVCXPROJ_DEPS = $(VC12_SRCTMPL) Makefile.am src/Makefile.inc | ||||
|  | ||||
| VC14_LIBTMPL = projects/Windows/VC14/lib/libcurl.tmpl | ||||
| VC14_LIBVCXPROJ = projects/Windows/VC14/lib/libcurl.vcxproj.dist | ||||
| VC14_LIBVCXPROJ_DEPS = $(VC14_LIBTMPL) Makefile.am lib/Makefile.inc | ||||
| VC14_SRCTMPL = projects/Windows/VC14/src/curl.tmpl | ||||
| VC14_SRCVCXPROJ = projects/Windows/VC14/src/curl.vcxproj.dist | ||||
| VC14_SRCVCXPROJ_DEPS = $(VC14_SRCTMPL) Makefile.am src/Makefile.inc | ||||
|  | ||||
| VC_DIST = projects/README	\ | ||||
|  projects/build-openssl.bat	\ | ||||
|  projects/build-wolfssl.bat	\ | ||||
|  projects/checksrc.bat	\ | ||||
|  projects/Windows/VC6/curl-all.dsw	\ | ||||
|  projects/Windows/VC6/lib/libcurl.dsw \ | ||||
|  projects/Windows/VC6/src/curlsrc.dsw \ | ||||
|  projects/Windows/VC6/src/curl.dsw \ | ||||
|  projects/Windows/VC7/curl-all.sln	\ | ||||
|  projects/Windows/VC7/lib/libcurl.sln 	\ | ||||
|  projects/Windows/VC7/src/curlsrc.sln 	\ | ||||
|  projects/Windows/VC7/src/curl.sln 	\ | ||||
|  projects/Windows/VC7.1/curl-all.sln	\ | ||||
|  projects/Windows/VC7.1/lib/libcurl.sln \ | ||||
|  projects/Windows/VC7.1/src/curlsrc.sln \ | ||||
|  projects/Windows/VC7.1/src/curl.sln \ | ||||
|  projects/Windows/VC8/curl-all.sln	\ | ||||
|  projects/Windows/VC8/lib/libcurl.sln 	\ | ||||
|  projects/Windows/VC8/src/curlsrc.sln 	\ | ||||
|  projects/Windows/VC8/src/curl.sln 	\ | ||||
|  projects/Windows/VC9/curl-all.sln	\ | ||||
|  projects/Windows/VC9/lib/libcurl.sln 	\ | ||||
|  projects/Windows/VC9/src/curlsrc.sln 	\ | ||||
|  projects/Windows/VC9/src/curl.sln 	\ | ||||
|  projects/Windows/VC10/curl-all.sln	\ | ||||
|  projects/Windows/VC10/lib/libcurl.sln 	\ | ||||
|  projects/Windows/VC10/src/curlsrc.sln  \ | ||||
|  projects/Windows/VC10/src/curl.sln  \ | ||||
|  projects/Windows/VC11/curl-all.sln	\ | ||||
|  projects/Windows/VC11/lib/libcurl.sln 	\ | ||||
|  projects/Windows/VC11/src/curlsrc.sln 	\ | ||||
|  projects/Windows/VC11/src/curl.sln 	\ | ||||
|  projects/Windows/VC12/curl-all.sln	\ | ||||
|  projects/Windows/VC12/lib/libcurl.sln 	\ | ||||
|  projects/Windows/VC12/src/curlsrc.sln | ||||
|  projects/Windows/VC12/src/curl.sln	\ | ||||
|  projects/Windows/VC14/curl-all.sln	\ | ||||
|  projects/Windows/VC14/lib/libcurl.sln 	\ | ||||
|  projects/Windows/VC14/src/curl.sln | ||||
|  | ||||
| WINBUILD_DIST = winbuild/BUILD.WINDOWS.txt winbuild/gen_resp_file.bat	\ | ||||
|  winbuild/MakefileBuild.vc winbuild/Makefile.vc				\ | ||||
|  winbuild/Makefile.msvc.names | ||||
|  | ||||
| EXTRA_DIST = CHANGES COPYING maketgz Makefile.dist curl-config.in	\ | ||||
|  RELEASE-NOTES buildconf libcurl.pc.in MacOSX-Framework	\ | ||||
|  RELEASE-NOTES buildconf libcurl.pc.in MacOSX-Framework scripts/zsh.pl	\ | ||||
|  $(CMAKE_DIST) $(VC_DIST) $(WINBUILD_DIST) lib/libcurl.vers.in | ||||
|  | ||||
| CLEANFILES = $(VC6_LIBDSP) $(VC6_SRCDSP) $(VC7_LIBVCPROJ) $(VC7_SRCVCPROJ)	\ | ||||
|  $(VC71_LIBVCPROJ) $(VC71_SRCVCPROJ) $(VC8_LIBVCPROJ) $(VC8_SRCVCPROJ)	\ | ||||
|  $(VC9_LIBVCPROJ) $(VC9_SRCVCPROJ) $(VC10_LIBVCXPROJ) $(VC10_SRCVCXPROJ)	\ | ||||
|  $(VC11_LIBVCXPROJ) $(VC11_SRCVCXPROJ) $(VC12_LIBVCXPROJ) $(VC12_SRCVCXPROJ) | ||||
|  $(VC11_LIBVCXPROJ) $(VC11_SRCVCXPROJ) $(VC12_LIBVCXPROJ) $(VC12_SRCVCXPROJ)	\ | ||||
|  $(VC14_LIBVCXPROJ) $(VC14_SRCVCXPROJ) | ||||
|  | ||||
| bin_SCRIPTS = curl-config | ||||
|  | ||||
| SUBDIRS = lib src include | ||||
| SUBDIRS = lib src include scripts | ||||
| DIST_SUBDIRS = $(SUBDIRS) tests packages docs | ||||
|  | ||||
| pkgconfigdir = $(libdir)/pkgconfig | ||||
| @@ -148,10 +160,10 @@ dist-hook: | ||||
| 	done) | ||||
|  | ||||
| html: | ||||
| 	cd docs; make html | ||||
| 	cd docs && make html | ||||
|  | ||||
| pdf: | ||||
| 	cd docs; make pdf | ||||
| 	cd docs && make pdf | ||||
|  | ||||
| check: test examples check-docs | ||||
|  | ||||
| @@ -269,7 +281,7 @@ vc-ide: $(VC6_LIBDSP_DEPS) $(VC6_SRCDSP_DEPS) $(VC7_LIBVCPROJ_DEPS)	\ | ||||
|  $(VC8_LIBVCPROJ_DEPS) $(VC8_SRCVCPROJ_DEPS) $(VC9_LIBVCPROJ_DEPS)	\ | ||||
|  $(VC9_SRCVCPROJ_DEPS) $(VC10_LIBVCXPROJ_DEPS) $(VC10_SRCVCXPROJ_DEPS)	\ | ||||
|  $(VC11_LIBVCXPROJ_DEPS) $(VC11_SRCVCXPROJ_DEPS) $(VC12_LIBVCXPROJ_DEPS)	\ | ||||
|  $(VC12_SRCVCXPROJ_DEPS) | ||||
|  $(VC12_SRCVCXPROJ_DEPS) $(VC14_LIBVCXPROJ_DEPS) $(VC14_SRCVCXPROJ_DEPS) | ||||
| 	@(win32_lib_srcs='$(LIB_CFILES)'; \ | ||||
| 	win32_lib_hdrs='$(LIB_HFILES) config-win32.h'; \ | ||||
| 	win32_lib_rc='$(LIB_RCFILES)'; \ | ||||
| @@ -530,4 +542,22 @@ function gen_element(type, dir, file)\ | ||||
| 		-v src_rc="$$win32_src_rc" \ | ||||
| 		-v src_x_srcs="$$sorted_src_x_srcs" \ | ||||
| 		-v src_x_hdrs="$$sorted_src_x_hdrs" \ | ||||
| 		"$$awk_code" $(srcdir)/$(VC12_SRCTMPL) > $(VC12_SRCVCXPROJ) || { exit 1; };) | ||||
| 		"$$awk_code" $(srcdir)/$(VC12_SRCTMPL) > $(VC12_SRCVCXPROJ) || { exit 1; }; \ | ||||
| 	\ | ||||
| 	echo "generating '$(VC14_LIBVCXPROJ)'"; \ | ||||
| 	awk -v proj_type=vcxproj \ | ||||
| 		-v lib_srcs="$$sorted_lib_srcs" \ | ||||
| 		-v lib_hdrs="$$sorted_lib_hdrs" \ | ||||
| 		-v lib_rc="$$win32_lib_rc" \ | ||||
| 		-v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \ | ||||
| 		-v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \ | ||||
| 		"$$awk_code" $(srcdir)/$(VC14_LIBTMPL) > $(VC14_LIBVCXPROJ) || { exit 1; }; \ | ||||
| 	\ | ||||
| 	echo "generating '$(VC14_SRCVCXPROJ)'"; \ | ||||
| 	awk -v proj_type=vcxproj \ | ||||
| 		-v src_srcs="$$sorted_src_srcs" \ | ||||
| 		-v src_hdrs="$$sorted_src_hdrs" \ | ||||
| 		-v src_rc="$$win32_src_rc" \ | ||||
| 		-v src_x_srcs="$$sorted_src_x_srcs" \ | ||||
| 		-v src_x_hdrs="$$sorted_src_x_hdrs" \ | ||||
| 		"$$awk_code" $(srcdir)/$(VC14_SRCTMPL) > $(VC14_SRCVCXPROJ) || { exit 1; };) | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
| #                            | (__| |_| |  _ <| |___ | ||||
| #                             \___|\___/|_| \_\_____| | ||||
| # | ||||
| # Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
| # Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
| # | ||||
| # This software is licensed as described in the file COPYING, which | ||||
| # you should have received as part of this distribution. The terms | ||||
| @@ -566,6 +566,17 @@ src/Makefile.vc12: src/Makefile.vc6 | ||||
| 	@echo "generate $@" | ||||
| 	@sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc12/g" -e "s/VC6/VC12/g" src/Makefile.vc6 > src/Makefile.vc12 | ||||
|  | ||||
| # VC14 makefiles are for use with VS2015 | ||||
| vc14: lib/Makefile.vc14 src/Makefile.vc14 | ||||
|  | ||||
| lib/Makefile.vc14: lib/Makefile.vc6 | ||||
| 	@echo "generate $@" | ||||
| 	@sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc14/g" -e "s/VC6/VC14/g" lib/Makefile.vc6 > lib/Makefile.vc14 | ||||
|  | ||||
| src/Makefile.vc14: src/Makefile.vc6 | ||||
| 	@echo "generate $@" | ||||
| 	@sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc14/g" -e "s/VC6/VC14/g" src/Makefile.vc6 > src/Makefile.vc14 | ||||
|  | ||||
| ca-bundle: lib/mk-ca-bundle.pl | ||||
| 	@echo "generate a fresh ca-bundle.crt" | ||||
| 	@perl $< -b -l -u lib/ca-bundle.crt | ||||
|   | ||||
							
								
								
									
										4
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								README
									
									
									
									
									
								
							| @@ -38,12 +38,12 @@ GIT | ||||
|  | ||||
|   To download the very latest source off the GIT server do this: | ||||
|  | ||||
|     git clone git://github.com/bagder/curl.git | ||||
|     git clone https://github.com/bagder/curl.git | ||||
|  | ||||
|   (you'll get a directory named curl created, filled with the source code) | ||||
|  | ||||
| NOTICE | ||||
|  | ||||
|   Curl contains pieces of source code that is Copyright (c) 1998, 1999 | ||||
|   Kungliga Tekniska H<EFBFBD>gskolan. This notice is included here to comply with the | ||||
|   Kungliga Tekniska Högskolan. This notice is included here to comply with the | ||||
|   distribution terms. | ||||
|   | ||||
							
								
								
									
										146
									
								
								RELEASE-NOTES
									
									
									
									
									
								
							
							
						
						
									
										146
									
								
								RELEASE-NOTES
									
									
									
									
									
								
							| @@ -1,22 +1,92 @@ | ||||
| Curl and libcurl 7.42.1 | ||||
| Curl and libcurl 7.46.0 | ||||
|  | ||||
|  Public curl releases:         146 | ||||
|  Command line options:         173 | ||||
|  curl_easy_setopt() options:   216 | ||||
|  Public functions in libcurl:  58 | ||||
|  Contributors:                 1265 | ||||
|  Public curl releases:         150 | ||||
|  Command line options:         177 | ||||
|  curl_easy_setopt() options:   221 | ||||
|  Public functions in libcurl:  61 | ||||
|  Contributors:                 1340 | ||||
|  | ||||
| This release includes the following changes: | ||||
|  | ||||
|  o configure: build silently by default | ||||
|  o cookies: Add support for Publix Suffix List with libpsl | ||||
|  o vtls: added support for mbedTLS [7] | ||||
|  o Added CURLOPT_STREAM_DEPENDS [8] | ||||
|  o Added CURLOPT_STREAM_DEPENDS_E [9] | ||||
|  o Added CURLOPT_STREAM_WEIGHT [10] | ||||
|  o Added CURLFORM_CONTENTLEN [14] | ||||
|  o oauth2: Added support for OAUTHBEARER SASL mechanism to IMAP, POP3 and SNMP | ||||
|  | ||||
| This release includes the following bugfixes: | ||||
|  | ||||
|  o CURLOPT_HEADEROPT: default to separate [5] | ||||
|  o dist: include {src,lib}/checksrc.whitelist [1] | ||||
|  o connectionexists: fix build without NTLM [2] | ||||
|  o docs: distribute the CURLOPT_PINNEDPUBLICKEY(3) man page, too | ||||
|  o curl -z: do not write empty file on unmet condition [3] | ||||
|  o openssl: fix serial number output [4] | ||||
|  o curl_easy_getinfo.3: document 'internals' in CURLINFO_TLS_SESSION | ||||
|  o sws: init http2 state properly | ||||
|  o curl.1: fix typo | ||||
|  o des: Fix header conditional for Curl_des_set_odd_parity | ||||
|  o ntlm: get rid of unconditional use of long long [1] | ||||
|  o CURLOPT_CERTINFO.3: fix reference to CURLINFO_CERTINFO | ||||
|  o docs: CURLINFO_LASTSOCKET => CURLINFO_ACTIVESOCKET [2] | ||||
|  o http2: Fix http2_recv to return -1 if recv returned -1 | ||||
|  o curl_global_init_mem: set function pointers before doing init | ||||
|  o ntlm: error out without 64bit support as the code needs it [1] | ||||
|  o openssl: Fix set up of pkcs12 certificate verification chain | ||||
|  o acinclude: remove PKGCONFIG override [3] | ||||
|  o test1531: case the size to fix the test on non-largefile builds | ||||
|  o fread_func: move callback pointer from set to state struct [4] | ||||
|  o test1601: fix compilation with --enable-debug and --disable-crypto-auth | ||||
|  o http2: Don't pass unitialized name+len pairs to nghttp2_submit_request [5] | ||||
|  o curlbuild.h: Fix non-configure compiling to mips and sh4 targets | ||||
|  o tool: Generate easysrc with last cache linked-list [6] | ||||
|  o cmake: Fix for add_subdirectory(curl) use-case | ||||
|  o vtls: fix compiler warning for TLS backends without sha256 | ||||
|  o build: fix for MSDOS/djgpp | ||||
|  o checksrc: add crude // detection | ||||
|  o http2: on_frame_recv: trust the conn/data input | ||||
|  o ftp: allow CURLOPT_IGNORE_CONTENT_LENGTH to ignore size [11] | ||||
|  o polarssl/mbedtls: fix name space pollution | ||||
|  o build: Fix mingw ssl gdi32 order [12] | ||||
|  o build: Fix support for PKG_CONFIG | ||||
|  o MacOSX-Framework: sdk regex fix for sdk 10.10 and later | ||||
|  o socks: Fix incorrect port numbers in failed connect messages | ||||
|  o curl.1: -E: s/private certificate/client certificate | ||||
|  o curl.h: s/HTTPPOST_/CURL_HTTPOST_ [13] | ||||
|  o curl_formadd: support >2GB files on windows [14] | ||||
|  o http redirects: %-encode bytes outside of ascii range [15] | ||||
|  o rawstr: Speed up Curl_raw_toupper by 40% | ||||
|  o curl_ntlm_core: fix 2 curl_off_t constant overflows. | ||||
|  o getinfo: CURLINFO_ACTIVESOCKET: fix bad socket value | ||||
|  o tftp tests: verify sent options too | ||||
|  o imap: Don't call imap_atom() when no mailbox specified in LIST command | ||||
|  o imap: Fixed double quote in LIST command when mailbox contains spaces | ||||
|  o imap: Don't check for continuation when executing a CUSTOMREQUEST [16] | ||||
|  o acinclude: Remove check for 16-bit curl_off_t | ||||
|  o BoringSSL: Work with stricter BIO_get_mem_data() [17] | ||||
|  o cmake: Add missing feature macros in config header [18] | ||||
|  o sasl_sspi: fixed unicode build for digest authentication [19] | ||||
|  o sasl_sspi: fix identity memory leak in digest authentication | ||||
|  o unit1602: Fixed failure in torture test | ||||
|  o unit1603: Added unit tests for hash functions | ||||
|  o vtls/openssl: remove unused traces of yassl ifdefs | ||||
|  o openssl: remove #ifdefs for < 0.9.7 support | ||||
|  o typecheck-gcc.h: add some missing options | ||||
|  o curl: mark two more options strings for --libcurl output | ||||
|  o openssl: Free modules on cleanup [20] | ||||
|  o CURLMOPT_PUSHFUNCTION.3: *_byname() returns only the first header | ||||
|  o getconnectinfo: Don't call recv(2) if socket == -1 | ||||
|  o http2: http_done: don't free already-freed push headers | ||||
|  o zsh completion: Preserve single quotes in output [21] | ||||
|  o os400: Provide options for libssh2 use in compile scripts. | ||||
|  o build: Fix theoretical infinite loops [22] | ||||
|  o pop3: Differentiate between success and continuation responses | ||||
|  o examples: Fixed compilation warnings | ||||
|  o schannel: Use GetVersionEx() when VerifyVersionInfo() isn't available | ||||
|  o CURLOPT_HEADERFUNCTION.3: fix typo | ||||
|  o curl: expanded the -XHEAD warning text | ||||
|  o done: make sure the final progress update is made [23] | ||||
|  o build: Install zsh completion [24] | ||||
|  o RTSP: do not add if-modified-since without timecondition [25] | ||||
|  o curl: Fixed display of URL index in password prompt for --next | ||||
|  o nonblock: fix setting non-blocking mode for Amiga [26] | ||||
|  o http2 push: add missing inits of new stream [27] | ||||
|  o http2: convert some verbose output into debug-only output | ||||
|  o Curl_read_plain: clean up ifdefs that break statements [28] | ||||
|  | ||||
| This release includes the following known bugs: | ||||
|  | ||||
| @@ -25,17 +95,45 @@ This release includes the following known bugs: | ||||
| This release would not have looked like this without help, code, reports and | ||||
| advice from friends like these: | ||||
|  | ||||
|   Alessandro Ghedini, Alexander Elgert, Daniel Stenberg, Kamil Dudka, | ||||
|   Oren Souroujon, Patrick Rapin, Viktor Szakáts, Yehezkel Horowitz, | ||||
|   (8 contributors) | ||||
|   Anders Bakken, Dan Fandrich, Daniel Hwang, Daniel Shahaf, Daniel Stenberg, | ||||
|   Davey Shafik, Dmitry S. Baikov, Douglas Creager, Erik Johansson, | ||||
|   Flavio Medeiros, Gisle Vanem, Javier G. Sogo, John Levon, Jonas Minnberg, | ||||
|   Justin Ehlert, Kamil Dudka, Kang Lin, Kurt Fankhauser, Lauri Kasanen, | ||||
|   Lukas Ruzicka, Marcel Raad, Michał Piechowski, Mohammad AlSaleh, Norbert Kett, | ||||
|   Patrick Monnerat, Rainer Jung, Ray Satiro, Richard Hosking, | ||||
|   Sebastian Pohlschmidt, Stefan Bühler, Steve Holme, Svyatoslav Mishyn, | ||||
|   Tatsuhiro Tsujikawa, Tim Rühsen, Xiangbin Li, | ||||
|   (35 contributors) | ||||
|  | ||||
|         Thanks! (and sorry if I forgot to mention someone) | ||||
|  | ||||
| References to bug reports and discussions on issues: | ||||
|  | ||||
|  [1] = http://curl.haxx.se/mail/archive-2015-04/0046.html | ||||
|  [2] = http://curl.haxx.se/bug/?i=231 | ||||
|  [3] = https://github.com/bagder/curl/issues/237 | ||||
|  [4] = https://github.com/bagder/curl/issues/235 | ||||
|  [5] = http://curl.haxx.se/docs/adv_20150429.html | ||||
|   | ||||
|  [1] = http://curl.haxx.se/bug/?i=478 | ||||
|  [2] = http://curl.haxx.se/bug/?i=479 | ||||
|  [3] = http://curl.haxx.se/mail/lib-2015-10/0035.html | ||||
|  [4] = http://curl.haxx.se/bug/?i=346 | ||||
|  [5] = http://curl.haxx.se/bug/?i=493 | ||||
|  [6] = http://curl.haxx.se/bug/?i=452 | ||||
|  [7] = http://curl.haxx.se/bug/?i=496 | ||||
|  [8] = http://curl.haxx.se/libcurl/c/CURLOPT_STREAM_DEPENDS.html | ||||
|  [9] = http://curl.haxx.se/libcurl/c/CURLOPT_STREAM_DEPENDS_E.html | ||||
|  [10] = http://curl.haxx.se/libcurl/c/CURLOPT_STREAM_WEIGHT.html | ||||
|  [11] = http://curl.haxx.se/bug/?i=480 | ||||
|  [12] = https://github.com/bagder/curl/pull/501 | ||||
|  [13] = http://curl.haxx.se/bug/?i=506 | ||||
|  [14] = http://curl.haxx.se/bug/?i=425 | ||||
|  [15] = http://curl.haxx.se/bug/?i=473 | ||||
|  [16] = http://curl.haxx.se/bug/?i=486 | ||||
|  [17] = http://curl.haxx.se/bug/?i=524 | ||||
|  [18] = http://curl.haxx.se/bug/?i=523 | ||||
|  [19] = http://curl.haxx.se/bug/?i=525 | ||||
|  [20] = http://curl.haxx.se/bug/?i=526 | ||||
|  [21] = http://curl.haxx.se/bug/?i=532 | ||||
|  [22] = http://curl.haxx.se/bug/?i=535 | ||||
|  [23] = http://curl.haxx.se/bug/?i=538 | ||||
|  [24] = http://curl.haxx.se/bug/?i=534 | ||||
|  [25] = http://stackoverflow.com/questions/33903982/curl-timecond-none-doesnt-work-how-to-remove-if-modified-since-header | ||||
|  [26] = http://curl.haxx.se/mail/lib-2015-11/0088.html | ||||
|  [27] = http://curl.haxx.se/bug/?i=530 | ||||
|  [28] = http://curl.haxx.se/bug/?i=546 | ||||
|   | ||||
							
								
								
									
										77
									
								
								acinclude.m4
									
									
									
									
									
								
							
							
						
						
									
										77
									
								
								acinclude.m4
									
									
									
									
									
								
							| @@ -5,7 +5,7 @@ | ||||
| #                            | (__| |_| |  _ <| |___ | ||||
| #                             \___|\___/|_| \_\_____| | ||||
| # | ||||
| # Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
| # Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
| # | ||||
| # This software is licensed as described in the file COPYING, which | ||||
| # you should have received as part of this distribution. The terms | ||||
| @@ -1851,8 +1851,10 @@ AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [ | ||||
|   AC_REQUIRE([AC_HEADER_TIME])dnl | ||||
|   AC_CHECK_HEADERS(sys/types.h sys/time.h time.h) | ||||
|   AC_MSG_CHECKING([for monotonic clock_gettime]) | ||||
|   AC_COMPILE_IFELSE([ | ||||
|     AC_LANG_PROGRAM([[ | ||||
|   # | ||||
|   if test "x$dontwant_rt" == "xno" ; then | ||||
|     AC_COMPILE_IFELSE([ | ||||
|       AC_LANG_PROGRAM([[ | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| @@ -1866,17 +1868,18 @@ AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [ | ||||
| #include <time.h> | ||||
| #endif | ||||
| #endif | ||||
|     ]],[[ | ||||
|       struct timespec ts; | ||||
|       (void)clock_gettime(CLOCK_MONOTONIC, &ts); | ||||
|     ]]) | ||||
|   ],[ | ||||
|     AC_MSG_RESULT([yes]) | ||||
|     ac_cv_func_clock_gettime="yes" | ||||
|   ],[ | ||||
|     AC_MSG_RESULT([no]) | ||||
|     ac_cv_func_clock_gettime="no" | ||||
|   ]) | ||||
|       ]],[[ | ||||
|         struct timespec ts; | ||||
|         (void)clock_gettime(CLOCK_MONOTONIC, &ts); | ||||
|       ]]) | ||||
|     ],[ | ||||
|       AC_MSG_RESULT([yes]) | ||||
|       ac_cv_func_clock_gettime="yes" | ||||
|     ],[ | ||||
|       AC_MSG_RESULT([no]) | ||||
|       ac_cv_func_clock_gettime="no" | ||||
|     ]) | ||||
|   fi | ||||
|   dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed | ||||
|   dnl until library linking and run-time checks for clock_gettime succeed. | ||||
| ]) | ||||
| @@ -2452,23 +2455,6 @@ AC_DEFUN([CURL_CHECK_FUNC_SELECT], [ | ||||
| ]) | ||||
|  | ||||
|  | ||||
| # This is only a temporary fix. This macro is here to replace the broken one | ||||
| # delivered by the automake project (including the 1.9.6 release). As soon as | ||||
| # they ship a working version we SHOULD remove this work-around. | ||||
|  | ||||
| AC_DEFUN([AM_MISSING_HAS_RUN], | ||||
| [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl | ||||
| test x"${MISSING+set}" = xset || MISSING="\${SHELL} \"$am_aux_dir/missing\"" | ||||
| # Use eval to expand $SHELL | ||||
| if eval "$MISSING --run true"; then | ||||
|   am_missing_run="$MISSING --run " | ||||
| else | ||||
|   am_missing_run= | ||||
|   AC_MSG_WARN([`missing' script is too old or missing]) | ||||
| fi | ||||
| ]) | ||||
|  | ||||
|  | ||||
| dnl CURL_VERIFY_RUNTIMELIBS | ||||
| dnl ------------------------------------------------- | ||||
| dnl Verify that the shared libs found so far can be used when running | ||||
| @@ -2676,7 +2662,7 @@ AC_HELP_STRING([--without-ca-path], [Don't use a default CA path]), | ||||
|     AC_DEFINE_UNQUOTED(CURL_CA_PATH, "$capath", [Location of default ca path]) | ||||
|     AC_MSG_RESULT([$capath (capath)]) | ||||
|   fi | ||||
|   if test "x$ca" == "xno" && test "x$capath" == "xno"; then | ||||
|   if test "x$ca" = "xno" && test "x$capath" = "xno"; then | ||||
|     AC_MSG_RESULT([no]) | ||||
|   fi | ||||
| ]) | ||||
| @@ -2851,7 +2837,6 @@ AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [ | ||||
|   # | ||||
|   x_LP64_long="" | ||||
|   x_LP32_long="" | ||||
|   x_LP16_long="" | ||||
|   # | ||||
|   if test "$ac_cv_sizeof_long" -eq "8" && | ||||
|      test "$ac_cv_sizeof_voidp" -ge "8"; then | ||||
| @@ -2859,9 +2844,6 @@ AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [ | ||||
|   elif test "$ac_cv_sizeof_long" -eq "4" && | ||||
|        test "$ac_cv_sizeof_voidp" -ge "4"; then | ||||
|     x_LP32_long="long" | ||||
|   elif test "$ac_cv_sizeof_long" -eq "2" && | ||||
|        test "$ac_cv_sizeof_voidp" -ge "2"; then | ||||
|     x_LP16_long="long" | ||||
|   fi | ||||
|   # | ||||
|   dnl DO_CURL_OFF_T_CHECK results are stored in next 3 vars | ||||
| @@ -2895,17 +2877,6 @@ AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [ | ||||
|     done | ||||
|     AC_MSG_RESULT([$curl_typeof_curl_off_t]) | ||||
|   fi | ||||
|   if test "$curl_typeof_curl_off_t" = "unknown"; then | ||||
|     AC_MSG_CHECKING([for 16-bit curl_off_t data type]) | ||||
|     for t2 in          \ | ||||
|       "$x_LP16_long"   \ | ||||
|       'int16_t'        \ | ||||
|       '__int16'        \ | ||||
|       'int'            ; do | ||||
|       DO_CURL_OFF_T_CHECK([$t2], [2]) | ||||
|     done | ||||
|     AC_MSG_RESULT([$curl_typeof_curl_off_t]) | ||||
|   fi | ||||
|   if test "$curl_typeof_curl_off_t" = "unknown"; then | ||||
|     AC_MSG_ERROR([cannot find data type for curl_off_t.]) | ||||
|   fi | ||||
| @@ -3066,12 +3037,14 @@ dnl Optionally PKG_CONFIG_LIBDIR may be given as $pcdir. | ||||
| dnl | ||||
|  | ||||
| AC_DEFUN([CURL_CHECK_PKGCONFIG], [ | ||||
|     if test -n "$PKG_CONFIG"; then | ||||
|       PKGCONFIG="$PKG_CONFIG" | ||||
|     else | ||||
|       AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no], | ||||
|         [$PATH:/usr/bin:/usr/local/bin]) | ||||
|     fi | ||||
|  | ||||
|     PKGCONFIG="no" | ||||
|  | ||||
|     AC_PATH_TOOL( PKGCONFIG, pkg-config, no, $PATH:/usr/bin:/usr/local/bin) | ||||
|  | ||||
|     if test x$PKGCONFIG != xno; then | ||||
|     if test "x$PKGCONFIG" != "xno"; then | ||||
|       AC_MSG_CHECKING([for $1 options with pkg-config]) | ||||
|       dnl ask pkg-config about $1 | ||||
|       itexists=`CURL_EXPORT_PCDIR([$2]) dnl | ||||
|   | ||||
							
								
								
									
										19
									
								
								appveyor.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								appveyor.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| version: 7.45.0.{build} | ||||
|  | ||||
| environment: | ||||
|     matrix: | ||||
|       - PRJ_GEN: "Visual Studio 11 2012 Win64" | ||||
|         BDIR: msvc2012 | ||||
|         PRJ_CFG: Release | ||||
|       - PRJ_GEN: "Visual Studio 12 2013 Win64" | ||||
|         BDIR: msvc2013 | ||||
|         PRJ_CFG: Release | ||||
|       - PRJ_GEN: "Visual Studio 14 2015 Win64" | ||||
|         BDIR: msvc2015 | ||||
|         PRJ_CFG: Release | ||||
|  | ||||
| build_script: | ||||
|     - mkdir build.%BDIR% | ||||
|     - cd build.%BDIR% | ||||
|     - cmake .. -G"%PRJ_GEN%" | ||||
|     - cmake --build . --config %PRJ_CFG% --clean-first | ||||
| @@ -318,6 +318,8 @@ for fname in .deps \ | ||||
|     ltsugar.m4 \ | ||||
|     ltversion.m4 \ | ||||
|     lt~obsolete.m4 \ | ||||
|     missing \ | ||||
|     install-sh \ | ||||
|     stamp-h1 \ | ||||
|     stamp-h2 \ | ||||
|     stamp-h3 ; do | ||||
| @@ -329,7 +331,7 @@ done | ||||
| # | ||||
|  | ||||
| echo "buildconf: running libtoolize" | ||||
| ${libtoolize} --copy --automake --force || die "libtoolize command failed" | ||||
| ${libtoolize} --copy --force || die "libtoolize command failed" | ||||
|  | ||||
| # When using libtool 1.5.X (X < 26) we copy libtool.m4 to our local m4 | ||||
| # subdirectory and this local copy is patched to fix some warnings that | ||||
|   | ||||
							
								
								
									
										374
									
								
								buildconf.bat
									
									
									
									
									
								
							
							
						
						
									
										374
									
								
								buildconf.bat
									
									
									
									
									
								
							| @@ -1,38 +1,352 @@ | ||||
| @echo off | ||||
| REM | ||||
| REM | ||||
| REM This batch file must be used to set up a git tree to build on | ||||
| REM systems where there is no autotools support (i.e. Microsoft). | ||||
| REM | ||||
| REM This file is not included nor needed for curl's release | ||||
| REM archives, neither for curl's daily snapshot archives. | ||||
| rem *************************************************************************** | ||||
| rem *                                  _   _ ____  _ | ||||
| rem *  Project                     ___| | | |  _ \| | | ||||
| rem *                             / __| | | | |_) | | | ||||
| rem *                            | (__| |_| |  _ <| |___ | ||||
| rem *                             \___|\___/|_| \_\_____| | ||||
| rem * | ||||
| rem * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
| rem * | ||||
| rem * This software is licensed as described in the file COPYING, which | ||||
| rem * you should have received as part of this distribution. The terms | ||||
| rem * are also available at http://curl.haxx.se/docs/copyright.html. | ||||
| rem * | ||||
| rem * You may opt to use, copy, modify, merge, publish, distribute and/or sell | ||||
| rem * copies of the Software, and permit persons to whom the Software is | ||||
| rem * furnished to do so, under the terms of the COPYING file. | ||||
| rem * | ||||
| rem * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||||
| rem * KIND, either express or implied. | ||||
| rem * | ||||
| rem *************************************************************************** | ||||
|  | ||||
| if exist GIT-INFO goto start_doing | ||||
| ECHO ERROR: This file shall only be used with a curl git tree checkout. | ||||
| goto end_all | ||||
| :start_doing | ||||
| rem NOTES | ||||
| rem | ||||
| rem This batch file must be used to set up a git tree to build on systems where | ||||
| rem there is no autotools support (i.e. DOS and Windows). | ||||
| rem | ||||
| rem This file is not included or required for curl's release archives or daily  | ||||
| rem snapshot archives. | ||||
|  | ||||
| REM create tool_hugehelp.c | ||||
| if not exist src\tool_hugehelp.c.cvs goto end_hugehelp_c | ||||
| copy /Y src\tool_hugehelp.c.cvs src\tool_hugehelp.c | ||||
| :end_hugehelp_c | ||||
| :begin | ||||
|   rem Set our variables | ||||
|   if "%OS%" == "Windows_NT" setlocal | ||||
|   set MODE=GENERATE | ||||
|  | ||||
| REM create Makefile | ||||
| if not exist Makefile.dist goto end_makefile | ||||
| copy /Y Makefile.dist Makefile | ||||
| :end_makefile | ||||
|   rem Switch to this batch file's directory | ||||
|   cd /d "%~0\.." 1>NUL 2>&1 | ||||
|  | ||||
| REM create curlbuild.h | ||||
| if not exist include\curl\curlbuild.h.dist goto end_curlbuild_h | ||||
| copy /Y include\curl\curlbuild.h.dist include\curl\curlbuild.h | ||||
| :end_curlbuild_h | ||||
|   rem Check we are running from a curl git repository | ||||
|   if not exist GIT-INFO goto norepo | ||||
|  | ||||
| REM setup c-ares git tree | ||||
| if not exist ares\buildconf.bat goto end_c_ares | ||||
| cd ares | ||||
| call buildconf.bat | ||||
| cd .. | ||||
| :end_c_ares | ||||
|   rem Detect programs. HAVE_<PROGNAME> | ||||
|   rem When not found the variable is set undefined. The undefined pattern | ||||
|   rem allows for statements like "if not defined HAVE_PERL (command)" | ||||
|   groff --version <NUL 1>NUL 2>&1 | ||||
|   if errorlevel 1 (set HAVE_GROFF=) else (set HAVE_GROFF=Y) | ||||
|   nroff --version <NUL 1>NUL 2>&1 | ||||
|   if errorlevel 1 (set HAVE_NROFF=) else (set HAVE_NROFF=Y) | ||||
|   perl --version <NUL 1>NUL 2>&1 | ||||
|   if errorlevel 1 (set HAVE_PERL=) else (set HAVE_PERL=Y) | ||||
|   gzip --version <NUL 1>NUL 2>&1 | ||||
|   if errorlevel 1 (set HAVE_GZIP=) else (set HAVE_GZIP=Y) | ||||
|  | ||||
| :end_all | ||||
| :parseArgs | ||||
|   if "%~1" == "" goto start | ||||
|  | ||||
|   if /i "%~1" == "-clean" ( | ||||
|     set MODE=CLEAN | ||||
|   ) else if /i "%~1" == "-?" ( | ||||
|     goto syntax | ||||
|   ) else if /i "%~1" == "-h" ( | ||||
|     goto syntax | ||||
|   ) else if /i "%~1" == "-help" ( | ||||
|     goto syntax | ||||
|   ) else ( | ||||
|     goto unknown | ||||
|   ) | ||||
|  | ||||
|   shift & goto parseArgs | ||||
|  | ||||
| :start | ||||
|   if "%MODE%" == "GENERATE" ( | ||||
|     echo. | ||||
|     echo Generating prerequisite files | ||||
|  | ||||
|     call :generate | ||||
|     if errorlevel 4 goto nogencurlbuild | ||||
|     if errorlevel 3 goto nogenhugehelp | ||||
|     if errorlevel 2 goto nogenmakefile | ||||
|     if errorlevel 1 goto warning | ||||
|  | ||||
|   ) else ( | ||||
|     echo. | ||||
|     echo Removing prerequisite files | ||||
|  | ||||
|     call :clean | ||||
|     if errorlevel 3 goto nocleancurlbuild | ||||
|     if errorlevel 2 goto nocleanhugehelp | ||||
|     if errorlevel 1 goto nocleanmakefile | ||||
|   ) | ||||
|  | ||||
|   goto success | ||||
|  | ||||
| rem Main generate function. | ||||
| rem | ||||
| rem Returns: | ||||
| rem | ||||
| rem 0 - success | ||||
| rem 1 - success with simplified tool_hugehelp.c  | ||||
| rem 2 - failed to generate Makefile | ||||
| rem 3 - failed to generate tool_hugehelp.c | ||||
| rem 4 - failed to generate curlbuild.h | ||||
| rem | ||||
| :generate | ||||
|   if "%OS%" == "Windows_NT" setlocal | ||||
|   set BASIC_HUGEHELP=0 | ||||
|  | ||||
|   rem Create Makefile | ||||
|   echo * %CD%\Makefile | ||||
|   if exist Makefile.dist ( | ||||
|     copy /Y Makefile.dist Makefile 1>NUL 2>&1 | ||||
|     if errorlevel 1 ( | ||||
|       if "%OS%" == "Windows_NT" endlocal | ||||
|       exit /B 2 | ||||
|     ) | ||||
|   ) | ||||
|  | ||||
|   rem Create tool_hugehelp.c | ||||
|   echo * %CD%\src\tool_hugehelp.c | ||||
|   call :genHugeHelp | ||||
|   if errorlevel 2 ( | ||||
|     if "%OS%" == "Windows_NT" endlocal | ||||
|     exit /B 3 | ||||
|   ) | ||||
|   if errorlevel 1 ( | ||||
|     set BASIC_HUGEHELP=1 | ||||
|   ) | ||||
|   cmd /c exit 0 | ||||
|  | ||||
|   rem Create curlbuild.h | ||||
|   echo * %CD%\include\curl\curlbuild.h | ||||
|   if exist include\curl\curlbuild.h.dist ( | ||||
|     copy /Y include\curl\curlbuild.h.dist include\curl\curlbuild.h 1>NUL 2>&1 | ||||
|     if errorlevel 1 ( | ||||
|       if "%OS%" == "Windows_NT" endlocal | ||||
|       exit /B 4 | ||||
|     ) | ||||
|   ) | ||||
|  | ||||
|   rem Setup c-ares git tree | ||||
|   if exist ares\buildconf.bat ( | ||||
|     echo. | ||||
|     echo Configuring c-ares build environment | ||||
|     cd ares | ||||
|     call buildconf.bat | ||||
|     cd .. | ||||
|   ) | ||||
|  | ||||
|   if "%BASIC_HUGEHELP%" == "1" ( | ||||
|     if "%OS%" == "Windows_NT" endlocal | ||||
|     exit /B 1 | ||||
|   ) | ||||
|  | ||||
|   if "%OS%" == "Windows_NT" endlocal | ||||
|   exit /B 0 | ||||
|  | ||||
| rem Main clean function. | ||||
| rem | ||||
| rem Returns: | ||||
| rem | ||||
| rem 0 - success | ||||
| rem 1 - failed to clean Makefile | ||||
| rem 2 - failed to clean tool_hugehelp.c | ||||
| rem 3 - failed to clean curlbuild.h | ||||
| rem | ||||
| :clean | ||||
|   rem Remove Makefile | ||||
|   echo * %CD%\Makefile | ||||
|   if exist Makefile ( | ||||
|     del Makefile 2>NUL | ||||
|     if exist Makefile ( | ||||
|       exit /B 1 | ||||
|     ) | ||||
|   ) | ||||
|  | ||||
|   rem Remove tool_hugehelp.c | ||||
|   echo * %CD%\src\tool_hugehelp.c | ||||
|   if exist src\tool_hugehelp.c ( | ||||
|     del src\tool_hugehelp.c 2>NUL | ||||
|     if exist src\tool_hugehelp.c ( | ||||
|       exit /B 2 | ||||
|     ) | ||||
|   ) | ||||
|  | ||||
|   rem Remove curlbuild.h | ||||
|   echo * %CD%\include\curl\curlbuild.h | ||||
|   if exist include\curl\curlbuild.h ( | ||||
|     del include\curl\curlbuild.h 2>NUL | ||||
|     if exist include\curl\curlbuild.h ( | ||||
|       exit /B 3 | ||||
|     ) | ||||
|   ) | ||||
|  | ||||
|   exit /B | ||||
|  | ||||
| rem Function to generate src\tool_hugehelp.c | ||||
| rem | ||||
| rem Returns: | ||||
| rem | ||||
| rem 0 - full tool_hugehelp.c generated | ||||
| rem 1 - simplified tool_hugehelp.c | ||||
| rem 2 - failure | ||||
| rem | ||||
| :genHugeHelp | ||||
|   if "%OS%" == "Windows_NT" setlocal | ||||
|   set LC_ALL=C | ||||
|   set ROFFCMD= | ||||
|   set BASIC=1 | ||||
|  | ||||
|   if defined HAVE_PERL ( | ||||
|     if defined HAVE_GROFF ( | ||||
|       set ROFFCMD=groff -mtty-char -Tascii -P-c -man | ||||
|     ) else if defined HAVE_NROFF ( | ||||
|       set ROFFCMD=nroff -c -Tascii -man | ||||
|     ) | ||||
|   ) | ||||
|  | ||||
|   if defined ROFFCMD ( | ||||
|     echo #include "tool_setup.h"> src\tool_hugehelp.c | ||||
|     echo #include "tool_hugehelp.h">> src\tool_hugehelp.c  | ||||
|  | ||||
|     if defined HAVE_GZIP ( | ||||
|       echo #ifndef HAVE_LIBZ>> src\tool_hugehelp.c | ||||
|     ) | ||||
|  | ||||
|     %ROFFCMD% docs\curl.1 2>NUL | perl src\mkhelp.pl docs\MANUAL >> src\tool_hugehelp.c | ||||
|     if defined HAVE_GZIP ( | ||||
|       echo #else>> src\tool_hugehelp.c | ||||
|       %ROFFCMD% docs\curl.1 2>NUL | perl src\mkhelp.pl -c docs\MANUAL >> src\tool_hugehelp.c | ||||
|       echo #endif /^* HAVE_LIBZ ^*/>> src\tool_hugehelp.c | ||||
|     ) | ||||
|  | ||||
|     set BASIC=0 | ||||
|   ) else ( | ||||
|     if exist src\tool_hugehelp.c.cvs ( | ||||
|       copy /Y src\tool_hugehelp.c.cvs src\tool_hugehelp.c 1>NUL 2>&1 | ||||
|     ) else ( | ||||
|       echo #include "tool_setup.h"> src\tool_hugehelp.c | ||||
|       echo #include "tool_hugehelp.hd">> src\tool_hugehelp.c | ||||
|       echo.>> src\tool_hugehelp.c | ||||
|       echo void hugehelp(void^)>> src\tool_hugehelp.c | ||||
|       echo {>> src\tool_hugehelp.c | ||||
|       echo #ifdef USE_MANUAL>> src\tool_hugehelp.c | ||||
|       echo   fputs("Built-in manual not included\n", stdout^);>> src\tool_hugehelp.c | ||||
|       echo #endif>> src\tool_hugehelp.c | ||||
|       echo }>> src\tool_hugehelp.c | ||||
|     ) | ||||
|   ) | ||||
|  | ||||
|   findstr "/C:void hugehelp(void)" src\tool_hugehelp.c 1>NUL 2>&1 | ||||
|   if errorlevel 1 ( | ||||
|     if "%OS%" == "Windows_NT" endlocal | ||||
|     exit /B 2 | ||||
|   ) | ||||
|  | ||||
|   if "%BASIC%" == "1" ( | ||||
|     if "%OS%" == "Windows_NT" endlocal | ||||
|     exit /B 1 | ||||
|   ) | ||||
|  | ||||
|   if "%OS%" == "Windows_NT" endlocal | ||||
|   exit /B 0 | ||||
|  | ||||
| rem Function to clean-up local variables under DOS, Windows 3.x and | ||||
| rem Windows 9x as setlocal isn't available until Windows NT | ||||
| rem | ||||
| :dosCleanup | ||||
|   set MODE= | ||||
|   set HAVE_GROFF= | ||||
|   set HAVE_NROFF= | ||||
|   set HAVE_PERL= | ||||
|   set HAVE_GZIP= | ||||
|   set BASIC_HUGEHELP= | ||||
|   set LC_ALL | ||||
|   set ROFFCMD= | ||||
|   set BASIC= | ||||
|  | ||||
|   exit /B | ||||
|  | ||||
| :syntax | ||||
|   rem Display the help | ||||
|   echo. | ||||
|   echo Usage: buildconf [-clean] | ||||
|   echo. | ||||
|   echo -clean    - Removes the files | ||||
|   goto error | ||||
|  | ||||
| :unknown | ||||
|   echo. | ||||
|   echo Error: Unknown argument '%1' | ||||
|   goto error | ||||
|  | ||||
| :norepo | ||||
|   echo. | ||||
|   echo Error: This batch file should only be used with a curl git repository | ||||
|   goto error | ||||
|  | ||||
| :nogenmakefile | ||||
|   echo. | ||||
|   echo Error: Unable to generate Makefile | ||||
|   goto error | ||||
|  | ||||
| :nogenhugehelp | ||||
|   echo. | ||||
|   echo Error: Unable to generate src\tool_hugehelp.c | ||||
|   goto error | ||||
|  | ||||
| :nogencurlbuild | ||||
|   echo. | ||||
|   echo Error: Unable to generate include\curl\curlbuild.h | ||||
|   goto error | ||||
|  | ||||
| :nocleanmakefile | ||||
|   echo. | ||||
|   echo Error: Unable to clean Makefile | ||||
|   goto error | ||||
|  | ||||
| :nocleanhugehelp | ||||
|   echo. | ||||
|   echo Error: Unable to clean src\tool_hugehelp.c | ||||
|   goto error | ||||
|  | ||||
| :nocleancurlbuild | ||||
|   echo. | ||||
|   echo Error: Unable to clean include\curl\curlbuild.h | ||||
|   goto error | ||||
|  | ||||
| :warning | ||||
|   echo. | ||||
|   echo Warning: The curl manual could not be integrated in the source. This means when | ||||
|   echo you build curl the manual will not be available (curl --man^). Integration of | ||||
|   echo the manual is not required and a summary of the options will still be available | ||||
|   echo (curl --help^). To integrate the manual your PATH is required to have | ||||
|   echo groff/nroff, perl and optionally gzip for compression. | ||||
|   goto success | ||||
|  | ||||
| :error | ||||
|   if "%OS%" == "Windows_NT" ( | ||||
|     endlocal | ||||
|   ) else ( | ||||
|     call :dosCleanup | ||||
|   ) | ||||
|   exit /B 1 | ||||
|  | ||||
| :success | ||||
|   if "%OS%" == "Windows_NT" ( | ||||
|     endlocal | ||||
|   ) else ( | ||||
|     call :dosCleanup | ||||
|   ) | ||||
|   exit /B 0 | ||||
|   | ||||
							
								
								
									
										262
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										262
									
								
								configure.ac
									
									
									
									
									
								
							| @@ -39,6 +39,7 @@ AC_CONFIG_SRCDIR([lib/urldata.h]) | ||||
| AC_CONFIG_HEADERS(lib/curl_config.h include/curl/curlbuild.h) | ||||
| AC_CONFIG_MACRO_DIR([m4]) | ||||
| AM_MAINTAINER_MODE | ||||
| m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) | ||||
|  | ||||
| CURL_CHECK_OPTION_DEBUG | ||||
| CURL_CHECK_OPTION_OPTIMIZE | ||||
| @@ -47,6 +48,7 @@ CURL_CHECK_OPTION_WERROR | ||||
| CURL_CHECK_OPTION_CURLDEBUG | ||||
| CURL_CHECK_OPTION_SYMBOL_HIDING | ||||
| CURL_CHECK_OPTION_ARES | ||||
| CURL_CHECK_OPTION_RT | ||||
|  | ||||
| XC_CHECK_PATH_SEPARATOR | ||||
|  | ||||
| @@ -147,7 +149,7 @@ AC_SUBST(PKGADD_VENDOR) | ||||
|  | ||||
| dnl | ||||
| dnl initialize all the info variables | ||||
|     curl_ssl_msg="no      (--with-{ssl,gnutls,nss,polarssl,cyassl,axtls,winssl,darwinssl} )" | ||||
|     curl_ssl_msg="no      (--with-{ssl,gnutls,nss,polarssl,mbedtls,cyassl,axtls,winssl,darwinssl} )" | ||||
|     curl_ssh_msg="no      (--with-libssh2)" | ||||
|    curl_zlib_msg="no      (--with-zlib)" | ||||
|     curl_gss_msg="no      (--with-gssapi)" | ||||
| @@ -165,6 +167,7 @@ curl_verbose_msg="enabled (--disable-verbose)" | ||||
|    curl_rtsp_msg="no      (--enable-rtsp)" | ||||
|    curl_rtmp_msg="no      (--with-librtmp)" | ||||
|   curl_mtlnk_msg="no      (--with-libmetalink)" | ||||
|     curl_psl_msg="no      (--with-libpsl)" | ||||
|  | ||||
|     init_ssl_msg=${curl_ssl_msg} | ||||
|  | ||||
| @@ -1194,8 +1197,6 @@ if test x"$want_gss" = xyes; then | ||||
|   if test -z "$GSSAPI_INCS"; then | ||||
|      if test -n "$host_alias" -a -f "$GSSAPI_ROOT/bin/$host_alias-krb5-config"; then | ||||
|         GSSAPI_INCS=`$GSSAPI_ROOT/bin/$host_alias-krb5-config --cflags gssapi` | ||||
|      elif test -f "$GSSAPI_ROOT/bin/krb5-config"; then | ||||
|         GSSAPI_INCS=`$GSSAPI_ROOT/bin/krb5-config --cflags gssapi` | ||||
|      elif test -f "$KRB5CONFIG"; then | ||||
|         GSSAPI_INCS=`$KRB5CONFIG --cflags gssapi` | ||||
|      elif test "$GSSAPI_ROOT" != "yes"; then | ||||
| @@ -1398,6 +1399,24 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then | ||||
|   CLEANCPPFLAGS="$CPPFLAGS" | ||||
|   CLEANLIBS="$LIBS" | ||||
|  | ||||
|   dnl This is for Msys/Mingw | ||||
|   case $host in | ||||
|     *-*-msys* | *-*-mingw*) | ||||
|       AC_MSG_CHECKING([for gdi32]) | ||||
|       my_ac_save_LIBS=$LIBS | ||||
|       LIBS="-lgdi32 $LIBS" | ||||
|       AC_TRY_LINK([#include <windef.h> | ||||
|                    #include <wingdi.h>], | ||||
|                    [GdiFlush();], | ||||
|                    [ dnl worked! | ||||
|                    AC_MSG_RESULT([yes])], | ||||
|                    [ dnl failed, restore LIBS | ||||
|                    LIBS=$my_ac_save_LIBS | ||||
|                    AC_MSG_RESULT(no)] | ||||
|                   ) | ||||
|       ;; | ||||
|   esac | ||||
|  | ||||
|   case "$OPT_SSL" in | ||||
|   yes) | ||||
|     dnl --with-ssl (without path) used | ||||
| @@ -1476,31 +1495,13 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then | ||||
|   CPPFLAGS="$CPPFLAGS $SSL_CPPFLAGS" | ||||
|   LDFLAGS="$LDFLAGS $SSL_LDFLAGS" | ||||
|  | ||||
|   dnl This is for Msys/Mingw | ||||
|   case $host in | ||||
|     *-*-msys* | *-*-mingw*) | ||||
|       AC_MSG_CHECKING([for gdi32]) | ||||
|       my_ac_save_LIBS=$LIBS | ||||
|       LIBS="-lgdi32 $LIBS" | ||||
|       AC_TRY_LINK([#include <windef.h> | ||||
|                    #include <wingdi.h>], | ||||
|                    [GdiFlush();], | ||||
|                    [ dnl worked! | ||||
|                    AC_MSG_RESULT([yes])], | ||||
|                    [ dnl failed, restore LIBS | ||||
|                    LIBS=$my_ac_save_LIBS | ||||
|                    AC_MSG_RESULT(no)] | ||||
|                   ) | ||||
|       ;; | ||||
|   esac | ||||
|  | ||||
|   AC_CHECK_LIB(crypto, CRYPTO_lock,[ | ||||
|   AC_CHECK_LIB(crypto, HMAC_Update,[ | ||||
|      HAVECRYPTO="yes" | ||||
|      LIBS="-lcrypto $LIBS" | ||||
|      ],[ | ||||
|      LDFLAGS="$CLEANLDFLAGS -L$LIB_OPENSSL" | ||||
|      CPPFLAGS="$CLEANCPPFLAGS -I$PREFIX_OPENSSL/include/openssl -I$PREFIX_OPENSSL/include" | ||||
|      AC_CHECK_LIB(crypto, CRYPTO_add_lock,[ | ||||
|      AC_CHECK_LIB(crypto, HMAC_Init_ex,[ | ||||
|        HAVECRYPTO="yes" | ||||
|        LIBS="-lcrypto $LIBS"], [ | ||||
|        LDFLAGS="$CLEANLDFLAGS" | ||||
| @@ -1510,6 +1511,46 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then | ||||
|     ]) | ||||
|  | ||||
|  | ||||
|   if test X"$HAVECRYPTO" = X"yes"; then | ||||
|      AC_MSG_CHECKING([OpenSSL linking without -ldl]) | ||||
|      saved_libs=$LIBS | ||||
|      AC_TRY_LINK( | ||||
|         [ | ||||
|           #include <openssl/evp.h> | ||||
|         ], | ||||
|         [ | ||||
|           SSLeay_add_all_algorithms(); | ||||
|         ], | ||||
|         [ | ||||
|           AC_MSG_RESULT(yes) | ||||
|           LIBS="$saved_libs" | ||||
|         ], | ||||
|         [ | ||||
|           AC_MSG_RESULT(no) | ||||
|           AC_MSG_CHECKING([OpenSSL linking with -ldl]) | ||||
|           LIBS="-ldl $LIBS" | ||||
|           AC_TRY_LINK( | ||||
|           [ | ||||
|             #include <openssl/evp.h> | ||||
|           ], | ||||
|           [ | ||||
|             SSLeay_add_all_algorithms(); | ||||
|           ], | ||||
|           [ | ||||
|             AC_MSG_RESULT(yes) | ||||
|             LIBS="$saved_libs -ldl" | ||||
|           ], | ||||
|           [ | ||||
|             AC_MSG_RESULT(no) | ||||
|             LIBS="$saved_libs" | ||||
|           ] | ||||
|           ) | ||||
|  | ||||
|         ] | ||||
|      ) | ||||
|  | ||||
|   fi | ||||
|  | ||||
|   if test X"$HAVECRYPTO" = X"yes"; then | ||||
|     dnl This is only reasonable to do if crypto actually is there: check for | ||||
|     dnl SSL libs NOTE: it is important to do this AFTER the crypto lib | ||||
| @@ -1581,7 +1622,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then | ||||
|     dnl Older versions of Cyassl (some time before 2.9.4) don't have | ||||
|     dnl SSL_get_shutdown (but this check won't actually detect it there | ||||
|     dnl as it's a macro that needs the header files be included) | ||||
|     dnl BoringSSL doesn't have DES_set_odd_parity | ||||
|     dnl BoringSSL didn't have DES_set_odd_parity for a while but now it is | ||||
|     dnl back again. | ||||
|  | ||||
|     AC_CHECK_FUNCS( RAND_status \ | ||||
|                     RAND_screen \ | ||||
| @@ -1593,14 +1635,22 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then | ||||
|                     DES_set_odd_parity ) | ||||
|  | ||||
|     AC_MSG_CHECKING([for BoringSSL]) | ||||
|     if test "x$ac_cv_func_DES_set_odd_parity" != "xyes"; then | ||||
|       curl_ssl_msg="enabled (BoringSSL)" | ||||
|       AC_DEFINE_UNQUOTED(HAVE_BORINGSSL, 1, | ||||
|         [Define to 1 if using BoringSSL.]) | ||||
|       AC_MSG_RESULT([yes]) | ||||
|     else | ||||
|       AC_MSG_RESULT([no]) | ||||
|     fi | ||||
|     AC_COMPILE_IFELSE([ | ||||
|         AC_LANG_PROGRAM([[ | ||||
|                 #include <openssl/base.h> | ||||
|                 ]],[[ | ||||
|                 #ifndef OPENSSL_IS_BORINGSSL | ||||
|                 #error not boringssl | ||||
|                 #endif | ||||
|        ]]) | ||||
|     ],[ | ||||
|         AC_MSG_RESULT([yes]) | ||||
|         AC_DEFINE_UNQUOTED(HAVE_BORINGSSL, 1, | ||||
|                            [Define to 1 if using BoringSSL.]) | ||||
|     ],[ | ||||
|         AC_MSG_RESULT([no]) | ||||
|     ]) | ||||
|  | ||||
|     AC_MSG_CHECKING([for libressl]) | ||||
|     AC_COMPILE_IFELSE([ | ||||
|       AC_LANG_PROGRAM([[ | ||||
| @@ -1788,6 +1838,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then | ||||
|             AC_MSG_NOTICE([Added $gtlslib to LD_LIBRARY_PATH]) | ||||
|           fi | ||||
|         fi | ||||
|         AC_CHECK_FUNCS(gnutls_certificate_set_x509_key_file2) | ||||
|       fi | ||||
|  | ||||
|     fi | ||||
| @@ -1925,6 +1976,93 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then | ||||
|  | ||||
| fi | ||||
|  | ||||
| dnl ---------------------------------------------------- | ||||
| dnl check for mbedTLS | ||||
| dnl ---------------------------------------------------- | ||||
|  | ||||
| OPT_MBEDTLS=no | ||||
|  | ||||
| _cppflags=$CPPFLAGS | ||||
| _ldflags=$LDFLAGS | ||||
| AC_ARG_WITH(mbedtls,dnl | ||||
| AC_HELP_STRING([--with-mbedtls=PATH],[where to look for mbedTLS, PATH points to the installation root]) | ||||
| AC_HELP_STRING([--without-mbedtls], [disable mbedTLS detection]), | ||||
|   OPT_MBEDTLS=$withval) | ||||
|  | ||||
| if test "$curl_ssl_msg" = "$init_ssl_msg"; then | ||||
|  | ||||
|   if test X"$OPT_MBEDTLS" != Xno; then | ||||
|  | ||||
|     if test "$OPT_MBEDTLS" = "yes"; then | ||||
|       OPT_MBEDTLS="" | ||||
|     fi | ||||
|  | ||||
|     if test -z "$OPT_MBEDTLS" ; then | ||||
|       dnl check for lib first without setting any new path | ||||
|  | ||||
|       AC_CHECK_LIB(mbedtls, mbedtls_havege_init, | ||||
|       dnl libmbedtls found, set the variable | ||||
|        [ | ||||
|          AC_DEFINE(USE_MBEDTLS, 1, [if mbedTLS is enabled]) | ||||
|          AC_SUBST(USE_MBEDTLS, [1]) | ||||
|          MBEDTLS_ENABLED=1 | ||||
|          USE_MBEDTLS="yes" | ||||
|          curl_ssl_msg="enabled (mbedTLS)" | ||||
|         ], [], -lmbedx509 -lmbedcrypto) | ||||
|     fi | ||||
|  | ||||
|     addld="" | ||||
|     addlib="" | ||||
|     addcflags="" | ||||
|     mbedtlslib="" | ||||
|  | ||||
|     if test "x$USE_MBEDTLS" != "xyes"; then | ||||
|       dnl add the path and test again | ||||
|       addld=-L$OPT_MBEDTLS/lib$libsuff | ||||
|       addcflags=-I$OPT_MBEDTLS/include | ||||
|       mbedtlslib=$OPT_MBEDTLS/lib$libsuff | ||||
|  | ||||
|       LDFLAGS="$LDFLAGS $addld" | ||||
|       if test "$addcflags" != "-I/usr/include"; then | ||||
|          CPPFLAGS="$CPPFLAGS $addcflags" | ||||
|       fi | ||||
|  | ||||
|       AC_CHECK_LIB(mbedtls, mbedtls_ssl_init, | ||||
|        [ | ||||
|        AC_DEFINE(USE_MBEDTLS, 1, [if mbedTLS is enabled]) | ||||
|        AC_SUBST(USE_MBEDTLS, [1]) | ||||
|        MBEDTLS_ENABLED=1 | ||||
|        USE_MBEDTLS="yes" | ||||
|        curl_ssl_msg="enabled (mbedTLS)" | ||||
|        ], | ||||
|        [ | ||||
|          CPPFLAGS=$_cppflags | ||||
|          LDFLAGS=$_ldflags | ||||
|        ], -lmbedx509 -lmbedcrypto) | ||||
|     fi | ||||
|  | ||||
|     if test "x$USE_MBEDTLS" = "xyes"; then | ||||
|       AC_MSG_NOTICE([detected mbedTLS]) | ||||
|  | ||||
|       LIBS="-lmbedtls -lmbedx509 -lmbedcrypto $LIBS" | ||||
|  | ||||
|       if test -n "$mbedtlslib"; then | ||||
|         dnl when shared libs were found in a path that the run-time | ||||
|         dnl linker doesn't search through, we need to add it to | ||||
|         dnl LD_LIBRARY_PATH to prevent further configure tests to fail | ||||
|         dnl due to this | ||||
|         if test "x$cross_compiling" != "xyes"; then | ||||
|           LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$mbedtlslib" | ||||
|           export LD_LIBRARY_PATH | ||||
|           AC_MSG_NOTICE([Added $mbedtlslib to LD_LIBRARY_PATH]) | ||||
|         fi | ||||
|       fi | ||||
|     fi | ||||
|  | ||||
|   fi dnl mbedTLS not disabled | ||||
|  | ||||
| fi | ||||
|  | ||||
| dnl ---------------------------------------------------- | ||||
| dnl check for CyaSSL | ||||
| dnl ---------------------------------------------------- | ||||
| @@ -2249,7 +2387,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then | ||||
|   fi | ||||
| fi | ||||
|  | ||||
| if test "x$OPENSSL_ENABLED$GNUTLS_ENABLED$NSS_ENABLED$POLARSSL_ENABLED$AXTLS_ENABLED$CYASSL_ENABLED$WINSSL_ENABLED$DARWINSSL_ENABLED" = "x"; then | ||||
| if test "x$OPENSSL_ENABLED$GNUTLS_ENABLED$NSS_ENABLED$POLARSSL_ENABLED$MBEDTLS_ENABLED$AXTLS_ENABLED$CYASSL_ENABLED$WINSSL_ENABLED$DARWINSSL_ENABLED" = "x"; then | ||||
|   AC_MSG_WARN([SSL disabled, you will not be able to use HTTPS, FTPS, NTLM and more.]) | ||||
|   AC_MSG_WARN([Use --with-ssl, --with-gnutls, --with-polarssl, --with-cyassl, --with-nss, --with-axtls, --with-winssl, or --with-darwinssl to address this.]) | ||||
| else | ||||
| @@ -2264,6 +2402,27 @@ dnl ********************************************************************** | ||||
|  | ||||
| CURL_CHECK_CA_BUNDLE | ||||
|  | ||||
| dnl ********************************************************************** | ||||
| dnl Check for libpsl | ||||
| dnl ********************************************************************** | ||||
|  | ||||
| AC_ARG_WITH(libpsl, | ||||
|            AS_HELP_STRING([--without-libpsl], | ||||
|            [disable support for libpsl cookie checking]), | ||||
|            with_libpsl=$withval, | ||||
|            with_libpsl=yes) | ||||
| if test $with_libpsl != "no"; then | ||||
|   AC_SEARCH_LIBS(psl_builtin, psl, | ||||
|     [curl_psl_msg="yes"; | ||||
|      AC_DEFINE([USE_LIBPSL], [1], [PSL support enabled]) | ||||
|      ], | ||||
|     [curl_psl_msg="no      (libpsl not found)"; | ||||
|      AC_MSG_WARN([libpsl was not found]) | ||||
|      ] | ||||
|   ) | ||||
| fi | ||||
| AM_CONDITIONAL([USE_LIBPSL], [test "$curl_psl_msg" = "yes"]) | ||||
|  | ||||
| dnl ********************************************************************** | ||||
| dnl Check for libmetalink | ||||
| dnl ********************************************************************** | ||||
| @@ -2843,7 +3002,9 @@ if test X"$want_h2" != Xno; then | ||||
|     CPPFLAGS="$CPPFLAGS $CPP_H2" | ||||
|     LIBS="$LIB_H2 $LIBS" | ||||
|  | ||||
|     AC_CHECK_LIB(nghttp2, nghttp2_session_callbacks_set_send_callback, | ||||
|     # use nghttp2_option_set_no_recv_client_magic to require nghttp2 | ||||
|     # >= 1.0.0 | ||||
|     AC_CHECK_LIB(nghttp2, nghttp2_option_set_no_recv_client_magic, | ||||
|       [ | ||||
|        AC_CHECK_HEADERS(nghttp2/nghttp2.h, | ||||
|           curl_h2_msg="enabled (nghttp2)" | ||||
| @@ -2869,6 +3030,31 @@ if test X"$want_h2" != Xno; then | ||||
|  | ||||
| fi | ||||
|  | ||||
| dnl ********************************************************************** | ||||
| dnl Check for zsh completion path | ||||
| dnl ********************************************************************** | ||||
|  | ||||
| OPT_ZSH_FPATH=default | ||||
| AC_ARG_WITH(zsh-functions-dir, | ||||
| AC_HELP_STRING([--with-zsh-functions-dir=PATH],[Install zsh completions to PATH]) | ||||
| AC_HELP_STRING([--without-zsh-functions-dir],[Do not install zsh completions]), | ||||
|   [OPT_ZSH_FPATH=$withval]) | ||||
| case "$OPT_ZSH_FPATH" in | ||||
|   no) | ||||
|     dnl --without-zsh-functions-dir option used | ||||
|     ;; | ||||
|   default|yes) | ||||
|     dnl --with-zsh-functions-dir option used without path | ||||
|     ZSH_FUNCTIONS_DIR="$datarootdir/zsh/site-functions" | ||||
|     AC_SUBST(ZSH_FUNCTIONS_DIR) | ||||
|     ;; | ||||
|   *) | ||||
|     dnl --with-zsh-functions-dir option used with path | ||||
|     ZSH_FUNCTIONS_DIR="$withval" | ||||
|     AC_SUBST(ZSH_FUNCTIONS_DIR) | ||||
|     ;; | ||||
| esac | ||||
|  | ||||
| dnl ********************************************************************** | ||||
| dnl Back to "normal" configuring | ||||
| dnl ********************************************************************** | ||||
| @@ -3217,7 +3403,7 @@ if test "x$want_thres" = xyes && test "x$want_ares" = xyes; then | ||||
| [Options --enable-threaded-resolver and --enable-ares are mutually exclusive]) | ||||
| fi | ||||
|  | ||||
| if test "$want_thres" = "yes"; then | ||||
| if test "$want_thres" = "yes" && test "$dontwant_rt" = "no"; then | ||||
|   AC_CHECK_HEADER(pthread.h, | ||||
|     [ AC_DEFINE(HAVE_PTHREAD_H, 1, [if you have <pthread.h>]) | ||||
|       save_CFLAGS="$CFLAGS" | ||||
| @@ -3485,6 +3671,10 @@ if test "x$HAVE_GSSAPI" = "x1"; then | ||||
|   SUPPORT_FEATURES="$SUPPORT_FEATURES GSS-API" | ||||
| fi | ||||
|  | ||||
| if test "x$curl_psl_msg" = "xyes"; then | ||||
|   SUPPORT_FEATURES="$SUPPORT_FEATURES PSL" | ||||
| fi | ||||
|  | ||||
| if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" -a \ | ||||
|     \( "x$HAVE_GSSAPI" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \); then | ||||
|   SUPPORT_FEATURES="$SUPPORT_FEATURES SPNEGO" | ||||
| @@ -3632,6 +3822,7 @@ AC_CONFIG_FILES([Makefile \ | ||||
|            include/curl/Makefile \ | ||||
|            src/Makefile \ | ||||
|            lib/Makefile \ | ||||
|            scripts/Makefile \ | ||||
|            lib/libcurl.vers \ | ||||
|            tests/Makefile \ | ||||
|            tests/certs/Makefile \ | ||||
| @@ -3690,6 +3881,7 @@ AC_MSG_NOTICE([Configured to build curl/libcurl: | ||||
|   RTSP support:     ${curl_rtsp_msg} | ||||
|   RTMP support:     ${curl_rtmp_msg} | ||||
|   metalink support: ${curl_mtlnk_msg} | ||||
|   PSL support:      ${curl_psl_msg} | ||||
|   HTTP2 support:    ${curl_h2_msg} | ||||
|   Protocols:        ${SUPPORT_PROTOCOLS} | ||||
| ]) | ||||
|   | ||||
| @@ -50,7 +50,7 @@ Cocoa | ||||
| D | ||||
|  | ||||
|   Written by Kenneth Bogert | ||||
|   http://curl.haxx.se/libcurl/d/ | ||||
|   http://dlang.org/library/std/net/curl.html | ||||
|  | ||||
| Dylan | ||||
|  | ||||
| @@ -60,7 +60,7 @@ Dylan | ||||
| Eiffel | ||||
|  | ||||
|   Written by Eiffel Software | ||||
|   http://curl.haxx.se/libcurl/eiffel/ | ||||
|   https://room.eiffel.com/library/curl | ||||
|  | ||||
| Euphoria | ||||
|  | ||||
| @@ -78,7 +78,7 @@ Ferite | ||||
|  | ||||
| Gambas | ||||
|  | ||||
|   http://gambas.sourceforge.net | ||||
|   http://gambas.sourceforge.net/ | ||||
|  | ||||
| glib/GTK+ | ||||
|  | ||||
| @@ -102,8 +102,7 @@ Haskell | ||||
|  | ||||
| Java | ||||
|  | ||||
|   Maintained by [blank] | ||||
|   http://curl.haxx.se/libcurl/java/ | ||||
|   https://github.com/pjlegato/curl-java | ||||
|  | ||||
| Julia | ||||
|  | ||||
| @@ -131,7 +130,7 @@ Mono | ||||
| .NET | ||||
|  | ||||
|   libcurl-net by Jeffrey Phillips | ||||
|   http://sourceforge.net/projects/libcurl-net/ | ||||
|   https://sourceforge.net/projects/libcurl-net/ | ||||
|  | ||||
| node.js | ||||
|  | ||||
| @@ -146,7 +145,7 @@ Object-Pascal | ||||
| O'Caml | ||||
|  | ||||
|   Written by Lars Nilsson | ||||
|   http://sourceforge.net/projects/ocurl/ | ||||
|   https://sourceforge.net/projects/ocurl/ | ||||
|  | ||||
| Pascal | ||||
|  | ||||
| @@ -155,13 +154,13 @@ Pascal | ||||
|  | ||||
| Perl | ||||
|  | ||||
|   Maintained by Cris Bailiff | ||||
|   http://curl.haxx.se/libcurl/perl/ | ||||
|   Maintained by Cris Bailiff and Bálint Szilakszi | ||||
|   https://github.com/szbalint/WWW--Curl | ||||
|  | ||||
| PHP | ||||
|  | ||||
|   Written by Sterling Hughes | ||||
|   http://curl.haxx.se/libcurl/php/ | ||||
|   https://php.net/curl | ||||
|  | ||||
| PostgreSQL | ||||
|  | ||||
| @@ -175,8 +174,7 @@ Python | ||||
|  | ||||
| R | ||||
|  | ||||
|   RCurl by Duncan Temple Lang | ||||
|   http://www.omegahat.org/RCurl/ | ||||
|   http://cran.r-project.org/package=curl | ||||
|  | ||||
| Rexx | ||||
|  | ||||
| @@ -197,10 +195,15 @@ Ruby | ||||
|   ruby-curl-multi - written by Kristjan Petursson and Keith Rarick | ||||
|   http://curl-multi.rubyforge.org/ | ||||
|  | ||||
| Rust | ||||
|  | ||||
|   curl-rust - by Carl Lerche | ||||
|   https://github.com/carllerche/curl-rust | ||||
|  | ||||
| Scheme | ||||
|  | ||||
|   Bigloo binding by Kirill Lisovsky | ||||
|   http://curl.haxx.se/libcurl/scheme/ | ||||
|   http://www.metapaper.net/lisovsky/web/curl/ | ||||
|  | ||||
| S-Lang | ||||
|  | ||||
| @@ -230,7 +233,7 @@ Tcl | ||||
| Visual Basic | ||||
|  | ||||
|   libcurl-vb by Jeffrey Phillips | ||||
|   http://sourceforge.net/projects/libcurl-vb/ | ||||
|   https://sourceforge.net/projects/libcurl-vb/ | ||||
|  | ||||
| Visual Foxpro | ||||
|  | ||||
| @@ -250,3 +253,8 @@ XBLite | ||||
|  | ||||
|   Written by David Szafranski | ||||
|   http://perso.wanadoo.fr/xblite/libraries.html | ||||
|  | ||||
| Xojo | ||||
|  | ||||
|   Written by Andrew Lambert | ||||
|   https://github.com/charonn0/RB-libcURL | ||||
|   | ||||
							
								
								
									
										32
									
								
								docs/CODE_OF_CONDUCT.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								docs/CODE_OF_CONDUCT.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| Contributor Code of Conduct | ||||
| =========================== | ||||
|  | ||||
| As contributors and maintainers of this project, we pledge to respect all | ||||
| people who contribute through reporting issues, posting feature requests, | ||||
| updating documentation, submitting pull requests or patches, and other | ||||
| activities. | ||||
|  | ||||
| We are committed to making participation in this project a harassment-free | ||||
| experience for everyone, regardless of level of experience, gender, gender | ||||
| identity and expression, sexual orientation, disability, personal appearance, | ||||
| body size, race, ethnicity, age, or religion. | ||||
|  | ||||
| Examples of unacceptable behavior by participants include the use of sexual | ||||
| language or imagery, derogatory comments or personal attacks, trolling, public | ||||
| or private harassment, insults, or other unprofessional conduct. | ||||
|  | ||||
| Project maintainers have the right and responsibility to remove, edit, or | ||||
| reject comments, commits, code, wiki edits, issues, and other contributions | ||||
| that are not aligned to this Code of Conduct. Project maintainers who do not | ||||
| follow the Code of Conduct may be removed from the project team. | ||||
|  | ||||
| This code of conduct applies both within project spaces and in public spaces | ||||
| when an individual is representing the project or its community. | ||||
|  | ||||
| Instances of abusive, harassing, or otherwise unacceptable behavior may be | ||||
| reported by opening an issue or contacting one or more of the project | ||||
| maintainers. | ||||
|  | ||||
| This Code of Conduct is adapted from the [Contributor | ||||
| Covenant](http://contributor-covenant.org), version 1.1.0, available at | ||||
| [http://contributor-covenant.org/version/1/1/0/](http://contributor-covenant.org/version/1/1/0/) | ||||
| @@ -203,7 +203,7 @@ | ||||
|  | ||||
|  You need to first checkout the repository: | ||||
|  | ||||
|      git clone git://github.com/bagder/curl.git | ||||
|      git clone https://github.com/bagder/curl.git | ||||
|  | ||||
|  You then proceed and edit all the files you like and you commit them to your | ||||
|  local repository: | ||||
| @@ -245,8 +245,8 @@ | ||||
|  | ||||
|  For unix-like operating systems: | ||||
|  | ||||
|      http://www.gnu.org/software/patch/patch.html | ||||
|      http://www.gnu.org/directory/diffutils.html | ||||
|      https://savannah.gnu.org/projects/patch/ | ||||
|      https://www.gnu.org/software/diffutils/ | ||||
|  | ||||
|  For Windows: | ||||
|  | ||||
|   | ||||
| @@ -1,176 +0,0 @@ | ||||
|   Date: February 11, 2007 | ||||
|   Author: Daniel Stenberg <daniel@haxx.se> | ||||
|   URL: http://curl.haxx.se/legal/distro-dilemma.html | ||||
|  | ||||
| Condition | ||||
|  | ||||
|  This document is written to describe the situation as it is right now. | ||||
|  libcurl 7.16.1 is currently the latest version available. Things may of | ||||
|  course change in the future. | ||||
|  | ||||
|  This document reflects my view and understanding of these things. Please tell | ||||
|  me where and how you think I'm wrong, and I'll try to correct my mistakes. | ||||
|  | ||||
| Background | ||||
|  | ||||
|  The Free Software Foundation has deemed the Original BSD license[1] to be | ||||
|  "incompatible"[2] with GPL[3]. I'd rather say it is the other way around, but | ||||
|  the point is the same: if you distribute a binary version of a GPL program, | ||||
|  it MUST NOT be linked with any Original BSD-licensed parts or libraries. | ||||
|  Doing so will violate the GPL license. For a long time, very many GPL | ||||
|  licensed programs have avoided this license mess by adding an exception[8] to | ||||
|  their license. And many others have just closed their eyes for this problem. | ||||
|  | ||||
|  libcurl is MIT-style[4] licensed - how on earth did this dilemma fall onto | ||||
|  our plates? | ||||
|  | ||||
|  libcurl is only a little library. libcurl can be built to use OpenSSL for its | ||||
|  SSL/TLS capabilities. OpenSSL is basically Original BSD licensed[5]. | ||||
|  | ||||
|  If libcurl built to use OpenSSL is used by a GPL-licensed application and you | ||||
|  decide to distribute a binary version of it (Linux distros - for example - | ||||
|  tend to), you have a clash. GPL vs Original BSD. | ||||
|  | ||||
|  This dilemma is not libcurl-specific nor is it specific to any particular | ||||
|  Linux distro. (This article mentions and refers to Debian several times, but | ||||
|  only because Debian seems to be the only Linux distro to have faced this | ||||
|  issue yet since no other distro is shipping libcurl built with two SSL | ||||
|  libraries.) | ||||
|  | ||||
| Part of the Operating System | ||||
|  | ||||
|  This would not be a problem if the used lib would be considered part of the | ||||
|  underlying operating system, as then the GPL license has an exception | ||||
|  clause[6] that allows applications to use such libs without having to be | ||||
|  allowed to distribute it or its sources. Possibly some distros will claim | ||||
|  that OpenSSL is part of their operating system. | ||||
|  | ||||
|  Debian does however not take this stance and has officially(?) claimed that | ||||
|  OpenSSL is not a required part of the Debian operating system | ||||
|  | ||||
|  Some people claim that this paragraph cannot be exploited this way by a Linux | ||||
|  distro, but I am not a lawyer and that is a discussion left outside of this | ||||
|  document. | ||||
|  | ||||
| GnuTLS | ||||
|  | ||||
|  Since May 2005 libcurl can get built to use GnuTLS instead of OpenSSL. GnuTLS | ||||
|  is an LGPL[7] licensed library that offers a matching set of features as | ||||
|  OpenSSL does. Now, you can build and distribute an TLS/SSL capable libcurl | ||||
|  without including any Original BSD licensed code. | ||||
|  | ||||
|  I believe Debian is the first (only?) distro that provides libcurl/GnuTLS | ||||
|  packages. | ||||
|  | ||||
| yassl | ||||
|  | ||||
|  libcurl can get also get built to use yassl for the TLS/SSL layer. yassl is a | ||||
|  GPL[3] licensed library. | ||||
|  | ||||
|  | ||||
| GnuTLS vs OpenSSL vs yassl | ||||
|  | ||||
|  While these three libraries offer similar features, they are not equal. | ||||
|  libcurl does not (yet) offer a standardized stable ABI if you decide to | ||||
|  switch from using libcurl-openssl to libcurl-gnutls or vice-versa. The GnuTLS | ||||
|  and yassl support is very recent in libcurl and it has not been tested nor | ||||
|  used very extensively, while the OpenSSL equivalent code has been used and | ||||
|  thus matured since 1999. | ||||
|  | ||||
|  GnuTLS | ||||
|    - LGPL licensed | ||||
|    - supports SRP | ||||
|    - lacks SSLv2 support | ||||
|    - lacks MD2 support (used by at least some CA certs) | ||||
|    - lacks the crypto functions libcurl uses for NTLM | ||||
|  | ||||
|  OpenSSL | ||||
|    - Original BSD licensed | ||||
|    - lacks SRP | ||||
|    - supports SSLv2 | ||||
|    - older and more widely used | ||||
|    - provides crypto functions libcurl uses for NTLM | ||||
|    - libcurl can do non-blocking connects with it in 7.15.4 and later | ||||
|  | ||||
|  yassl | ||||
|    - GPL licensed | ||||
|    - much untested and unproven in the real work by (lib)curl users so we don't | ||||
|      know a lot about restrictions or benefits from using this | ||||
|  | ||||
| The Better License, Original BSD, GPL or LGPL? | ||||
|  | ||||
|  It isn't obvious or without debate to any objective interested party that | ||||
|  either of these licenses are the "better" or even the "preferred" one in a | ||||
|  generic situation. | ||||
|  | ||||
|  Instead, I think we should accept the fact that the SSL/TLS libraries and | ||||
|  their different licenses will fit different applications and their authors | ||||
|  differently depending on the applications' licenses and their general usage | ||||
|  pattern (considering how GPL and LGPL libraries for example can be burdensome | ||||
|  for embedded systems usage). | ||||
|  | ||||
|  In Debian land, there seems to be a common opinion that LGPL is "maximally | ||||
|  compatible" with apps while Original BSD is not. Like this: | ||||
|  | ||||
|         http://lists.debian.org/debian-devel/2005/09/msg01417.html | ||||
|  | ||||
| More SSL Libraries | ||||
|  | ||||
|  In libcurl, there's no stopping us here. There are more Open Source/Free | ||||
|  SSL/TLS libraries out there and we would very much like to support them as | ||||
|  well, to offer application authors an even wider scope of choice. | ||||
|  | ||||
| Application Angle of this Problem | ||||
|  | ||||
|  libcurl is built to use one SSL/TLS library. It uses a single fixed name (by | ||||
|  default) on the built/created lib file, and applications are built/linked to | ||||
|  use that single lib. Replacing one libcurl instance with another one that | ||||
|  uses the other SSL/TLS library might break one or more applications (due to | ||||
|  ABI differences and/or different feature set). You want your application to | ||||
|  use the libcurl it was built for. | ||||
|  | ||||
| Project cURL Angle of this Problem | ||||
|  | ||||
|  We distribute libcurl and everyone may build libcurl with either library at | ||||
|  their choice. This problem is not directly a problem of ours. It merely | ||||
|  affects users - GPL application authors only - of our lib as it comes | ||||
|  included and delivered on some distros. | ||||
|  | ||||
|  libcurl has different ABI when built with different SSL/TLS libraries due to | ||||
|  these reasons: | ||||
|  | ||||
|  1. No one has worked on fixing this. The mutex/lock callbacks should be set | ||||
|     with a generic libcurl function that should use the proper underlying | ||||
|     functions. | ||||
|  | ||||
|  2. The CURLOPT_SSL_CTX_FUNCTION option is not possible to "emulate" on GnuTLS | ||||
|     but simply requires OpenSSL. | ||||
|  | ||||
|  3. There might be some other subtle differences just because nobody has yet | ||||
|     tried to make a fixed ABI like this. | ||||
|  | ||||
| Distro Angle of this Problem | ||||
|  | ||||
|  To my knowledge there is only one distro that ships libcurl built with either | ||||
|  OpenSSL or GnuTLS. | ||||
|  | ||||
|  Debian Linux is now (since mid September 2005) providing two different | ||||
|  libcurl packages, one for libcurl built with OpenSSL and one built with | ||||
|  GnuTLS. They use different .so names and can this both be installed in a | ||||
|  single system simultaneously. This has been said to be a transitional system | ||||
|  not desired to keep in the long run. | ||||
|  | ||||
| Footnotes | ||||
|  | ||||
|  [1] = http://www.xfree86.org/3.3.6/COPYRIGHT2.html#6 | ||||
|  [2] = http://www.fsf.org/licensing/essays/bsd.html | ||||
|  [3] = http://www.fsf.org/licensing/licenses/gpl.html | ||||
|  [4] = http://curl.haxx.se/docs/copyright.html | ||||
|  [5] = http://www.openssl.org/source/license.html | ||||
|  [6] = http://www.fsf.org/licensing/licenses/gpl.html end of section 3 | ||||
|  [7] = http://www.fsf.org/licensing/licenses/lgpl.html | ||||
|  [8] = http://en.wikipedia.org/wiki/OpenSSL_exception | ||||
|  | ||||
| Feedback/Updates provided by | ||||
|  | ||||
|  Eric Cooper | ||||
							
								
								
									
										38
									
								
								docs/FAQ
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								docs/FAQ
									
									
									
									
									
								
							| @@ -21,6 +21,7 @@ FAQ | ||||
|   1.12 I have a problem who can I chat with? | ||||
|   1.13 curl's ECCN number? | ||||
|   1.14 How do I submit my patch? | ||||
|   1.15 How do I port libcurl to my OS? | ||||
|  | ||||
|  2. Install Related Problems | ||||
|   2.1 configure doesn't find OpenSSL even when it is installed | ||||
| @@ -351,7 +352,7 @@ FAQ | ||||
|   cryptography. When doing so, the Export Control Classification Number (ECCN) | ||||
|   is used to identify the level of export control etc. | ||||
|  | ||||
|   ASF gives a good explanation at http://www.apache.org/dev/crypto.html | ||||
|   ASF gives a good explanation at https://www.apache.org/dev/crypto.html | ||||
|  | ||||
|   We believe curl's number might be ECCN 5D002, another possibility is | ||||
|   5D992. It seems necessary to write them, asking to confirm. | ||||
| @@ -380,6 +381,19 @@ FAQ | ||||
|  | ||||
|   Lots of more details are found in the CONTRIBUTE and INTERNALS docs. | ||||
|  | ||||
|   1.15 How do I port libcurl to my OS? | ||||
|  | ||||
|   Here's a rough step-by-step: | ||||
|  | ||||
|   1. copy a suitable lib/config-*.h file as a start to lib/config-[youros].h | ||||
|  | ||||
|   2. edit lib/config-[youros].h to match your OS and setup | ||||
|  | ||||
|   3. edit lib/curl_setup.h to include config-[youros].h when your OS is | ||||
|      detected by the preprocessor, in the style others already exist | ||||
|  | ||||
|   4. compile lib/*.c and make them into a library | ||||
|  | ||||
|  | ||||
| 2. Install Related Problems | ||||
|  | ||||
| @@ -1028,7 +1042,7 @@ FAQ | ||||
|   timeout is set. | ||||
|  | ||||
|   See option TcpMaxConnectRetransmissions on this page: | ||||
|   http://support.microsoft.com/?scid=kb%3Ben-us%3B175523&x=6&y=7 | ||||
|   https://support.microsoft.com/en-us/kb/175523/en-us | ||||
|  | ||||
|   Also, even on non-Windows systems there may run a firewall or anti-virus | ||||
|   software or similar that accepts the connection but does not actually do | ||||
| @@ -1045,7 +1059,7 @@ FAQ | ||||
|   You'll find that even if D:\blah.txt does exist, cURL returns a 'file | ||||
|   not found' error. | ||||
|  | ||||
|   According to RFC 1738 (http://www.faqs.org/rfcs/rfc1738.html), | ||||
|   According to RFC 1738 (https://www.ietf.org/rfc/rfc1738.txt), | ||||
|   file:// URLs must contain a host component, but it is ignored by | ||||
|   most implementations. In the above example, 'D:' is treated as the | ||||
|   host component, and is taken away. Thus, cURL tries to open '/blah.txt'. | ||||
| @@ -1149,13 +1163,13 @@ FAQ | ||||
|   If you use a OpenSSL-powered libcurl in a multi-threaded environment, you | ||||
|   need to provide one or two locking functions: | ||||
|  | ||||
|     http://www.openssl.org/docs/crypto/threads.html | ||||
|     https://www.openssl.org/docs/crypto/threads.html | ||||
|  | ||||
|   If you use a GnuTLS-powered libcurl in a multi-threaded environment, you | ||||
|   need to provide locking function(s) for libgcrypt (which is used by GnuTLS | ||||
|   for the crypto functions). | ||||
|  | ||||
|     http://www.gnu.org/software/gnutls/manual/html_node/Multi_002dthreaded-applications.html | ||||
|     https://web.archive.org/web/20111103083330/http://www.gnu.org/software/gnutls/manual/html_node/Multi_002dthreaded-applications.html | ||||
|  | ||||
|   No special locking is needed with a NSS-powered libcurl. NSS is thread-safe. | ||||
|  | ||||
| @@ -1331,7 +1345,7 @@ FAQ | ||||
|   Also note that on many networks NATs or other IP-munging techniques are used | ||||
|   that makes you see and use a different IP address locally than what the | ||||
|   remote server will see you coming from. You may also consider using | ||||
|   http://www.torproject.org . | ||||
|   https://www.torproject.org/ . | ||||
|  | ||||
|   5.13 How do I stop an ongoing transfer? | ||||
|  | ||||
| @@ -1522,9 +1536,7 @@ FAQ | ||||
|  | ||||
|   7.2 Who wrote PHP/CURL? | ||||
|  | ||||
|   PHP/CURL is a module that comes with the regular PHP package. It depends and | ||||
|   uses libcurl, so you need to have libcurl installed properly first before | ||||
|   PHP/CURL can be used. PHP/CURL was initially written by Sterling Hughes. | ||||
|   PHP/CURL was initially written by Sterling Hughes. | ||||
|  | ||||
|   7.3 Can I perform multiple requests using the same handle? | ||||
|  | ||||
| @@ -1533,4 +1545,10 @@ FAQ | ||||
|   unknown to me). | ||||
|  | ||||
|   After a transfer, you just set new options in the handle and make another | ||||
|   transfer. This will make libcurl to re-use the same connection if it can. | ||||
|   transfer. This will make libcurl re-use the same connection if it can. | ||||
|  | ||||
|   7.4 Does PHP/CURL have dependencies? | ||||
|  | ||||
|   PHP/CURL is a module that comes with the regular PHP package. It depends on | ||||
|   and uses libcurl, so you need to have libcurl installed properly before | ||||
|   PHP/CURL can be used. | ||||
|   | ||||
| @@ -36,7 +36,7 @@ HTTP Cookies | ||||
|   For a very long time, the only spec explaining how to use cookies was the | ||||
|   original Netscape spec from 1994: http://curl.haxx.se/rfc/cookie_spec.html | ||||
|  | ||||
|   In 2011, RFC6265 (http://www.ietf.org/rfc/rfc6265.txt) was finally published | ||||
|   In 2011, RFC6265 (https://www.ietf.org/rfc/rfc6265.txt) was finally published | ||||
|   and details how cookies work within HTTP. | ||||
|  | ||||
|   1.2 Cookies saved to disk | ||||
|   | ||||
							
								
								
									
										107
									
								
								docs/HTTP2.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								docs/HTTP2.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,107 @@ | ||||
| HTTP/2 with curl | ||||
| ================ | ||||
|  | ||||
| [HTTP/2 Spec](https://www.rfc-editor.org/rfc/rfc7540.txt) | ||||
| [http2 explained](http://daniel.haxx.se/http2/) | ||||
|  | ||||
| Build prerequisites | ||||
| ------------------- | ||||
|   - nghttp2 | ||||
|   - OpenSSL, NSS, GnutTLS or PolarSSL with a new enough version | ||||
|  | ||||
| [nghttp2](https://nghttp2.org/) | ||||
| ------------------------------- | ||||
|  | ||||
| libcurl uses this 3rd party library for the low level protocol handling | ||||
| parts. The reason for this is that HTTP/2 is much more complex at that layer | ||||
| than HTTP/1.1 (which we implement on our own) and that nghttp2 is an already | ||||
| existing and well functional library. | ||||
|  | ||||
| We require at least version 1.0.0. | ||||
|  | ||||
| Over an http:// URL | ||||
| ------------------- | ||||
|  | ||||
| If `CURLOPT_HTTP_VERSION` is set to `CURL_HTTP_VERSION_2_0`, libcurl will | ||||
| include an upgrade header in the initial request to the host to allow | ||||
| upgrading to HTTP/2. | ||||
|  | ||||
| Possibly we can later introduce an option that will cause libcurl to fail if | ||||
| not possible to upgrade. Possibly we introduce an option that makes libcurl | ||||
| use HTTP/2 at once over http:// | ||||
|  | ||||
| Over an https:// URL | ||||
| -------------------- | ||||
|  | ||||
| If `CURLOPT_HTTP_VERSION` is set to `CURL_HTTP_VERSION_2_0`, libcurl will use | ||||
| ALPN (or NPN) to negotiate which protocol to continue with. Possibly introduce | ||||
| an option that will cause libcurl to fail if not possible to use HTTP/2. | ||||
| Consider options to explicitly disable ALPN and/or NPN. | ||||
|  | ||||
| ALPN is the TLS extension that HTTP/2 is expected to use. The NPN extension is | ||||
| for a similar purpose, was made prior to ALPN and is used for SPDY so early | ||||
| HTTP/2 servers are implemented using NPN before ALPN support is widespread. | ||||
|  | ||||
| SSL libs | ||||
| -------- | ||||
|  | ||||
| The challenge is the ALPN and NPN support and all our different SSL | ||||
| backends. You may need a fairly updated SSL library version for it to | ||||
| provide the necessary TLS features. Right now we support: | ||||
|  | ||||
|   - OpenSSL:  ALPN and NPN | ||||
|   - NSS:      ALPN and NPN | ||||
|   - GnuTLS:   ALPN | ||||
|   - PolarSSL: ALPN | ||||
|  | ||||
| Multiplexing | ||||
| ------------ | ||||
|  | ||||
| Starting in 7.43.0, libcurl fully supports HTTP/2 multiplexing, which is the | ||||
| term for doing multiple independent transfers over the same physical TCP | ||||
| connection. | ||||
|  | ||||
| To take advantage of multiplexing, you need to use the multi interface and set | ||||
| `CURLMOPT_PIPELINING` to `CURLPIPE_MULTIPLEX`. With that bit set, libcurl will | ||||
| attempt to re-use existing HTTP/2 connections and just add a new stream over | ||||
| that when doing subsequent parallel requests. | ||||
|  | ||||
| While libcurl sets up a connection to a HTTP server there is a period during | ||||
| which it doesn't know if it can pipeline or do multiplexing and if you add new | ||||
| transfers in that period, libcurl will default to start new connections for | ||||
| those transfers. With the new option `CURLOPT_PIPEWAIT` (added in 7.43.0), you | ||||
| can ask that a transfer should rather wait and see in case there's a | ||||
| connection for the same host in progress that might end up being possible to | ||||
| multiplex on. It favours keeping the number of connections low to the cost of | ||||
| slightly longer time to first byte transferred. | ||||
|  | ||||
| Applications | ||||
| ------------ | ||||
|  | ||||
| We hide HTTP/2's binary nature and convert received HTTP/2 traffic to headers | ||||
| in HTTP 1.1 style. This allows applications to work unmodified. | ||||
|  | ||||
| curl tool | ||||
| --------- | ||||
|  | ||||
| curl offers the `--http2` command line option to enable use of HTTP/2 | ||||
|  | ||||
| HTTP Alternative Services | ||||
| ------------------------- | ||||
|  | ||||
| Alt-Svc is a suggested extension with a corresponding frame (ALTSVC) in HTTP/2 | ||||
| that tells the client about an alternative "route" to the same content for the | ||||
| same origin server that you get the response from. A browser or long-living | ||||
| client can use that hint to create a new connection asynchronously.  For | ||||
| libcurl, we may introduce a way to bring such clues to the applicaton and/or | ||||
| let a subsequent request use the alternate route | ||||
| automatically. [Spec](https://tools.ietf.org/html/draft-ietf-httpbis-alt-svc-05) | ||||
|  | ||||
| TODO | ||||
| ---- | ||||
|  | ||||
|   - Provide API to set priorities / dependencies of individual streams | ||||
|  | ||||
|   - Implement "prior-knowledge" HTTP/2 connecitons over clear text so that | ||||
|     curl can connect with HTTP/2 at once without 1.1+Upgrade. | ||||
|  | ||||
							
								
								
									
										68
									
								
								docs/INSTALL
									
									
									
									
									
								
							
							
						
						
									
										68
									
								
								docs/INSTALL
									
									
									
									
									
								
							| @@ -173,13 +173,13 @@ Win32 | ||||
|    advice given above. | ||||
|  | ||||
|    KB94248  - How To Use the C Run-Time | ||||
|               http://support.microsoft.com/kb/94248/en-us | ||||
|               https://support.microsoft.com/kb/94248/en-us | ||||
|  | ||||
|    KB140584 - How to link with the correct C Run-Time (CRT) library | ||||
|               http://support.microsoft.com/kb/140584/en-us | ||||
|               https://support.microsoft.com/kb/140584/en-us | ||||
|  | ||||
|    KB190799 - Potential Errors Passing CRT Objects Across DLL Boundaries | ||||
|               http://msdn.microsoft.com/en-us/library/ms235460 | ||||
|               https://msdn.microsoft.com/en-us/library/ms235460 | ||||
|  | ||||
|    If your app is misbehaving in some strange way, or it is suffering | ||||
|    from memory corruption, before asking for further help, please try | ||||
| @@ -209,8 +209,8 @@ Win32 | ||||
|    environment variables, for example: | ||||
|  | ||||
|      set ZLIB_PATH=c:\zlib-1.2.8 | ||||
|      set OPENSSL_PATH=c:\openssl-0.9.8zc | ||||
|      set LIBSSH2_PATH=c:\libssh2-1.4.3 | ||||
|      set OPENSSL_PATH=c:\openssl-1.0.2c | ||||
|      set LIBSSH2_PATH=c:\libssh2-1.6.0 | ||||
|  | ||||
|    ATTENTION: if you want to build with libssh2 support you have to use latest | ||||
|    version 0.17 - previous versions will NOT work with 7.17.0 and later! | ||||
| @@ -232,7 +232,7 @@ Win32 | ||||
|    - optional MingW32-built OpenLDAP SDK available from: | ||||
|      http://www.gknw.net/mirror/openldap/ | ||||
|    - optional recent Novell CLDAP SDK available from: | ||||
|      http://developer.novell.com/ndk/cldap.htm | ||||
|      https://www.novell.com/developer/ndk/ldap_libraries_for_c.html | ||||
|  | ||||
|    Cygwin | ||||
|    ------ | ||||
| @@ -254,7 +254,7 @@ Win32 | ||||
|    If you use MSVC 6 it is required that you use the February 2003 edition of | ||||
|    the 'Platform SDK' which can be downloaded from: | ||||
|  | ||||
|    http://www.microsoft.com/en-us/download/details.aspx?id=12261 | ||||
|    https://www.microsoft.com/en-us/download/details.aspx?id=12261 | ||||
|  | ||||
|    Building any software with MSVC 6 without having PSDK installed is just | ||||
|    asking for trouble down the road once you have released it, you might notice | ||||
| @@ -263,7 +263,7 @@ Win32 | ||||
|    software built in such way will at some point regret having done so. | ||||
|  | ||||
|    If the compiler has been updated with the installation of a service pack as | ||||
|    those mentioned in http://support.microsoft.com/kb/194022 the compiler can be | ||||
|    those mentioned in https://support.microsoft.com/kb/194022 the compiler can be | ||||
|    safely used to read source code, translate and make it object code. | ||||
|  | ||||
|    But, even with the service packs mentioned above installed, the resulting | ||||
| @@ -299,7 +299,7 @@ Win32 | ||||
|    Then run 'nmake vc' in curl's root directory. | ||||
|  | ||||
|    If you want to compile with zlib support, you will need to build | ||||
|    zlib (http://www.gzip.org/zlib/) as well. Please read the zlib | ||||
|    zlib (http://www.zlib.net/) as well. Please read the zlib | ||||
|    documentation on how to compile zlib. Define the ZLIB_PATH environment | ||||
|    variable to the location of zlib.h and zlib.lib, for example: | ||||
|  | ||||
| @@ -471,6 +471,15 @@ Win32 | ||||
|    add '-DCURL_STATICLIB' to your CFLAGS.  Otherwise the linker will look for | ||||
|    dynamic import symbols. | ||||
|  | ||||
|    Legacy Windows and SSL | ||||
|    ---------------------- | ||||
|  | ||||
|    WinSSL (specifically SChannel from Windows SSPI), is the native SSL library | ||||
|    in Windows. However, WinSSL in Windows <= XP is unable to connect to servers | ||||
|    that no longer support the legacy handshakes and algorithms used by those | ||||
|    versions. If you will be using curl in one of those earlier versions of | ||||
|    Windows you should choose another SSL backend such as OpenSSL. | ||||
|  | ||||
| Apple iOS and Mac OS X | ||||
| ====================== | ||||
|  | ||||
| @@ -665,12 +674,10 @@ NetWare | ||||
|    - gnu make and awk running on the platform you compile on; | ||||
|      native Win32 versions can be downloaded from: | ||||
|      http://www.gknw.net/development/prgtools/ | ||||
|    - recent Novell LibC SDK available from: | ||||
|      http://developer.novell.com/ndk/libc.htm | ||||
|    - or recent Novell CLib SDK available from: | ||||
|      http://developer.novell.com/ndk/clib.htm | ||||
|    - recent Novell LibC or Novell CLib SDK available from: | ||||
|      https://www.novell.com/developer/ndk/ | ||||
|    - optional recent Novell CLDAP SDK available from: | ||||
|      http://developer.novell.com/ndk/cldap.htm | ||||
|      https://www.novell.com/developer/ndk/ldap_libraries_for_c.html | ||||
|    - optional zlib sources (static or dynamic linking with zlib.imp); | ||||
|      sources with NetWare Makefile can be obtained from: | ||||
|      http://www.gknw.net/mirror/zlib/ | ||||
| @@ -825,7 +832,7 @@ VxWorks | ||||
|  | ||||
|    To build libcurl for VxWorks you need: | ||||
|  | ||||
|       - CYGWIN (free, http://cygwin.com/) | ||||
|       - CYGWIN (free, https://cygwin.com/) | ||||
|       - Wind River Workbench (commercial) | ||||
|  | ||||
|    If you have CYGWIN and Workbench installed on you machine | ||||
| @@ -943,9 +950,10 @@ REDUCING SIZE | ||||
|    important factor.  First, be sure to set the CFLAGS variable when | ||||
|    configuring with any relevant compiler optimization flags to reduce the | ||||
|    size of the binary.  For gcc, this would mean at minimum the -Os option, | ||||
|    and potentially the -march=X and -mdynamic-no-pic options as well, e.g. | ||||
|    and potentially the -march=X, -mdynamic-no-pic and -flto options as well, | ||||
|    e.g. | ||||
|  | ||||
|       ./configure CFLAGS='-Os' ... | ||||
|       ./configure CFLAGS='-Os' LDFLAGS='-Wl,-Bsymbolic'... | ||||
|  | ||||
|    Note that newer compilers often produce smaller code than older versions | ||||
|    due to improved optimization. | ||||
| @@ -963,7 +971,9 @@ REDUCING SIZE | ||||
|      --disable-ipv6 (disables support for IPv6) | ||||
|      --disable-manual (disables support for the built-in documentation) | ||||
|      --disable-proxy (disables support for HTTP and SOCKS proxies) | ||||
|      --disable-unix-sockets (disables support for UNIX sockets) | ||||
|      --disable-verbose (eliminates debugging strings and error code strings) | ||||
|      --disable-versioned-symbols (disables support for versioned symbols) | ||||
|      --enable-hidden-symbols (eliminates unneeded symbols in the shared library) | ||||
|      --without-libidn (disables support for the libidn DNS library) | ||||
|      --without-librtmp (disables support for RTMP) | ||||
| @@ -976,7 +986,7 @@ REDUCING SIZE | ||||
|    configure command-line, e.g. | ||||
|  | ||||
|      CFLAGS="-Os -ffunction-sections -fdata-sections \ | ||||
|              -fno-unwind-tables -fno-asynchronous-unwind-tables" \ | ||||
|              -fno-unwind-tables -fno-asynchronous-unwind-tables -flto" \ | ||||
|      LDFLAGS="-Wl,-s -Wl,-Bsymbolic -Wl,--gc-sections" | ||||
|  | ||||
|    Be sure also to strip debugging symbols from your binaries after | ||||
| @@ -986,9 +996,9 @@ REDUCING SIZE | ||||
|    .comment section). | ||||
|  | ||||
|    Using these techniques it is possible to create a basic HTTP-only shared | ||||
|    libcurl library for i386 Linux platforms that is only 114 KiB in size, and | ||||
|    an FTP-only library that is 115 KiB in size (as of libcurl version 7.35.0, | ||||
|    using gcc 4.8.2). | ||||
|    libcurl library for i386 Linux platforms that is only 109 KiB in size, and | ||||
|    an FTP-only library that is 109 KiB in size (as of libcurl version 7.45.0, | ||||
|    using gcc 4.9.2). | ||||
|  | ||||
|    You may find that statically linking libcurl to your application will | ||||
|    result in a lower total size than dynamically linking. | ||||
| @@ -1086,18 +1096,18 @@ Useful URLs | ||||
|  | ||||
| axTLS        http://axtls.sourceforge.net/ | ||||
| c-ares       http://c-ares.haxx.se/ | ||||
| GNU GSS      http://www.gnu.org/software/gss/ | ||||
| GnuTLS       http://www.gnu.org/software/gnutls/ | ||||
| Heimdal      http://www.pdc.kth.se/heimdal/ | ||||
| libidn       http://www.gnu.org/software/libidn/ | ||||
| GNU GSS      https://www.gnu.org/software/gss/ | ||||
| GnuTLS       https://www.gnu.org/software/gnutls/ | ||||
| Heimdal      http://www.h5l.org/ | ||||
| libidn       https://www.gnu.org/software/libidn/ | ||||
| libmetalink  https://launchpad.net/libmetalink/ | ||||
| libssh2      http://www.libssh2.org/ | ||||
| MIT Kerberos http://web.mit.edu/kerberos/www/dist/ | ||||
| NSS          http://www.mozilla.org/projects/security/pki/nss/ | ||||
| NSS          https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS | ||||
| OpenLDAP     http://www.openldap.org/ | ||||
| OpenSSL      http://www.openssl.org/ | ||||
| PolarSSL     http://polarssl.org/ | ||||
| yassl        http://www.yassl.com/ | ||||
| OpenSSL      https://www.openssl.org/ | ||||
| PolarSSL     https://tls.mbed.org/ | ||||
| wolfSSL      https://www.wolfssl.com/wolfSSL/ | ||||
| Zlib         http://www.zlib.net/ | ||||
|  | ||||
| MingW        http://www.mingw.org/ | ||||
|   | ||||
| @@ -95,7 +95,7 @@ install instructions may produce erratic behaviour in DevCpp. For further info | ||||
| check the following sites | ||||
|  | ||||
| http://aditsu.freeunixhost.com/dev-cpp-faq.html | ||||
| http://sourceforge.net/forum/message.php?msg_id=3252213 | ||||
| https://sourceforge.net/p/dev-cpp/discussion/48211/thread/2a85ea46 | ||||
|  | ||||
| As I have mentioned before I will confine this to the SSL Library compilations | ||||
| but the process is very similar for compilation of the executable - curl.exe; | ||||
|   | ||||
							
								
								
									
										907
									
								
								docs/INTERNALS
									
									
									
									
									
								
							
							
						
						
									
										907
									
								
								docs/INTERNALS
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -3,6 +3,9 @@ join in and help us correct one or more of these! Also be sure to check the | ||||
| changelog of the current development status, as one or more of these problems | ||||
| may have been fixed since this was written! | ||||
|  | ||||
| 91. "curl_easy_perform hangs with imap and PolarSSL" | ||||
|   https://github.com/bagder/curl/issues/334 | ||||
|  | ||||
| 90. IMAP "SEARCH ALL" truncates output on large boxes. "A quick search of the | ||||
|   code reveals that pingpong.c contains some truncation code, at line 408, | ||||
|   when it deems the server response to be too large truncating it to 40 | ||||
| @@ -32,6 +35,7 @@ may have been fixed since this was written! | ||||
|   CURLINFO_STARTTRANSFER_TIME is wrong. While using POST | ||||
|   CURLINFO_STARTTRANSFER_TIME minus CURLINFO_PRETRANSFER_TIME is near to zero | ||||
|   every time. | ||||
|   https://github.com/bagder/curl/issues/218 | ||||
|   http://curl.haxx.se/bug/view.cgi?id=1213 | ||||
|  | ||||
| 84. CURLINFO_SSL_VERIFYRESULT is only implemented for the OpenSSL and NSS | ||||
| @@ -58,16 +62,6 @@ may have been fixed since this was written! | ||||
|   that can receive data. This is subject for change in the future. | ||||
|   http://curl.haxx.se/bug/view.cgi?id=1116 | ||||
|  | ||||
| 78. curl and libcurl don't always signal the client properly when "sending" | ||||
|   zero bytes files - it makes for example the command line client not creating | ||||
|   any file at all. Like when using FTP. | ||||
|   http://curl.haxx.se/bug/view.cgi?id=1063 | ||||
|  | ||||
| 76. The SOCKET type in Win64 is 64 bits large (and thus so is curl_socket_t on | ||||
|   that platform), and long is only 32 bits. It makes it impossible for | ||||
|   curl_easy_getinfo() to return a socket properly with the CURLINFO_LASTSOCKET | ||||
|   option as for all other operating systems. | ||||
|  | ||||
| 75. NTLM authentication involving unicode user name or password only works | ||||
|   properly if built with UNICODE defined together with the WinSSL/schannel | ||||
|   backend. The original problem was mentioned in: | ||||
| @@ -97,7 +91,7 @@ may have been fixed since this was written! | ||||
|   something beyond ascii but currently libcurl will only pass in the verbatim | ||||
|   string the app provides. There are several browsers that already do this | ||||
|   encoding. The key seems to be the updated draft to RFC2231: | ||||
|   http://tools.ietf.org/html/draft-reschke-rfc2231-in-http-02 | ||||
|   https://tools.ietf.org/html/draft-reschke-rfc2231-in-http-02 | ||||
|  | ||||
| 66. When using telnet, the time limitation options don't work. | ||||
|   http://curl.haxx.se/bug/view.cgi?id=846 | ||||
| @@ -245,13 +239,3 @@ may have been fixed since this was written! | ||||
|   it seems HTTP servers send the *uncompressed* length in that header and | ||||
|   libcurl thinks of it as the *compressed* length. Some explanations are here: | ||||
|   http://curl.haxx.se/mail/lib-2003-06/0146.html | ||||
|  | ||||
| 2. If a HTTP server responds to a HEAD request and includes a body (thus | ||||
|   violating the RFC2616), curl won't wait to read the response but just stop | ||||
|   reading and return back. If a second request (let's assume a GET) is then | ||||
|   immediately made to the same server again, the connection will be re-used | ||||
|   fine of course, and the second request will be sent off but when the | ||||
|   response is to get read, the previous response-body is what curl will read | ||||
|   and havoc is what happens. | ||||
|   More details on this is found in this libcurl mailing list thread: | ||||
|   http://curl.haxx.se/mail/lib-2002-08/0000.html | ||||
|   | ||||
| @@ -1,245 +0,0 @@ | ||||
|                                   _   _ ____  _ | ||||
|                               ___| | | |  _ \| | | ||||
|                              / __| | | | |_) | | | ||||
|                             | (__| |_| |  _ <| |___ | ||||
|                              \___|\___/|_| \_\_____| | ||||
|  | ||||
| Structs in libcurl | ||||
|  | ||||
| This document should cover 7.32.0 pretty accurately, but will make sense even | ||||
| for older and later versions as things don't change drastically that often. | ||||
|  | ||||
|  1. The main structs in libcurl | ||||
|   1.1 SessionHandle | ||||
|   1.2 connectdata | ||||
|   1.3 Curl_multi | ||||
|   1.4 Curl_handler | ||||
|   1.5 conncache | ||||
|   1.6 Curl_share | ||||
|   1.7 CookieInfo | ||||
|  | ||||
| ============================================================================== | ||||
|  | ||||
| 1. The main structs in libcurl | ||||
|  | ||||
|   1.1 SessionHandle | ||||
|  | ||||
|   The SessionHandle handle struct is the one returned to the outside in the | ||||
|   external API as a "CURL *". This is usually known as an easy handle in API | ||||
|   documentations and examples. | ||||
|  | ||||
|   Information and state that is related to the actual connection is in the | ||||
|   'connectdata' struct. When a transfer is about to be made, libcurl will | ||||
|   either create a new connection or re-use an existing one. The particular | ||||
|   connectdata that is used by this handle is pointed out by | ||||
|   SessionHandle->easy_conn. | ||||
|  | ||||
|   Data and information that regard this particular single transfer is put in | ||||
|   the SingleRequest sub-struct. | ||||
|  | ||||
|   When the SessionHandle struct is added to a multi handle, as it must be in | ||||
|   order to do any transfer, the ->multi member will point to the Curl_multi | ||||
|   struct it belongs to. The ->prev and ->next members will then be used by the | ||||
|   multi code to keep a linked list of SessionHandle structs that are added to | ||||
|   that same multi handle. libcurl always uses multi so ->multi *will* point to | ||||
|   a Curl_multi when a transfer is in progress. | ||||
|  | ||||
|   ->mstate is the multi state of this particular SessionHandle. When | ||||
|   multi_runsingle() is called, it will act on this handle according to which | ||||
|   state it is in. The mstate is also what tells which sockets to return for a | ||||
|   specific SessionHandle when curl_multi_fdset() is called etc. | ||||
|  | ||||
|   The libcurl source code generally use the name 'data' for the variable that | ||||
|   points to the SessionHandle. | ||||
|  | ||||
|  | ||||
|   1.2 connectdata | ||||
|  | ||||
|   A general idea in libcurl is to keep connections around in a connection | ||||
|   "cache" after they have been used in case they will be used again and then | ||||
|   re-use an existing one instead of creating a new as it creates a significant | ||||
|   performance boost. | ||||
|  | ||||
|   Each 'connectdata' identifies a single physical connection to a server. If | ||||
|   the connection can't be kept alive, the connection will be closed after use | ||||
|   and then this struct can be removed from the cache and freed. | ||||
|  | ||||
|   Thus, the same SessionHandle can be used multiple times and each time select | ||||
|   another connectdata struct to use for the connection. Keep this in mind, as | ||||
|   it is then important to consider if options or choices are based on the | ||||
|   connection or the SessionHandle. | ||||
|  | ||||
|   Functions in libcurl will assume that connectdata->data points to the | ||||
|   SessionHandle that uses this connection. | ||||
|  | ||||
|   As a special complexity, some protocols supported by libcurl require a | ||||
|   special disconnect procedure that is more than just shutting down the | ||||
|   socket. It can involve sending one or more commands to the server before | ||||
|   doing so. Since connections are kept in the connection cache after use, the | ||||
|   original SessionHandle may no longer be around when the time comes to shut | ||||
|   down a particular connection. For this purpose, libcurl holds a special | ||||
|   dummy 'closure_handle' SessionHandle in the Curl_multi struct to  | ||||
|  | ||||
|   FTP uses two TCP connections for a typical transfer but it keeps both in | ||||
|   this single struct and thus can be considered a single connection for most | ||||
|   internal concerns. | ||||
|  | ||||
|   The libcurl source code generally use the name 'conn' for the variable that | ||||
|   points to the connectdata. | ||||
|  | ||||
|  | ||||
|   1.3 Curl_multi | ||||
|  | ||||
|   Internally, the easy interface is implemented as a wrapper around multi | ||||
|   interface functions. This makes everything multi interface. | ||||
|  | ||||
|   Curl_multi is the multi handle struct exposed as "CURLM *" in external APIs. | ||||
|  | ||||
|   This struct holds a list of SessionHandle structs that have been added to | ||||
|   this handle with curl_multi_add_handle(). The start of the list is ->easyp | ||||
|   and ->num_easy is a counter of added SessionHandles. | ||||
|  | ||||
|   ->msglist is a linked list of messages to send back when | ||||
|   curl_multi_info_read() is called. Basically a node is added to that list | ||||
|   when an individual SessionHandle's transfer has completed. | ||||
|  | ||||
|   ->hostcache points to the name cache. It is a hash table for looking up name | ||||
|   to IP. The nodes have a limited life time in there and this cache is meant | ||||
|   to reduce the time for when the same name is wanted within a short period of | ||||
|   time. | ||||
|  | ||||
|   ->timetree points to a tree of SessionHandles, sorted by the remaining time | ||||
|   until it should be checked - normally some sort of timeout. Each | ||||
|   SessionHandle has one node in the tree. | ||||
|  | ||||
|   ->sockhash is a hash table to allow fast lookups of socket descriptor to | ||||
|   which SessionHandle that uses that descriptor. This is necessary for the | ||||
|   multi_socket API. | ||||
|  | ||||
|   ->conn_cache points to the connection cache. It keeps track of all | ||||
|   connections that are kept after use. The cache has a maximum size. | ||||
|  | ||||
|   ->closure_handle is described in the 'connectdata' section. | ||||
|  | ||||
|   The libcurl source code generally use the name 'multi' for the variable that | ||||
|   points to the Curl_multi struct. | ||||
|  | ||||
|  | ||||
|   1.4 Curl_handler | ||||
|  | ||||
|   Each unique protocol that is supported by libcurl needs to provide at least | ||||
|   one Curl_handler struct. It defines what the protocol is called and what | ||||
|   functions the main code should call to deal with protocol specific issues. | ||||
|   In general, there's a source file named [protocol].c in which there's a | ||||
|   "struct Curl_handler Curl_handler_[protocol]" declared. In url.c there's | ||||
|   then the main array with all individual Curl_handler structs pointed to from | ||||
|   a single array which is scanned through when a URL is given to libcurl to | ||||
|   work with. | ||||
|  | ||||
|   ->scheme is the URL scheme name, usually spelled out in uppercase. That's | ||||
|   "HTTP" or "FTP" etc. SSL versions of the protcol need its own Curl_handler | ||||
|   setup so HTTPS separate from HTTP. | ||||
|  | ||||
|   ->setup_connection is called to allow the protocol code to allocate protocol | ||||
|   specific data that then gets associated with that SessionHandle for the rest | ||||
|   of this transfer. It gets freed again at the end of the transfer. It will be | ||||
|   called before the 'connectdata' for the transfer has been selected/created. | ||||
|   Most protocols will allocate its private 'struct [PROTOCOL]' here and assign | ||||
|   SessionHandle->req.protop to point to it. | ||||
|  | ||||
|   ->connect_it allows a protocol to do some specific actions after the TCP | ||||
|   connect is done, that can still be considered part of the connection phase. | ||||
|  | ||||
|   Some protocols will alter the connectdata->recv[] and connectdata->send[] | ||||
|   function pointers in this function. | ||||
|  | ||||
|   ->connecting is similarly a function that keeps getting called as long as the | ||||
|   protocol considers itself still in the connecting phase. | ||||
|  | ||||
|   ->do_it is the function called to issue the transfer request. What we call | ||||
|   the DO action internally. If the DO is not enough and things need to be kept | ||||
|   getting done for the entire DO sequence to complete, ->doing is then usually | ||||
|   also provided. Each protocol that needs to do multiple commands or similar | ||||
|   for do/doing need to implement their own state machines (see SCP, SFTP, | ||||
|   FTP). Some protocols (only FTP and only due to historical reasons) has a | ||||
|   separate piece of the DO state called DO_MORE. | ||||
|  | ||||
|   ->doing keeps getting called while issuing the transfer request command(s) | ||||
|  | ||||
|   ->done gets called when the transfer is complete and DONE. That's after the | ||||
|   main data has been transferred. | ||||
|  | ||||
|   ->do_more gets called during the DO_MORE state. The FTP protocol uses this | ||||
|   state when setting up the second connection. | ||||
|  | ||||
|   ->proto_getsock | ||||
|   ->doing_getsock | ||||
|   ->domore_getsock | ||||
|   ->perform_getsock | ||||
|   Functions that return socket information. Which socket(s) to wait for which | ||||
|   action(s) during the particular multi state. | ||||
|  | ||||
|   ->disconnect is called immediately before the TCP connection is shutdown. | ||||
|  | ||||
|   ->readwrite gets called during transfer to allow the protocol to do extra | ||||
|   reads/writes | ||||
|  | ||||
|   ->defport is the default report TCP or UDP port this protocol uses | ||||
|  | ||||
|   ->protocol is one or more bits in the CURLPROTO_* set. The SSL versions have | ||||
|   their "base" protocol set and then the SSL variation. Like "HTTP|HTTPS". | ||||
|  | ||||
|   ->flags is a bitmask with additional information about the protocol that will | ||||
|   make it get treated differently by the generic engine: | ||||
|  | ||||
|     PROTOPT_SSL - will make it connect and negotiate SSL | ||||
|  | ||||
|     PROTOPT_DUAL - this protocol uses two connections | ||||
|  | ||||
|     PROTOPT_CLOSEACTION - this protocol has actions to do before closing the | ||||
|     connection. This flag is no longer used by code, yet still set for a bunch | ||||
|     protocol handlers. | ||||
|    | ||||
|     PROTOPT_DIRLOCK - "direction lock". The SSH protocols set this bit to | ||||
|     limit which "direction" of socket actions that the main engine will | ||||
|     concern itself about. | ||||
|  | ||||
|     PROTOPT_NONETWORK - a protocol that doesn't use network (read file:) | ||||
|  | ||||
|     PROTOPT_NEEDSPWD - this protocol needs a password and will use a default | ||||
|     one unless one is provided | ||||
|  | ||||
|     PROTOPT_NOURLQUERY - this protocol can't handle a query part on the URL | ||||
|     (?foo=bar) | ||||
|  | ||||
|  | ||||
|   1.5 conncache | ||||
|  | ||||
|   Is a hash table with connections for later re-use. Each SessionHandle has | ||||
|   a pointer to its connection cache. Each multi handle sets up a connection | ||||
|   cache that all added SessionHandles share by default. | ||||
|  | ||||
|  | ||||
|   1.6 Curl_share | ||||
|    | ||||
|   The libcurl share API allocates a Curl_share struct, exposed to the external | ||||
|   API as "CURLSH *". | ||||
|  | ||||
|   The idea is that the struct can have a set of own versions of caches and | ||||
|   pools and then by providing this struct in the CURLOPT_SHARE option, those | ||||
|   specific SessionHandles will use the caches/pools that this share handle | ||||
|   holds. | ||||
|  | ||||
|   Then individual SessionHandle structs can be made to share specific things | ||||
|   that they otherwise wouldn't, such as cookies. | ||||
|  | ||||
|   The Curl_share struct can currently hold cookies, DNS cache and the SSL | ||||
|   session cache. | ||||
|  | ||||
|    | ||||
|   1.7 CookieInfo | ||||
|  | ||||
|   This is the main cookie struct. It holds all known cookies and related | ||||
|   information. Each SessionHandle has its own private CookieInfo even when | ||||
|   they are added to a multi handle. They can be made to share cookies by using | ||||
|   the share API. | ||||
| @@ -23,29 +23,29 @@ libcurl http://curl.haxx.se/docs/copyright.html | ||||
|         Uses an MIT (or Modified BSD)-style license that is as liberal as | ||||
|         possible. | ||||
|  | ||||
| OpenSSL http://www.openssl.org/source/license.html | ||||
| OpenSSL https://www.openssl.org/source/license.html | ||||
|  | ||||
|         (May be used for SSL/TLS support) Uses an Original BSD-style license | ||||
|         with an announcement clause that makes it "incompatible" with GPL. You | ||||
|         are not allowed to ship binaries that link with OpenSSL that includes | ||||
|         GPL code (unless that specific GPL code includes an exception for | ||||
|         OpenSSL - a habit that is growing more and more common). If OpenSSL's | ||||
|         licensing is a problem for you, consider using GnuTLS or yassl | ||||
|         instead. | ||||
|         licensing is a problem for you, consider using another TLS library. | ||||
|  | ||||
| GnuTLS  http://www.gnutls.org/ | ||||
|  | ||||
|         (May be used for SSL/TLS support) Uses the LGPL[3] license. If this is | ||||
|         a problem for you, consider using OpenSSL instead. Also note that | ||||
|         a problem for you, consider using another TLS library. Also note that | ||||
|         GnuTLS itself depends on and uses other libs (libgcrypt and | ||||
|         libgpg-error) and they too are LGPL- or GPL-licensed. | ||||
|  | ||||
| yassl   http://www.yassl.com/ | ||||
| WolfSSL   https://www.wolfssl.com/ | ||||
|  | ||||
|         (May be used for SSL/TLS support) Uses the GPL[1] license. If this is | ||||
|         a problem for you, consider using OpenSSL or GnuTLS instead. | ||||
|         (May be used for SSL/TLS support) Uses the GPL[1] license or a | ||||
|         propietary license. If this is a problem for you, consider using | ||||
|         another TLS library. | ||||
|  | ||||
| NSS     http://www.mozilla.org/projects/security/pki/nss/ | ||||
| NSS     https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS | ||||
|  | ||||
|         (May be used for SSL/TLS support) Is covered by the MPL[4] license, | ||||
|         the GPL[1] license and the LGPL[3] license. You may choose to license | ||||
| @@ -57,13 +57,29 @@ axTLS   http://axtls.sourceforge.net/ | ||||
|  | ||||
|         (May be used for SSL/TLS support) Uses a Modified BSD-style license. | ||||
|  | ||||
| mbedTLS https://tls.mbed.org/ | ||||
|  | ||||
|         (May be used for SSL/TLS support) Uses the GPL[1] license or a | ||||
|         propietary license. If this is a problem for you, consider using | ||||
|         another TLS library. | ||||
|  | ||||
| BoringSSL https://boringssl.googlesource.com/ | ||||
|  | ||||
|         (May be used for SSL/TLS support) As an OpenSSL fork, it has the same | ||||
|         license as that. | ||||
|  | ||||
| libressl http://www.libressl.org/ | ||||
|  | ||||
|         (May be used for SSL/TLS support) As an OpenSSL fork, it has the same | ||||
|         license as that. | ||||
|  | ||||
| c-ares  http://daniel.haxx.se/projects/c-ares/license.html | ||||
|  | ||||
|         (Used for asynchronous name resolves) Uses an MIT license that is very | ||||
|         liberal and imposes no restrictions on any other library or part you | ||||
|         may link with. | ||||
|  | ||||
| zlib    http://www.gzip.org/zlib/zlib_license.html | ||||
| zlib    http://www.zlib.net/zlib_license.html | ||||
|  | ||||
|         (Used for compressed Transfer-Encoding support) Uses an MIT-style | ||||
|         license that shouldn't collide with any other library. | ||||
| @@ -73,12 +89,12 @@ MIT Kerberos http://web.mit.edu/kerberos/www/dist/ | ||||
|         (May be used for GSS support) MIT licensed, that shouldn't collide | ||||
|         with any other parts. | ||||
|  | ||||
| Heimdal http://www.pdc.kth.se/heimdal/ | ||||
| Heimdal http://www.h5l.org | ||||
|  | ||||
|         (May be used for GSS support) Heimdal is Original BSD licensed with | ||||
|         the announcement clause. | ||||
|  | ||||
| GNU GSS http://www.gnu.org/software/gss/ | ||||
| GNU GSS https://www.gnu.org/software/gss/ | ||||
|  | ||||
|         (May be used for GSS support) GNU GSS is GPL licensed. Note that you | ||||
|         may not distribute binary curl packages that uses this if you build | ||||
| @@ -105,10 +121,10 @@ libssh2 http://www.libssh2.org/ | ||||
|         (Used for scp and sftp support) libssh2 uses a Modified BSD-style | ||||
|         license. | ||||
|  | ||||
| [1] = GPL - GNU General Public License: http://www.gnu.org/licenses/gpl.html | ||||
| [2] = http://www.fsf.org/licenses/gpl-faq.html#GPLIncompatibleLibs details on | ||||
| [1] = GPL - GNU General Public License: https://www.gnu.org/licenses/gpl.html | ||||
| [2] = https://www.gnu.org/licenses/gpl-faq.html#GPLIncompatibleLibs details on | ||||
|       how to write such an exception to the GPL | ||||
| [3] = LGPL - GNU Lesser General Public License: | ||||
|       http://www.gnu.org/licenses/lgpl.html | ||||
|       https://www.gnu.org/licenses/lgpl.html | ||||
| [4] = MPL - Mozilla Public License: | ||||
|       http://www.mozilla.org/MPL/ | ||||
|       https://www.mozilla.org/MPL/ | ||||
|   | ||||
| @@ -230,7 +230,7 @@ MAIL ETIQUETTE | ||||
|   Quote as little as possible. Just enough to provide the context you cannot | ||||
|   leave out. A lengthy description can be found here: | ||||
|  | ||||
|       http://www.netmeister.org/news/learn2quote.html | ||||
|       https://www.netmeister.org/news/learn2quote.html | ||||
|  | ||||
|   2.7 Digest | ||||
|  | ||||
|   | ||||
| @@ -470,8 +470,8 @@ COOKIES | ||||
|   stored cookies which match the request as it follows the location.  The | ||||
|   file "empty.txt" may be a nonexistent file. | ||||
|  | ||||
|   Alas, to both read and write cookies from a netscape cookie file, you can | ||||
|   set both -b and -c to use the same file: | ||||
|   To read and write cookies from a netscape cookie file, you can set both -b | ||||
|   and -c to use the same file: | ||||
|  | ||||
|         curl -b cookies.txt -c cookies.txt www.example.com | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
| #                            | (__| |_| |  _ <| |___ | ||||
| #                             \___|\___/|_| \_\_____| | ||||
| # | ||||
| # Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
| # Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
| # | ||||
| # This software is licensed as described in the file COPYING, which | ||||
| # you should have received as part of this distribution. The terms | ||||
| @@ -33,22 +33,22 @@ SUBDIRS = examples libcurl | ||||
|  | ||||
| CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES) | ||||
|  | ||||
| EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS SSLCERTS	 \ | ||||
|  README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS	 \ | ||||
|  KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) HISTORY INSTALL		 \ | ||||
|  $(PDFPAGES) LICENSE-MIXING README.netware DISTRO-DILEMMA INSTALL.devcpp \ | ||||
|  MAIL-ETIQUETTE HTTP-COOKIES LIBCURL-STRUCTS SECURITY RELEASE-PROCEDURE  \ | ||||
|  SSL-PROBLEMS | ||||
| EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS SSLCERTS	\ | ||||
|  README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS	\ | ||||
|  KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) HISTORY INSTALL		\ | ||||
|  $(PDFPAGES) LICENSE-MIXING README.netware INSTALL.devcpp		\ | ||||
|  MAIL-ETIQUETTE HTTP-COOKIES SECURITY RELEASE-PROCEDURE SSL-PROBLEMS	\ | ||||
|  HTTP2.md ROADMAP.md CODE_OF_CONDUCT.md | ||||
|  | ||||
| MAN2HTML= roffit < $< >$@ | ||||
|  | ||||
| SUFFIXES = .1 .html .pdf | ||||
|  | ||||
| html: $(HTMLPAGES) | ||||
| 	cd libcurl; make html | ||||
| 	cd libcurl && make html | ||||
|  | ||||
| pdf: $(PDFPAGES) | ||||
| 	cd libcurl; make pdf | ||||
| 	cd libcurl && make pdf | ||||
|  | ||||
| .1.html: | ||||
| 	$(MAN2HTML) | ||||
|   | ||||
| @@ -1,9 +1,3 @@ | ||||
|                                   _   _ ____  _ | ||||
|                               ___| | | |  _ \| | | ||||
|                              / __| | | | |_) | | | ||||
|                             | (__| |_| |  _ <| |___ | ||||
|                              \___|\___/|_| \_\_____| | ||||
|  | ||||
| curl release procedure - how to do a release | ||||
| ============================================ | ||||
|  | ||||
| @@ -30,6 +24,8 @@ in the source code repo | ||||
|  | ||||
| - upload the 8 resulting files to the primary download directory | ||||
|  | ||||
| - upload the 4 tarballs to github for the HTTPS download | ||||
|  | ||||
| in the curl-www repo | ||||
| -------------------- | ||||
|  | ||||
| @@ -84,12 +80,10 @@ Coming dates | ||||
| Based on the description above, here are some planned release dates (at the | ||||
| time of this writing): | ||||
|  | ||||
| - February 25, 2015 (version 7.41.0) | ||||
| - April 22, 2015 | ||||
| - June 17, 2015 | ||||
| - August 12, 2015 | ||||
| - October 7, 2015 | ||||
| - October 7, 2015 (version 7.45.0) | ||||
| - December 2, 2015 | ||||
| - January 27, 2016 | ||||
| - March 23, 2016 | ||||
| - May 18, 2016 | ||||
| - July 13, 2016 | ||||
| - September 7, 2016 | ||||
|   | ||||
							
								
								
									
										116
									
								
								docs/ROADMAP.md
									
									
									
									
									
								
							
							
						
						
									
										116
									
								
								docs/ROADMAP.md
									
									
									
									
									
								
							| @@ -5,44 +5,86 @@ Roadmap of things Daniel Stenberg and Steve Holme want to work on next. It is | ||||
| intended to serve as a guideline for others for information, feedback and | ||||
| possible participation. | ||||
|  | ||||
| New stuff - libcurl | ||||
| HTTP/2 | ||||
| ------ | ||||
|  | ||||
| - test suite | ||||
|  | ||||
|    Base this on existing nghttp2 server to start with to make functional | ||||
|    tests. Later on we can adopt that code or work with nghttp2 to provide ways | ||||
|    to have the http2 server respond with broken responses to make sure we deal | ||||
|    with that nicely as well. | ||||
|  | ||||
|    To decide: if we need to bundle parts of the nghttp2 stuff that probably | ||||
|    won't be shipped by many distros. | ||||
|  | ||||
| - provide option for HTTP/2 "prior knowledge" over clear text | ||||
|  | ||||
|    As it would avoid the roundtrip-heavy Upgrade: procedures when you _know_ | ||||
|    it speaks HTTP/2. | ||||
|  | ||||
| - provide option to allow curl to default to HTTP/2 only when using HTTPS | ||||
|  | ||||
|    We could switch on HTTP/2 by-default for HTTPS quite easily and it | ||||
|    shouldn't hurt anyone, while HTTP/2 for HTTP by default could introduce | ||||
|    lots of Upgrade: roundtrips that users won't like. So a separated option | ||||
|    alternative makes sense. | ||||
|  | ||||
| SRV records | ||||
| ----------- | ||||
|  | ||||
| How to find services for specific domains/hosts. | ||||
|  | ||||
| HTTPS to proxy | ||||
| -------------- | ||||
|  | ||||
| To avoid network traffic to/from the proxy getting snooped on. | ||||
|  | ||||
| curl_formadd() | ||||
| -------------- | ||||
|  | ||||
| make sure there's an easy handle passed in to `curl_formadd()`, | ||||
| `curl_formget()` and `curl_formfree()` by adding replacement functions and | ||||
| deprecating the old ones to allow custom mallocs and more | ||||
|  | ||||
| third-party SASL | ||||
| ---------------- | ||||
|  | ||||
| add support for third-party SASL libraries such as Cyrus SASL - may need to | ||||
| move existing native and SSPI based authentication into vsasl folder after | ||||
| reworking HTTP and SASL code | ||||
|  | ||||
| SASL authentication in LDAP | ||||
| --------------------------- | ||||
|  | ||||
| ... | ||||
|  | ||||
| Simplify the SMTP email | ||||
| ----------------------- | ||||
|  | ||||
| Simplify the SMTP email interface so that programmers don't have to | ||||
| construct the body of an email that contains all the headers, alternative | ||||
| content, images and attachments - maintain raw interface so that | ||||
| programmers that want to do this can | ||||
|  | ||||
| email capabilities | ||||
| ------------------ | ||||
|  | ||||
| Allow the email protocols to return the capabilities before | ||||
| authenticating. This will allow an application to decide on the best | ||||
| authentication mechanism | ||||
|  | ||||
| Win32 pthreads | ||||
| -------------- | ||||
|  | ||||
| Allow Windows threading model to be replaced by Win32 pthreads port | ||||
|  | ||||
| dynamic buffer size | ||||
| ------------------- | ||||
|  | ||||
| 1. HTTP/2 | ||||
|  | ||||
|  - test suite | ||||
|  - http2 multiplexing/pipelining | ||||
|  - provide option for HTTP/2 "prior knowledge" over clear text | ||||
|  - provide option to allow curl to default to HTTP/2 only when using HTTPS | ||||
|  | ||||
| 2. SRV records | ||||
|  | ||||
| 3. HTTPS to proxy | ||||
|  | ||||
| 4. make sure there's an easy handle passed in to `curl_formadd()`, | ||||
|    `curl_formget()` and `curl_formfree()` by adding replacement functions and | ||||
|    deprecating the old ones to allow custom mallocs and more | ||||
|  | ||||
| 5. add support for third-party SASL libraries such as Cyrus SASL - may need to | ||||
|    move existing native and SSPI based authentication into vsasl folder after | ||||
|    reworking HTTP and SASL code | ||||
|  | ||||
| 6. SASL authentication in LDAP | ||||
|  | ||||
| 7. Simplify the SMTP email interface so that programmers don't have to | ||||
|    construct the body of an email that contains all the headers, alternative | ||||
|    content, images and attachments - maintain raw interface so that | ||||
|    programmers that want to do this can | ||||
|  | ||||
| 8. Allow the email protocols to return the capabilities before | ||||
|     authenticating. This will allow an application to decide on the best | ||||
|     authentication mechanism | ||||
|  | ||||
| 9. Allow Windows threading model to be replaced by Win32 pthreads port | ||||
|  | ||||
| 10. Implement a dynamic buffer size to allow SFTP to use much larger buffers | ||||
|     and possibly allow the size to be customizable by applications. Use less | ||||
|     memory when handles are not in use? | ||||
| Implement a dynamic buffer size to allow SFTP to use much larger buffers and | ||||
| possibly allow the size to be customizable by applications. Use less memory | ||||
| when handles are not in use? | ||||
|  | ||||
| New stuff - curl | ||||
| ---------------- | ||||
| @@ -61,7 +103,7 @@ Improve | ||||
|  | ||||
| 2. curl -h output (considered overwhelming to users) | ||||
|  | ||||
| 3. we have > 160 command line options, is there a way to redo things to | ||||
| 3. we have > 170 command line options, is there a way to redo things to | ||||
|    simplify or improve the situation as we are likely to keep adding | ||||
|    features/options in the future too | ||||
|  | ||||
|   | ||||
| @@ -26,7 +26,7 @@ CA bundle missing intermediate certificates | ||||
|   problems if your CA cert does not have the certificates for the | ||||
|   intermediates in the whole trust chain. | ||||
|  | ||||
| SSL version | ||||
| Protocol version | ||||
|  | ||||
|   Some broken servers fail to support the protocol negotiation properly that | ||||
|   SSL servers are supposed to handle. This may cause the connection to fail | ||||
| @@ -36,7 +36,9 @@ SSL version | ||||
|   An additional complication can be that modern SSL libraries sometimes are | ||||
|   built with support for older SSL and TLS versions disabled! | ||||
|  | ||||
| SSL ciphers | ||||
|   All versions of SSL are considered insecure and should be avoided. Use TLS. | ||||
|  | ||||
| Ciphers | ||||
|  | ||||
|   Clients give servers a list of ciphers to select from. If the list doesn't | ||||
|   include any ciphers the server wants/can use, the connection handshake | ||||
| @@ -51,9 +53,13 @@ SSL ciphers | ||||
|   Note that these weak ciphers are identified as flawed. For example, this | ||||
|   includes symmetric ciphers with less than 128 bit keys and RC4. | ||||
|  | ||||
|   WinSSL in Windows XP is not able to connect to servers that no longer | ||||
|   support the legacy handshakes and algorithms used by those versions, so we | ||||
|   advice against building curl to use WinSSL on really old Windows versions. | ||||
|  | ||||
|   References: | ||||
|  | ||||
|   http://tools.ietf.org/html/draft-popov-tls-prohibiting-rc4-01 | ||||
|   https://tools.ietf.org/html/draft-popov-tls-prohibiting-rc4-01 | ||||
|    | ||||
| Allow BEAST | ||||
|  | ||||
| @@ -65,3 +71,17 @@ Allow BEAST | ||||
|   introduced. Exactly as it sounds, it re-introduces the BEAST vulnerability | ||||
|   but on the other hand it allows curl to connect to that kind of strange | ||||
|   servers. | ||||
|  | ||||
| Disabling certificate revocation checks | ||||
|  | ||||
|   Some SSL backends may do certificate revocation checks (CRL, OCSP, etc) | ||||
|   depending on the OS or build configuration. The --ssl-no-revoke option was | ||||
|   introduced in 7.44.0 to disable revocation checking but currently is only | ||||
|   supported for WinSSL (the native Windows SSL library), with an exception in | ||||
|   the case of Windows' Untrusted Publishers blacklist which it seems can't be | ||||
|   bypassed. This option may have broader support to accommodate other SSL | ||||
|   backends in the future. | ||||
|  | ||||
|   References: | ||||
|  | ||||
|   http://curl.haxx.se/docs/ssl-compared.html | ||||
|   | ||||
							
								
								
									
										76
									
								
								docs/THANKS
									
									
									
									
									
								
							
							
						
						
									
										76
									
								
								docs/THANKS
									
									
									
									
									
								
							| @@ -36,6 +36,7 @@ Alex Suykov | ||||
| Alex Vinnik | ||||
| Alex aka WindEagle | ||||
| Alexander Beedie | ||||
| Alexander Dyagilev | ||||
| Alexander Elgert | ||||
| Alexander Klauer | ||||
| Alexander Kourakos | ||||
| @@ -55,6 +56,7 @@ Alona Rossen | ||||
| Amol Pattekar | ||||
| Amr Shahin | ||||
| Anatoli Tubman | ||||
| Anders Bakken | ||||
| Anders Gustafsson | ||||
| Anders Havn | ||||
| Andi Jahja | ||||
| @@ -90,6 +92,7 @@ Andy Serpa | ||||
| Andy Tsouladze | ||||
| Angus Mackay | ||||
| Anthon Pang | ||||
| Anthony Avina | ||||
| Anthony Bryan | ||||
| Anthony G. Basile | ||||
| Antoine Calando | ||||
| @@ -104,6 +107,7 @@ Arnaud Ebalard | ||||
| Arthur Murray | ||||
| Arve Knudsen | ||||
| Arvid Norberg | ||||
| Ashish Shukla | ||||
| Ask Bjørn Hansen | ||||
| Askar Safin | ||||
| Ates Goral | ||||
| @@ -127,11 +131,14 @@ Benbuck Nason | ||||
| Benjamin Gerard | ||||
| Benjamin Gilbert | ||||
| Benjamin Johnson | ||||
| Benjamin Kircher | ||||
| Benoit Neil | ||||
| Benoit Sigoure | ||||
| Bernard Leak | ||||
| Bernhard Reutner-Fischer | ||||
| Bert Huijben | ||||
| Bertrand Demiddelaer | ||||
| Bertrand Simonnet | ||||
| Bill Doyle | ||||
| Bill Egert | ||||
| Bill Hoffman | ||||
| @@ -157,8 +164,10 @@ Brandon Wang | ||||
| Brendan Jurd | ||||
| Brent Beardsley | ||||
| Brian Akins | ||||
| Brian Chrisman | ||||
| Brian Dessent | ||||
| Brian J. Murrell | ||||
| Brian Prodoehl | ||||
| Brian R Duffy | ||||
| Brian Ulm | ||||
| Brock Noland | ||||
| @@ -182,6 +191,7 @@ Charles Romestant | ||||
| Chen Prog | ||||
| Chih-Chung Chang | ||||
| Chris "Bob Bob" | ||||
| Chris Araman | ||||
| Chris Combes | ||||
| Chris Conlon | ||||
| Chris Deidun | ||||
| @@ -226,6 +236,7 @@ Cris Bailiff | ||||
| Cristian Rodríguez | ||||
| Curt Bogmine | ||||
| Cyrill Osterwalder | ||||
| Cédric Connes | ||||
| Cédric Deltheil | ||||
| D. Flinkmann | ||||
| Da-Yoon Chung | ||||
| @@ -244,8 +255,14 @@ Dan Zitter | ||||
| Daniel Black | ||||
| Daniel Cater | ||||
| Daniel Egger | ||||
| Daniel Hwang | ||||
| Daniel Johnson | ||||
| Daniel Kahn Gillmor | ||||
| Daniel Lee Hwang | ||||
| Daniel Melani | ||||
| Daniel Mentz | ||||
| Daniel Seither | ||||
| Daniel Shahaf | ||||
| Daniel Steinberg | ||||
| Daniel Stenberg | ||||
| Daniel Theron | ||||
| @@ -259,6 +276,7 @@ Dave May | ||||
| Dave Reisner | ||||
| Dave Thompson | ||||
| Dave Vasilevsky | ||||
| Davey Shafik | ||||
| David Bau | ||||
| David Binderman | ||||
| David Blaikie | ||||
| @@ -288,6 +306,7 @@ David Woodhouse | ||||
| David Wright | ||||
| David Yan | ||||
| Dengminwen | ||||
| Denis Feklushkin | ||||
| Dennis Clarke | ||||
| Derek Higgins | ||||
| Detlef Schmier | ||||
| @@ -306,21 +325,25 @@ Dirk Manske | ||||
| Dmitri Shubin | ||||
| Dmitriy Sergeyev | ||||
| Dmitry Bartsevich | ||||
| Dmitry Eremin-Solenikov | ||||
| Dmitry Falko | ||||
| Dmitry Kurochkin | ||||
| Dmitry Popov | ||||
| Dmitry Rechkin | ||||
| Dmitry S. Baikov | ||||
| Dolbneff A.V | ||||
| Domenico Andreoli | ||||
| Dominick Meglio | ||||
| Dominique Leuenberger | ||||
| Doug Kaufman | ||||
| Doug Porter | ||||
| Douglas Creager | ||||
| Douglas E. Wegscheid | ||||
| Douglas Kilpatrick | ||||
| Douglas R. Horner | ||||
| Douglas Steinwand | ||||
| Dov Murik | ||||
| Drake Arconis | ||||
| Duane Cathey | ||||
| Duncan Mac-Vicar Prett | ||||
| Dustin Boswell | ||||
| @@ -335,6 +358,7 @@ Edward Rudd | ||||
| Edward Sheldrake | ||||
| Eelco Dolstra | ||||
| Eetu Ojanen | ||||
| Egon Eckert | ||||
| Eldar Zaitov | ||||
| Ellis Pritchard | ||||
| Elmira A Semenova | ||||
| @@ -352,12 +376,14 @@ Eric Lubin | ||||
| Eric Melville | ||||
| Eric Mertens | ||||
| Eric Rautman | ||||
| Eric Ridge | ||||
| Eric S. Raymond | ||||
| Eric Thelin | ||||
| Eric Vergnaud | ||||
| Eric Wong | ||||
| Eric Young | ||||
| Erick Nuwendam | ||||
| Erik Janssen | ||||
| Erik Johansson | ||||
| Ernest Beinrohr | ||||
| Erwan Legrand | ||||
| @@ -372,9 +398,11 @@ Fabian Hiernaux | ||||
| Fabian Keil | ||||
| Fabrizio Ammollo | ||||
| Fedor Karpelevitch | ||||
| Feist Josselin | ||||
| Felix Yan | ||||
| Felix von Leitner | ||||
| Feng Tu | ||||
| Flavio Medeiros | ||||
| Florian Schoppmann | ||||
| Florian Weimer | ||||
| Forrest Cahoon | ||||
| @@ -390,6 +418,7 @@ François Charlier | ||||
| Fred Machado | ||||
| Fred New | ||||
| Fred Noz | ||||
| Fred Stluka | ||||
| Frederic Lepied | ||||
| Fredrik Thulin | ||||
| Gabriel Kuri | ||||
| @@ -427,6 +456,7 @@ Glenn Sheridan | ||||
| Gordon Marler | ||||
| Gorilla Maguila | ||||
| Grant Erickson | ||||
| Grant Pannell | ||||
| Greg Hewgill | ||||
| Greg Morse | ||||
| Greg Onufer | ||||
| @@ -439,6 +469,7 @@ Guido Berhoerster | ||||
| Guillaume Arluison | ||||
| Gunter Knauf | ||||
| Gustaf Hui | ||||
| Gustavo Grieco | ||||
| Gwenole Beauchesne | ||||
| Gökhan Şengün | ||||
| Götz Babin-Ebell | ||||
| @@ -483,6 +514,7 @@ Iida Yosiaki | ||||
| Ilguiz Latypov | ||||
| Ilja van Sprundel | ||||
| Immanuel Gregoire | ||||
| Inca R | ||||
| Ingmar Runge | ||||
| Ingo Ralf Blum | ||||
| Ingo Wilken | ||||
| @@ -493,6 +525,7 @@ Jack Zhang | ||||
| Jacky Lam | ||||
| Jacob Meuser | ||||
| Jacob Moshenko | ||||
| Jactry Zeng | ||||
| Jad Chamcham | ||||
| Jakub Zakrzewski | ||||
| James Bursa | ||||
| @@ -521,6 +554,7 @@ Jason Liu | ||||
| Jason McDonald | ||||
| Jason S. Priebe | ||||
| Javier Barroso | ||||
| Javier G. Sogo | ||||
| Jay Austin | ||||
| Jayesh A Shah | ||||
| Jaz Fresh | ||||
| @@ -540,6 +574,7 @@ Jeff Lawson | ||||
| Jeff Phillips | ||||
| Jeff Pohlmeyer | ||||
| Jeff Weber | ||||
| Jens Rantil | ||||
| Jeremy Friesner | ||||
| Jeremy Huddleston | ||||
| Jeremy Lin | ||||
| @@ -567,6 +602,7 @@ Joe Halpin | ||||
| Joe Malicki | ||||
| Joe Mason | ||||
| Joel Chen | ||||
| Joel Depooter | ||||
| Jofell Gallardo | ||||
| Johan Anderson | ||||
| Johan Lantz | ||||
| @@ -585,6 +621,7 @@ John Janssen | ||||
| John Joseph Bachir | ||||
| John Kelly | ||||
| John Lask | ||||
| John Levon | ||||
| John Lightsey | ||||
| John Marino | ||||
| John Marshall | ||||
| @@ -603,6 +640,7 @@ Jon Torrey | ||||
| Jon Travis | ||||
| Jon Turner | ||||
| Jonas Forsman | ||||
| Jonas Minnberg | ||||
| Jonas Schnelli | ||||
| Jonatan Lander | ||||
| Jonatan Vela | ||||
| @@ -631,6 +669,7 @@ Julien Nabet | ||||
| Julien Royer | ||||
| Jun-ichiro itojun Hagino | ||||
| Jurij Smakov | ||||
| Justin Ehlert | ||||
| Justin Fletcher | ||||
| Justin Karneges | ||||
| Justin Maggard | ||||
| @@ -642,6 +681,7 @@ Kai Sommerfeld | ||||
| Kai-Uwe Rommel | ||||
| Kalle Vahlman | ||||
| Kamil Dudka | ||||
| Kang Lin | ||||
| Kang-Jin Lee | ||||
| Karl Moerder | ||||
| Karol Pietrzak | ||||
| @@ -673,6 +713,7 @@ Krishnendu Majumdar | ||||
| Krister Johansen | ||||
| Kristian Gunstone | ||||
| Kristian Köhntopp | ||||
| Kurt Fankhauser | ||||
| Kyle J. McKay | ||||
| Kyle L. Huff | ||||
| Kyle Sallee | ||||
| @@ -689,6 +730,7 @@ Lars Nilsson | ||||
| Lars Torben Wilson | ||||
| Lau Hang Kin | ||||
| Laurent Rabret | ||||
| Lauri Kasanen | ||||
| Legoff Vincent | ||||
| Lehel Bernadt | ||||
| Leif W | ||||
| @@ -704,7 +746,9 @@ Linas Vepstas | ||||
| Lindley French | ||||
| Ling Thio | ||||
| Linus Nielsen Feltzing | ||||
| Lior Kaplan | ||||
| Lisa Xu | ||||
| Liviu Chircu | ||||
| Liza Alenchery | ||||
| Lluís Batlle i Rossell | ||||
| Loic Dachary | ||||
| @@ -715,6 +759,7 @@ Lucas Adamski | ||||
| Lucas Pardue | ||||
| Ludek Finstrle | ||||
| Ludovico Cavedon | ||||
| Lukas Ruzicka | ||||
| Lukasz Czekierda | ||||
| Luke Amery | ||||
| Luke Call | ||||
| @@ -725,6 +770,7 @@ Maciej Karpiuk | ||||
| Maciej Puzio | ||||
| Maciej W. Rozycki | ||||
| Maks Naumov | ||||
| Maksim Stsepanenka | ||||
| Mamoru Tasaka | ||||
| Mandy Wu | ||||
| Manfred Schwarb | ||||
| @@ -808,6 +854,7 @@ Michael Day | ||||
| Michael Goffioul | ||||
| Michael Jahn | ||||
| Michael Jerris | ||||
| Michael Kalinin | ||||
| Michael Kaufmann | ||||
| Michael Mealling | ||||
| Michael Mueller | ||||
| @@ -818,8 +865,10 @@ Michael Stillwell | ||||
| Michael Wallner | ||||
| Michal Bonino | ||||
| Michal Marek | ||||
| Michał Fita | ||||
| Michał Górny | ||||
| Michał Kowalczyk | ||||
| Michał Piechowski | ||||
| Michel Promonet | ||||
| Michele Bini | ||||
| Miguel Angel | ||||
| @@ -851,6 +900,7 @@ Nagai H | ||||
| Nathan Coulter | ||||
| Nathan O'Sullivan | ||||
| Nathanael Nerode | ||||
| Nathaniel Waisbrot | ||||
| Naveen Chandran | ||||
| Naveen Noel | ||||
| Neil Bowers | ||||
| @@ -877,6 +927,7 @@ Nis Jorgensen | ||||
| Nobuhiro Ban | ||||
| Nodak Sodak | ||||
| Norbert Frese | ||||
| Norbert Kett | ||||
| Norbert Novotny | ||||
| Ofer | ||||
| Ola Mork | ||||
| @@ -886,8 +937,10 @@ Oliver Gondža | ||||
| Oliver Kuckertz | ||||
| Oliver Schindler | ||||
| Olivier Berger | ||||
| Orange Tsai | ||||
| Oren Souroujon | ||||
| Oren Tirosh | ||||
| Orgad Shaneh | ||||
| Ori Avtalion | ||||
| Oscar Koeroo | ||||
| Oscar Norlander | ||||
| @@ -916,6 +969,7 @@ Paul Marks | ||||
| Paul Marquis | ||||
| Paul Moore | ||||
| Paul Nolan | ||||
| Paul Oliver | ||||
| Paul Querna | ||||
| Paul Saab | ||||
| Pavel Cenek | ||||
| @@ -973,11 +1027,13 @@ Quinn Slack | ||||
| Radu Simionescu | ||||
| Rafa Muyo | ||||
| Rafael Sagula | ||||
| Rafayel Mkrtchyan | ||||
| Rafaël Carré | ||||
| Rainer Canavan | ||||
| Rainer Jung | ||||
| Rainer Koenig | ||||
| Rajesh Naganathan | ||||
| Rajkumar Mandal | ||||
| Ralf S. Engelschall | ||||
| Ralph Beckmann | ||||
| Ralph Mitchell | ||||
| @@ -987,6 +1043,7 @@ Ravi Pratap | ||||
| Ray Dassen | ||||
| Ray Pekowski | ||||
| Ray Satiro | ||||
| Razvan Cojocaru | ||||
| Reinout van Schouwen | ||||
| Remi Gacogne | ||||
| Renato Botelho | ||||
| @@ -1007,10 +1064,12 @@ Richard Bramante | ||||
| Richard Clayton | ||||
| Richard Cooper | ||||
| Richard Gorton | ||||
| Richard Hosking | ||||
| Richard Michael | ||||
| Richard Moore | ||||
| Richard Prescott | ||||
| Richard Silverman | ||||
| Richard van den Berg | ||||
| Rick Jones | ||||
| Rick Richardson | ||||
| Rob Crittenden | ||||
| @@ -1034,6 +1093,7 @@ Robson Braga Araujo | ||||
| Rodney Simmons | ||||
| Rodric Glaser | ||||
| Rodrigo Silva | ||||
| Roger Leigh | ||||
| Roland Blom | ||||
| Roland Krikava | ||||
| Roland Zimmermann | ||||
| @@ -1058,6 +1118,7 @@ Salvador Dávila | ||||
| Salvatore Sorrentino | ||||
| Sam Deane | ||||
| Sam Hurst | ||||
| Sam Roth | ||||
| Sam Schanken | ||||
| Sampo Kellomaki | ||||
| Samuel Díaz García | ||||
| @@ -1076,6 +1137,8 @@ Scott Barrett | ||||
| Scott Cantor | ||||
| Scott Davis | ||||
| Scott McCreary | ||||
| Sean Boudreau | ||||
| Sebastian Pohlschmidt | ||||
| Sebastian Rasmussen | ||||
| Senthil Raja Velu | ||||
| Sergei Nikulov | ||||
| @@ -1136,15 +1199,18 @@ Sune Ahlgren | ||||
| Sven Anders | ||||
| Sven Neuhaus | ||||
| Sven Wegener | ||||
| Svyatoslav Mishyn | ||||
| Symeon Paraschoudis | ||||
| Sébastien Willemijns | ||||
| T. Bharath | ||||
| T. Yamada | ||||
| TJ Saunders | ||||
| Tae Hyoung Ahn | ||||
| Taneli Vahakangas | ||||
| Tanguy Fautre | ||||
| Tatsuhiro Tsujikawa | ||||
| Temprimus | ||||
| Terri Oda | ||||
| Thomas Braun | ||||
| Thomas J. Moore | ||||
| Thomas Klausner | ||||
| @@ -1153,6 +1219,7 @@ Thomas Lopatic | ||||
| Thomas Ruecker | ||||
| Thomas Schwinge | ||||
| Thomas Tonino | ||||
| Thorsten Schöning | ||||
| Tiit Pikma | ||||
| Till Maas | ||||
| Tim Ansell | ||||
| @@ -1163,8 +1230,9 @@ Tim Costello | ||||
| Tim Harder | ||||
| Tim Heckman | ||||
| Tim Newsome | ||||
| Tim Ruehsen | ||||
| Tim Rühsen | ||||
| Tim Sneddon | ||||
| Tim Stack | ||||
| Tim Starling | ||||
| Timo Sirainen | ||||
| Tinus van den Berg | ||||
| @@ -1174,7 +1242,6 @@ Tobias Stoeckmann | ||||
| Toby Peterson | ||||
| Todd A Ouska | ||||
| Todd Kulesza | ||||
| Todd Ouska | ||||
| Todd Vierling | ||||
| Tom Benoist | ||||
| Tom Donovan | ||||
| @@ -1191,6 +1258,7 @@ Tomas Hoger | ||||
| Tomas Mlcoch | ||||
| Tomas Pospisek | ||||
| Tomas Szepe | ||||
| Tomas Tomecek | ||||
| Tomasz Kojm | ||||
| Tomasz Lacki | ||||
| Tommie Gannert | ||||
| @@ -1218,6 +1286,7 @@ Victor Snezhko | ||||
| Vijay Panghal | ||||
| Vikram Saxena | ||||
| Viktor Szakáts | ||||
| Ville Skyttä | ||||
| Vilmos Nebehaj | ||||
| Vincent Bronner | ||||
| Vincent Le Normand | ||||
| @@ -1232,6 +1301,7 @@ Vojtech Janota | ||||
| Vojtech Minarik | ||||
| Vojtěch Král | ||||
| Vsevolod Novikov | ||||
| W. Mark Kubacki | ||||
| Waldek Kozba | ||||
| Walter J. Mack | ||||
| Ward Willats | ||||
| @@ -1249,6 +1319,7 @@ Wojciech Zwiefka | ||||
| Wouter Van Rooy | ||||
| Wu Yongzheng | ||||
| Xavier Bouchoux | ||||
| Xiangbin Li | ||||
| Yaakov Selkowitz | ||||
| Yamada Yasuharu | ||||
| Yang Tse | ||||
| @@ -1271,4 +1342,5 @@ Zvi Har'El | ||||
| nk | ||||
| swalkaus at yahoo.com | ||||
| tommink[at]post.pl | ||||
| Štefan Kremeň | ||||
| Никита Дорохин | ||||
|   | ||||
| @@ -49,3 +49,6 @@ s/tetetest tetetest// | ||||
| s/Jiří Hruška/Jiri Hruska/ | ||||
| s/Viktor Szakats/Viktor Szakáts/ | ||||
| s/Jonathan Cardoso/Jonathan Cardoso Machado/ | ||||
| s/Linus Nielsen/Linus Nielsen Feltzing/ | ||||
| s/Todd Ouska$/Todd A Ouska/ | ||||
| s/Tim Ruehsen/Tim Rühsen/ | ||||
|   | ||||
							
								
								
									
										181
									
								
								docs/TODO
									
									
									
									
									
								
							
							
						
						
									
										181
									
								
								docs/TODO
									
									
									
									
									
								
							| @@ -25,11 +25,18 @@ | ||||
|  1.7 Detect when called from within callbacks | ||||
|  1.8 Allow SSL (HTTPS) to proxy | ||||
|  1.9 Cache negative name resolves | ||||
|  1.10 Support IDNA2008 | ||||
|  1.11 minimize dependencies with dynamicly loaded modules | ||||
|  1.12 have form functions use CURL handle argument | ||||
|  1.13 Add CURLOPT_MAIL_CLIENT option | ||||
|  1.14 Typesafe curl_easy_setopt() | ||||
|  1.15 TCP Fast Open | ||||
|  | ||||
|  2. libcurl - multi interface | ||||
|  2.1 More non-blocking | ||||
|  2.2 Fix HTTP Pipelining for PUT | ||||
|  2.3 Better support for same name resolves | ||||
|  2.2 Better support for same name resolves | ||||
|  2.3 Non-blocking curl_multi_remove_handle() | ||||
|  2.4 Split connect and authentication process | ||||
|  | ||||
|  3. Documentation | ||||
|  3.1 Update date and version in man pages | ||||
| @@ -49,6 +56,8 @@ | ||||
|  5.3 Rearrange request header order | ||||
|  5.4 SPDY | ||||
|  5.5 auth= in URLs | ||||
|  5.6 Refuse "downgrade" redirects | ||||
|  5.7 More compressions | ||||
|  | ||||
|  6. TELNET | ||||
|  6.1 ditch stdin | ||||
| @@ -111,6 +120,7 @@ | ||||
|  17.7 warning when sending binary output to terminal | ||||
|  17.8 offer color-coded HTTP header output | ||||
|  17.9 Choose the name of file in braces for complex URLs | ||||
|  17.10 improve how curl works in a windows console window | ||||
|  | ||||
|  18. Build | ||||
|  18.1 roffit | ||||
| @@ -136,8 +146,6 @@ | ||||
|  21.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE | ||||
|  21.7 remove progress meter from libcurl | ||||
|  21.8 remove 'curl_httppost' from public | ||||
|  21.9 have form functions use CURL handle argument | ||||
|  21.10 Add CURLOPT_MAIL_CLIENT option | ||||
|  | ||||
| ============================================================================== | ||||
|  | ||||
| @@ -207,7 +215,7 @@ | ||||
|  | ||||
|  To prevent local users from snooping on your traffic to the proxy. Supported | ||||
|  by Chrome already: | ||||
|  http://www.chromium.org/developers/design-documents/secure-web-proxy | ||||
|  https://www.chromium.org/developers/design-documents/secure-web-proxy | ||||
|  | ||||
|  ...and by Firefox soon: | ||||
|  https://bugzilla.mozilla.org/show_bug.cgi?id=378637 | ||||
| @@ -217,6 +225,64 @@ | ||||
|  A name resolve that has failed is likely to fail when made again within a | ||||
|  short period of time. Currently we only cache positive responses. | ||||
|  | ||||
| 1.10 Support IDNA2008 | ||||
|  | ||||
|  International Domain Names are supported in libcurl since years back, powered | ||||
|  by libidn. libidn implements IDNA2003 which has been superseded by IDNA2008. | ||||
|  libidn2 is an existing library offering support for IDNA2008. | ||||
|  | ||||
| 1.11 minimize dependencies with dynamicly loaded modules | ||||
|  | ||||
|  We can create a system with loadable modules/plug-ins, where these modules | ||||
|  would be the ones that link to 3rd party libs. That would allow us to avoid | ||||
|  having to load ALL dependencies since only the necessary ones for this | ||||
|  app/invoke/used protocols would be necessary to load.  See | ||||
|  https://github.com/bagder/curl/issues/349 | ||||
|  | ||||
| 1.12 have form functions use CURL handle argument | ||||
|  | ||||
|  curl_formadd() and curl_formget() both currently have no CURL handle | ||||
|  argument, but both can use a callback that is set in the easy handle, and | ||||
|  thus curl_formget() with callback cannot function without first having | ||||
|  curl_easy_perform() (or similar) called - which is hard to grasp and a design | ||||
|  mistake. | ||||
|  | ||||
|  The curl_formadd() design can probably also be reconsidered to make it easier | ||||
|  to use and less error-prone. Probably easiest by splitting it into several | ||||
|  function calls. | ||||
|  | ||||
| 1.13 Add CURLOPT_MAIL_CLIENT option | ||||
|  | ||||
|  Rather than use the URL to specify the mail client string to present in the | ||||
|  HELO and EHLO commands, libcurl should support a new CURLOPT specifically for | ||||
|  specifying this data as the URL is non-standard and to be honest a bit of a | ||||
|  hack ;-) | ||||
|  | ||||
|  Please see the following thread for more information: | ||||
|  http://curl.haxx.se/mail/lib-2012-05/0178.html | ||||
|  | ||||
| 1.14 Typesafe curl_easy_setopt() | ||||
|  | ||||
|  One of the most common problems in libcurl using applications is the lack of | ||||
|  type checks for curl_easy_setopt() which happens because it accepts varargs | ||||
|  and thus can take any type. | ||||
|  | ||||
|  One possible solution to this is to introduce a few different versions of the | ||||
|  setopt version for the different kinds of data you can set. | ||||
|  | ||||
|   curl_easy_set_num() - sets a long value | ||||
|  | ||||
|   curl_easy_set_large() - sets a curl_off_t value | ||||
|  | ||||
|   curl_easy_set_ptr() - sets a pointer | ||||
|  | ||||
|   curl_easy_set_cb() - sets a callback PLUS its callback data | ||||
|  | ||||
| 1.15 TCP Fast Open | ||||
|  | ||||
|  RFC 7413 defines how to include data already in the TCP SYN handshake to | ||||
|  reduce latency. | ||||
|  | ||||
|  | ||||
| 2. libcurl - multi interface | ||||
|  | ||||
| @@ -234,13 +300,7 @@ | ||||
|  - The "DONE" operation (post transfer protocol-specific actions) for the | ||||
|    protocols SFTP, SMTP, FTP. Fixing Curl_done() for this is a worthy task. | ||||
|  | ||||
| 2.2 Fix HTTP Pipelining for PUT | ||||
|  | ||||
|  HTTP Pipelining can be a way to greatly enhance performance for multiple | ||||
|  serial requests and currently libcurl only supports that for HEAD and GET | ||||
|  requests but it should also be possible for PUT. | ||||
|  | ||||
| 2.3 Better support for same name resolves | ||||
| 2.2 Better support for same name resolves | ||||
|  | ||||
|  If a name resolve has been initiated for name NN and a second easy handle | ||||
|  wants to resolve that name as well, make it wait for the first resolve to end | ||||
| @@ -248,6 +308,20 @@ | ||||
|  especially needed when adding many simultaneous handles using the same host | ||||
|  name when the DNS resolver can get flooded. | ||||
|  | ||||
| 2.3 Non-blocking curl_multi_remove_handle() | ||||
|  | ||||
|  The multi interface has a few API calls that assume a blocking behavior, like | ||||
|  add_handle() and remove_handle() which limits what we can do internally. The | ||||
|  multi API need to be moved even more into a single function that "drives" | ||||
|  everything in a non-blocking manner and signals when something is done. A | ||||
|  remove or add would then only ask for the action to get started and then | ||||
|  multi_perform() etc still be called until the add/remove is completed. | ||||
|  | ||||
| 2.4 Split connect and authentication process | ||||
|  | ||||
|  The multi interface treats the authentication process as part of the connect | ||||
|  phase. As such any failures during authentication won't trigger the relevant | ||||
|  QUIT or LOGOFF for protocols such as IMAP, POP3 and SMTP. | ||||
|  | ||||
| 3. Documentation | ||||
|  | ||||
| @@ -264,7 +338,7 @@ | ||||
|  HOST is a command for a client to tell which host name to use, to offer FTP | ||||
|  servers named-based virtual hosting: | ||||
|  | ||||
|  http://tools.ietf.org/html/rfc7151 | ||||
|  https://tools.ietf.org/html/rfc7151 | ||||
|  | ||||
| 4.2 Alter passive/active on failure and retry | ||||
|  | ||||
| @@ -348,6 +422,22 @@ This is not detailed in any FTP specification. | ||||
|  | ||||
|  Additionally this should be implemented for proxy base URLs as well. | ||||
|  | ||||
| 5.6 Refuse "downgrade" redirects | ||||
|  | ||||
|  See https://github.com/bagder/curl/issues/226 | ||||
|  | ||||
|  Consider a way to tell curl to refuse to "downgrade" protocol with a redirect | ||||
|  and/or possibly a bit that refuses redirect to change protocol completely. | ||||
|  | ||||
| 5.7 More compressions | ||||
|  | ||||
|  Compression algorithms that perform better than gzip are being considered for | ||||
|  use and inclusion in existing browsers. For example 'brotli'. If servers | ||||
|  follow along it is a good reason for us to also allow users to take advantage | ||||
|  of this. The algorithm: https://github.com/google/brotli The Firefox bug: | ||||
|  https://bugzilla.mozilla.org/show_bug.cgi?id=366559 | ||||
|  | ||||
|  | ||||
| 6. TELNET | ||||
|  | ||||
| 6.1 ditch stdin | ||||
| @@ -420,7 +510,7 @@ be the same as/similar to FTP. | ||||
|  | ||||
| 11.2 Honor file timestamps | ||||
|  | ||||
| The timestamp of the transfered file should reflect that of the original file. | ||||
| The timestamp of the transferred file should reflect that of the original file. | ||||
|  | ||||
| 11.3 Use NTLMv2 | ||||
|  | ||||
| @@ -484,7 +574,7 @@ Currently the SMB authentication uses NTLMv1. | ||||
|  | ||||
|  DNS-Based Authentication of Named Entities (DANE) is a way to provide SSL | ||||
|  keys and certs over DNS using DNSSEC as an alternative to the CA model. | ||||
|  http://www.rfc-editor.org/rfc/rfc6698.txt | ||||
|  https://www.rfc-editor.org/rfc/rfc6698.txt | ||||
|  | ||||
|  An initial patch was posted by Suresh Krishnaswamy on March 7th 2013 | ||||
|  (http://curl.haxx.se/mail/lib-2013-03/0075.html) but it was a too simple | ||||
| @@ -514,7 +604,7 @@ Currently the SMB authentication uses NTLMv1. | ||||
|  Therefore support for the existing -E/--cert and --key options should be | ||||
|  implemented by supplying a custom certificate to the SChannel APIs, see: | ||||
|  - Getting a Certificate for Schannel | ||||
|    http://msdn.microsoft.com/en-us/library/windows/desktop/aa375447.aspx | ||||
|    https://msdn.microsoft.com/en-us/library/windows/desktop/aa375447.aspx | ||||
|  | ||||
| 15.2 Add support for custom server certificate validation | ||||
|  | ||||
| @@ -525,7 +615,7 @@ Currently the SMB authentication uses NTLMv1. | ||||
|  Therefore support for the existing --cacert or --capath options should be | ||||
|  implemented by supplying a custom certificate to the SChannel APIs, see: | ||||
|  - Getting a Certificate for Schannel | ||||
|    http://msdn.microsoft.com/en-us/library/windows/desktop/aa375447.aspx | ||||
|    https://msdn.microsoft.com/en-us/library/windows/desktop/aa375447.aspx | ||||
|  | ||||
| 15.3 Add support for the --ciphers option | ||||
|  | ||||
| @@ -536,7 +626,7 @@ Currently the SMB authentication uses NTLMv1. | ||||
|  Therefore support for the existing --ciphers option should be implemented | ||||
|  by mapping the OpenSSL/GnuTLS cipher suites to the SChannel APIs, see | ||||
|  - Specifying Schannel Ciphers and Cipher Strengths | ||||
|    http://msdn.microsoft.com/en-us/library/windows/desktop/aa380161.aspx | ||||
|    https://msdn.microsoft.com/en-us/library/windows/desktop/aa380161.aspx | ||||
|  | ||||
| 16. SASL | ||||
|  | ||||
| @@ -599,32 +689,38 @@ Currently the SMB authentication uses NTLMv1. | ||||
|  | ||||
| 17.6 warning when setting an option | ||||
|  | ||||
|   Display a warning when libcurl returns an error when setting an option. | ||||
|   This can be useful to tell when support for a particular feature hasn't been | ||||
|   compiled into the library. | ||||
|  Display a warning when libcurl returns an error when setting an option. | ||||
|  This can be useful to tell when support for a particular feature hasn't been | ||||
|  compiled into the library. | ||||
|  | ||||
| 17.7 warning when sending binary output to terminal | ||||
|  | ||||
|   Provide a way that prompts the user for confirmation before binary data is | ||||
|   sent to the terminal, much in the style 'less' does it. | ||||
|  Provide a way that prompts the user for confirmation before binary data is | ||||
|  sent to the terminal, much in the style 'less' does it. | ||||
|  | ||||
| 17.8 offer color-coded HTTP header output | ||||
|  | ||||
|   By offering different color output on the header name and the header | ||||
|   contents, they could be made more readable and thus help users working on | ||||
|   HTTP services. | ||||
|  By offering different color output on the header name and the header | ||||
|  contents, they could be made more readable and thus help users working on | ||||
|  HTTP services. | ||||
|  | ||||
| 17.9 Choose the name of file in braces for complex URLs | ||||
|  | ||||
|   When using braces to download a list of URLs and you use complicated names | ||||
|   in the list of alternatives, it could be handy to allow curl to use other | ||||
|   names when saving. | ||||
|  When using braces to download a list of URLs and you use complicated names | ||||
|  in the list of alternatives, it could be handy to allow curl to use other | ||||
|  names when saving. | ||||
|  | ||||
|   Consider a way to offer that. Possibly like | ||||
|   {partURL1:name1,partURL2:name2,partURL3:name3} where the name following the | ||||
|   colon is the output name. | ||||
|  Consider a way to offer that. Possibly like | ||||
|  {partURL1:name1,partURL2:name2,partURL3:name3} where the name following the | ||||
|  colon is the output name. | ||||
|  | ||||
|   See https://github.com/bagder/curl/issues/221 | ||||
|  See https://github.com/bagder/curl/issues/221 | ||||
|  | ||||
| 17.10 improve how curl works in a windows console window | ||||
|  | ||||
|  If you pull the scrollbar when transferring with curl in a Windows console | ||||
|  window, the transfer is interrupted and can get disconnected. This can | ||||
|  probably be improved. See https://github.com/bagder/curl/issues/322 | ||||
|  | ||||
|  | ||||
| 18. Build | ||||
| @@ -775,22 +871,3 @@ Currently the SMB authentication uses NTLMv1. | ||||
|  | ||||
|  Changing them to return a private handle will benefit the implementation and | ||||
|  allow us much greater freedoms while still maintaining a solid API and ABI. | ||||
|  | ||||
| 21.9 have form functions use CURL handle argument | ||||
|  | ||||
|  curl_formadd() and curl_formget() both currently have no CURL handle | ||||
|  argument, but both can use a callback that is set in the easy handle, and | ||||
|  thus curl_formget() with callback cannot function without first having | ||||
|  curl_easy_perform() (or similar) called - which is hard to grasp and a design | ||||
|  mistake. | ||||
|  | ||||
| 21.10 Add CURLOPT_MAIL_CLIENT option | ||||
|  | ||||
|  Rather than use the URL to specify the mail client string to present in the | ||||
|  HELO and EHLO commands, libcurl should support a new CURLOPT specifically for | ||||
|  specifying this data as the URL is non-standard and to be honest a bit of a | ||||
|  hack ;-) | ||||
|  | ||||
|  Please see the following thread for more information: | ||||
|  http://curl.haxx.se/mail/lib-2012-05/0178.html | ||||
|   | ||||
|   | ||||
| @@ -1,22 +1,18 @@ | ||||
|                                   _   _ ____  _ | ||||
|                               ___| | | |  _ \| | | ||||
|                              / __| | | | |_) | | | ||||
|                             | (__| |_| |  _ <| |___ | ||||
|                              \___|\___/|_| \_\_____| | ||||
|  | ||||
| Version Numbers and Releases | ||||
| ============================ | ||||
|  | ||||
|  Curl is not only curl. Curl is also libcurl. They're actually individually | ||||
|  versioned, but they mostly follow each other rather closely. | ||||
|  | ||||
|  The version numbering is always built up using the same system: | ||||
|  | ||||
|         X.Y[.Z] | ||||
|         X.Y.Z | ||||
|  | ||||
|  Where | ||||
|    X is main version number | ||||
|    Y is release number | ||||
|    Z is patch number | ||||
|   - X is main version number | ||||
|   - Y is release number | ||||
|   - Z is patch number | ||||
|  | ||||
| ## Bumping numbers | ||||
|  | ||||
|  One of these numbers will get bumped in each new release. The numbers to the | ||||
|  right of a bumped number will be reset to zero. If Z is zero, it may not be | ||||
| @@ -57,4 +53,4 @@ Version Numbers and Releases | ||||
|  release. It makes comparisons with greater than and less than work. | ||||
|  | ||||
|  This number is also available as three separate defines: | ||||
|  LIBCURL_VERSION_MAJOR, LIBCURL_VERSION_MINOR and LIBCURL_VERSION_PATCH. | ||||
|  `LIBCURL_VERSION_MAJOR`, `LIBCURL_VERSION_MINOR` and `LIBCURL_VERSION_PATCH`. | ||||
|   | ||||
							
								
								
									
										161
									
								
								docs/curl.1
									
									
									
									
									
								
							
							
						
						
									
										161
									
								
								docs/curl.1
									
									
									
									
									
								
							| @@ -39,8 +39,7 @@ resume, Metalink, and more. As you will see below, the number of features will | ||||
| make your head spin! | ||||
|  | ||||
| curl is powered by libcurl for all transfer-related features. See | ||||
| .BR libcurl (3) | ||||
| for details. | ||||
| \fIlibcurl(3)\fP for details. | ||||
| .SH URL | ||||
| The URL syntax is protocol-dependent. You'll find a detailed description in | ||||
| RFC 3986. | ||||
| @@ -172,10 +171,11 @@ a level of control). | ||||
| .IP "-2, --sslv2" | ||||
| (SSL) Forces curl to use SSL version 2 when negotiating with a remote SSL | ||||
| server. Sometimes curl is built without SSLv2 support. SSLv2 is widely | ||||
| considered insecure. | ||||
| considered insecure (see RFC 6176). | ||||
| .IP "-3, --sslv3" | ||||
| (SSL) Forces curl to use SSL version 3 when negotiating with a remote SSL | ||||
| server. Sometimes curl is built without SSLv3 support. | ||||
| server. Sometimes curl is built without SSLv3 support. SSLv3 is widely | ||||
| considered insecure (see RFC 7568). | ||||
| .IP "-4, --ipv4" | ||||
| This option tells curl to resolve names to IPv4 addresses only, and not for | ||||
| example try IPv6. | ||||
| @@ -213,7 +213,7 @@ be in the format "NAME1=VALUE1; NAME2=VALUE2". | ||||
|  | ||||
| If no '=' symbol is used in the line, it is treated as a filename to use to | ||||
| read previously stored cookie lines from, which should be used in this session | ||||
| if they match. Using this method also activates the "cookie parser" which will | ||||
| if they match. Using this method also activates the cookie engine which will | ||||
| make curl record incoming cookies too, which may be handy if you're using this | ||||
| in combination with the \fI-L, --location\fP option. The file format of the | ||||
| file to read cookies from should be plain HTTP headers or the Netscape/Mozilla | ||||
| @@ -223,6 +223,15 @@ The file specified with \fI-b, --cookie\fP is only used as input. No cookies | ||||
| will be written to the file. To store cookies, use the \fI-c, --cookie-jar\fP | ||||
| option. | ||||
|  | ||||
| Exercise caution if you are using this option and multiple transfers may occur. | ||||
| If you use the NAME1=VALUE1; format, or in a file use the Set-Cookie format and | ||||
| don't specify a domain, then the cookie is sent for any domain (even after | ||||
| redirects are followed) and cannot be modified by a server-set cookie. If the | ||||
| cookie engine is enabled and a server sets a cookie of the same name then both | ||||
| will be sent on a future transfer to that server, likely not what you intended. | ||||
| To address these issues set a domain in Set-Cookie (doing that will include | ||||
| sub-domains) or use the Netscape format. | ||||
|  | ||||
| If this option is used several times, the last one will be used. | ||||
| .IP "-B, --use-ascii" | ||||
| (FTP/LDAP) Enable ASCII transfer. For FTP, this can also be enforced by using | ||||
| @@ -254,6 +263,9 @@ won't fail or even report an error clearly. Using -v will get a warning | ||||
| displayed, but that is the only visible feedback you get about this possibly | ||||
| lethal situation. | ||||
|  | ||||
| Since 7.43.0 cookies that were imported in the Set-Cookie format without a | ||||
| domain name are not exported by this option. | ||||
|  | ||||
| If this option is used several times, the last specified file name will be | ||||
| used. | ||||
| .IP "-C, --continue-at <offset>" | ||||
| @@ -269,11 +281,11 @@ If this option is used several times, the last one will be used. | ||||
| .IP "--ciphers <list of ciphers>" | ||||
| (SSL) Specifies which ciphers to use in the connection. The list of ciphers | ||||
| must specify valid ciphers. Read up on SSL cipher list details on this URL: | ||||
| \fIhttp://www.openssl.org/docs/apps/ciphers.html\fP | ||||
| \fIhttps://www.openssl.org/docs/apps/ciphers.html\fP | ||||
|  | ||||
| NSS ciphers are done differently than OpenSSL and GnuTLS. The full list of NSS | ||||
| ciphers is in the NSSCipherSuite entry at this URL: | ||||
| \fIhttp://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html#Directives\fP | ||||
| \fIhttps://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html#Directives\fP | ||||
|  | ||||
| If this option is used several times, the last one will be used. | ||||
| .IP "--compressed" | ||||
| @@ -315,9 +327,10 @@ presses the submit button. This will cause curl to pass the data to the server | ||||
| using the content-type application/x-www-form-urlencoded.  Compare to | ||||
| \fI-F, --form\fP. | ||||
|  | ||||
| \fI-d, --data\fP is the same as \fI--data-ascii\fP. To post data purely binary, | ||||
| you should instead use the \fI--data-binary\fP option. To URL-encode the value | ||||
| of a form field you may use \fI--data-urlencode\fP. | ||||
| \fI-d, --data\fP is the same as \fI--data-ascii\fP. \fI--data-raw\fP is almost | ||||
| the same but does not have a special interpretation of the @ character. To | ||||
| post data purely binary, you should instead use the \fI--data-binary\fP option. | ||||
| To URL-encode the value of a form field you may use \fI--data-urlencode\fP. | ||||
|  | ||||
| If any of these options is used more than once on the same command line, the | ||||
| data pieces specified will be merged together with a separating | ||||
| @@ -329,7 +342,8 @@ read the data from, or - if you want curl to read the data from | ||||
| stdin. Multiple files can also be specified. Posting data from a file | ||||
| named 'foobar' would thus be done with \fI--data\fP @foobar. When --data is | ||||
| told to read from a file like that, carriage returns and newlines will be | ||||
| stripped out. | ||||
| stripped out. If you don't want the @ character to have a special | ||||
| interpretation use \fI--data-raw\fP instead. | ||||
| .IP "-D, --dump-header <file>" | ||||
| Write the protocol headers to the specified file. | ||||
|  | ||||
| @@ -354,6 +368,10 @@ and carriage returns are preserved and conversions are never done. | ||||
|  | ||||
| If this option is used several times, the ones following the first will append | ||||
| data as described in \fI-d, --data\fP. | ||||
| .IP "--data-raw <data>" | ||||
| (HTTP) This posts data similarly to \fI--data\fP but without the special | ||||
| interpretation of the @ character. See \fI-d, --data\fP. | ||||
| (Added in 7.43.0) | ||||
| .IP "--data-urlencode <data>" | ||||
| (HTTP) This posts data, similar to the other --data options with the exception | ||||
| that this performs URL-encoding. (Added in 7.18.0) | ||||
| @@ -470,10 +488,10 @@ If this option is used several times, the last one will be used. | ||||
| (SSL) Tells curl to use the specified client certificate file when getting a | ||||
| file with HTTPS, FTPS or another SSL-based protocol. The certificate must be | ||||
| in PKCS#12 format if using Secure Transport, or PEM format if using any other | ||||
| engine.  If the optional password isn't specified, it will be queried | ||||
| for on the terminal. Note that this option assumes a \&"certificate" file that | ||||
| is the private key and the private certificate concatenated! See \fI--cert\fP | ||||
| and \fI--key\fP to specify them independently. | ||||
| engine.  If the optional password isn't specified, it will be queried for on | ||||
| the terminal. Note that this option assumes a \&"certificate" file that is the | ||||
| private key and the client certificate concatenated! See \fI--cert\fP and | ||||
| \fI--key\fP to specify them independently. | ||||
|  | ||||
| If curl is built against the NSS SSL library then this option can tell | ||||
| curl the nickname of the certificate to use within the NSS database defined | ||||
| @@ -539,19 +557,22 @@ OpenSSL-powered curl to make SSL-connections much more efficiently than using | ||||
|  | ||||
| If this option is set, the default capath value will be ignored, and if it is | ||||
| used several times, the last one will be used. | ||||
| .IP "--pinnedpubkey <pinned public key>" | ||||
| (SSL) Tells curl to use the specified public key file to verify the peer. The | ||||
| file must contain a single public key in PEM or DER format. | ||||
| .IP "--pinnedpubkey <pinned public key (hashes)>" | ||||
| (SSL) Tells curl to use the specified public key file (or hashes) to verify the | ||||
| peer. This can be a path to a file which contains a single public key in PEM or | ||||
| DER format, or any number of base64 encoded sha256 hashes preceded by | ||||
| \'sha256//\' and separated by \';\' | ||||
|  | ||||
| When negotiating a TLS or SSL connection, the server sends a certificate | ||||
| indicating its identity. A public key is extracted from this certificate and | ||||
| if it does not exactly match the public key provided to this option, curl will | ||||
| abort the connection before sending or receiving any data. | ||||
|  | ||||
| This is currently only implemented in the OpenSSL, GnuTLS and GSKit backends. | ||||
| Added in 7.39.0 for OpenSSL, GnuTLS and GSKit. Added in 7.43.0 for NSS and | ||||
| wolfSSL/CyaSSL. sha256 support added in 7.44.0 for OpenSSL, | ||||
| GnuTLS, NSS and wolfSSL/CyaSSL. Other SSL backends not supported. | ||||
|  | ||||
| If this option is used several times, the last one will be used. | ||||
| (Added in 7.39.0) | ||||
| .IP "--cert-status" | ||||
| (SSL) Tells curl to verify the status of the server certificate by using the | ||||
| Certificate Status Request (aka. OCSP stapling) TLS extension. | ||||
| @@ -599,7 +620,9 @@ input: | ||||
| \fBcurl\fP -F password=@/etc/passwd www.mypasswords.com | ||||
|  | ||||
| To read content from stdin instead of a file, use - as the filename. This goes | ||||
| for both @ and < constructs. | ||||
| for both @ and < constructs. Unfortunately it does not support reading the | ||||
| file from a named pipe or similar, as it needs the full size before the | ||||
| transfer starts. | ||||
|  | ||||
| You can also tell curl what Content-Type to use by using 'type=', in a manner | ||||
| similar to: | ||||
| @@ -661,6 +684,7 @@ curl does one CWD with the full target directory and then operates on the file | ||||
| \&"normally" (like in the multicwd case). This is somewhat more standards | ||||
| compliant than 'nocwd' but without the full penalty of 'multicwd'. | ||||
| .RE | ||||
| .IP | ||||
| (Added in 7.15.1) | ||||
| .IP "--ftp-pasv" | ||||
| (FTP) Use passive mode for the data connection. Passive is the internal default | ||||
| @@ -765,10 +789,12 @@ This option can be used multiple times to add/replace/remove multiple headers. | ||||
| be the 128 bit MD5 checksum of the remote host's public key, curl will refuse | ||||
| the connection with the host unless the md5sums match. (Added in 7.17.1) | ||||
| .IP "--ignore-content-length" | ||||
| (HTTP) | ||||
| Ignore the Content-Length header. This is particularly useful for servers | ||||
| running Apache 1.x, which will report incorrect Content-Length for files | ||||
| larger than 2 gigabytes. | ||||
| For HTTP, Ignore the Content-Length header. This is particularly useful for | ||||
| servers running Apache 1.x, which will report incorrect Content-Length for | ||||
| files larger than 2 gigabytes. | ||||
|  | ||||
| For FTP (since 7.46.0), skip the RETR command to figure out the size before | ||||
| downloading a file. | ||||
| .IP "-i, --include" | ||||
| (HTTP) Include the HTTP-header in the output. The HTTP-header includes things | ||||
| like server-name, date of the document, HTTP-version and more... | ||||
| @@ -1053,13 +1079,10 @@ in Metalink file, hash check will fail. | ||||
| Makes curl scan the \fI.netrc\fP (\fI_netrc\fP on Windows) file in the user's | ||||
| home directory for login name and password. This is typically used for FTP on | ||||
| Unix. If used with HTTP, curl will enable user authentication. See | ||||
| .BR netrc(4) | ||||
| or | ||||
| .BR ftp(1) | ||||
| for details on the file format. Curl will not complain if that file | ||||
| doesn't have the right permissions (it should not be either world- or | ||||
| group-readable). The environment variable "HOME" is used to find the home | ||||
| directory. | ||||
| \fInetrc(5)\fP \fIftp(1)\fP for details on the file format. Curl will not | ||||
| complain if that file doesn't have the right permissions (it should not be | ||||
| either world- or group-readable). The environment variable "HOME" is used to | ||||
| find the home directory. | ||||
|  | ||||
| A quick and very simple example of how to setup a \fI.netrc\fP to allow curl | ||||
| to FTP to the machine host.domain.com with user name \&'myself' and password | ||||
| @@ -1221,7 +1244,7 @@ i.e "my.host.domain" to specify the machine | ||||
| make curl pick the same IP address that is already used for the control | ||||
| connection | ||||
| .RE | ||||
|  | ||||
| .IP | ||||
| If this option is used several times, the last one will be used. Disable the | ||||
| use of PORT with \fI--ftp-pasv\fP. Disable the attempt to use the EPRT command | ||||
| instead of PORT by using \fI--disable-eprt\fP. EPRT is really PORT++. | ||||
| @@ -1242,21 +1265,21 @@ this option set you tell it not to do that. | ||||
|  | ||||
| (Added in 7.42.0) | ||||
| .IP "--post301" | ||||
| (HTTP) Tells curl to respect RFC 2616/10.3.2 and not convert POST requests | ||||
| (HTTP) Tells curl to respect RFC 7230/6.4.2 and not convert POST requests | ||||
| into GET requests when following a 301 redirection. The non-RFC behaviour is | ||||
| ubiquitous in web browsers, so curl does the conversion by default to maintain | ||||
| consistency. However, a server may require a POST to remain a POST after such | ||||
| a redirection. This option is meaningful only when using \fI-L, --location\fP | ||||
| (Added in 7.17.1) | ||||
| .IP "--post302" | ||||
| (HTTP) Tells curl to respect RFC 2616/10.3.2 and not convert POST requests | ||||
| (HTTP) Tells curl to respect RFC 7230/6.4.3 and not convert POST requests | ||||
| into GET requests when following a 302 redirection. The non-RFC behaviour is | ||||
| ubiquitous in web browsers, so curl does the conversion by default to maintain | ||||
| consistency. However, a server may require a POST to remain a POST after such | ||||
| a redirection. This option is meaningful only when using \fI-L, --location\fP | ||||
| (Added in 7.19.1) | ||||
| .IP "--post303" | ||||
| (HTTP) Tells curl to respect RFC 2616/10.3.2 and not convert POST requests | ||||
| (HTTP) Tells curl to respect RFC 7230/6.4.4 and not convert POST requests | ||||
| into GET requests when following a 303 redirection. The non-RFC behaviour is | ||||
| ubiquitous in web browsers, so curl does the conversion by default to maintain | ||||
| consistency. However, a server may require a POST to remain a POST after such | ||||
| @@ -1303,9 +1326,40 @@ This option can be used multiple times, in which case the effect is the same | ||||
| as concatenating the protocols into one instance of the option. | ||||
|  | ||||
| (Added in 7.20.2) | ||||
| .IP "--proto-default <protocol>" | ||||
| Tells curl to use \fIprotocol\fP for any URL missing a scheme name. | ||||
|  | ||||
| Example: | ||||
|  | ||||
| .RS | ||||
| .IP "--proto-default https ftp.mozilla.org" | ||||
| https://ftp.mozilla.org | ||||
| .RE | ||||
|  | ||||
| An unknown or unsupported protocol causes error | ||||
| \fICURLE_UNSUPPORTED_PROTOCOL\fP. | ||||
|  | ||||
| This option does not change the default proxy protocol (http). | ||||
|  | ||||
| Without this option curl would make a guess based on the host, see \fI--url\fP | ||||
| for details. | ||||
|  | ||||
| (Added in 7.45.0) | ||||
| .IP "--proto-redir <protocols>" | ||||
| Tells curl to use the listed protocols after a redirect. See --proto for | ||||
| how protocols are represented. | ||||
| Tells curl to use the listed protocols on redirect. See --proto for how | ||||
| protocols are represented. | ||||
|  | ||||
| Example: | ||||
|  | ||||
| .RS | ||||
| .IP "--proto-redir -all,http,https" | ||||
| Allow only HTTP and HTTPS on redirect. | ||||
| .RE | ||||
|  | ||||
| By default curl will allow all protocols on redirect except several disabled | ||||
| for security reasons: Since 7.19.4 FILE and SCP are disabled, and since 7.40.0 | ||||
| SMB and SMBS are also disabled. Specifying \fIall\fP or \fI+all\fP enables all | ||||
| protocols on redirect, including those disabled for security. | ||||
|  | ||||
| (Added in 7.20.2) | ||||
| .IP "--proxy-anyauth" | ||||
| @@ -1326,6 +1380,11 @@ with a remote host. (Added in 7.17.1) | ||||
| .IP "--proxy-ntlm" | ||||
| Tells curl to use HTTP NTLM authentication when communicating with the given | ||||
| proxy. Use \fI--ntlm\fP for enabling NTLM with a remote host. | ||||
| .IP "--proxy-service-name <servicename>" | ||||
| This option allows you to change the service name for proxy negotiation. | ||||
|  | ||||
| Examples: --proxy-negotiate proxy-name \fI--proxy-service-name\fP sockd would use | ||||
| sockd/proxy-name.  (Added in 7.43.0). | ||||
| .IP "--proxy1.0 <proxyhost[:port]>" | ||||
| Use the specified HTTP 1.0 proxy. If the port number is not specified, it is | ||||
| assumed at port 1080. | ||||
| @@ -1415,15 +1474,12 @@ specifies the last 500 bytes | ||||
| specifies the bytes from offset 9500 and forward | ||||
| .TP | ||||
| .B 0-0,-1 | ||||
| specifies the first and last byte only(*)(H) | ||||
| .TP | ||||
| .B 500-700,600-799 | ||||
| specifies 300 bytes from offset 500(H) | ||||
| specifies the first and last byte only(*)(HTTP) | ||||
| .TP | ||||
| .B 100-199,500-599 | ||||
| specifies two separate 100-byte ranges(*)(H) | ||||
| specifies two separate 100-byte ranges(*) (HTTP) | ||||
| .RE | ||||
|  | ||||
| .IP | ||||
| (*) = NOTE that this will cause the server to reply with a multipart | ||||
| response! | ||||
|  | ||||
| @@ -1507,6 +1563,11 @@ terminal/stdout unless you redirect it. | ||||
| .IP "--sasl-ir" | ||||
| Enable initial response in SASL authentication. | ||||
| (Added in 7.31.0) | ||||
| .IP "--service-name <servicename>" | ||||
| This option allows you to change the service name for SPNEGO. | ||||
|  | ||||
| Examples: --negotiate \fI--service-name\fP sockd would use | ||||
| sockd/server-name.  (Added in 7.43.0). | ||||
| .IP "-S, --show-error" | ||||
| When used with \fI-s\fP it makes curl show an error message if it fails. | ||||
| .IP "--ssl" | ||||
| @@ -1529,6 +1590,10 @@ and TLS1.0 protocols known as BEAST.  If this option isn't used, the SSL layer | ||||
| may use workarounds known to cause interoperability problems with some older | ||||
| SSL implementations. WARNING: this option loosens the SSL security, and by | ||||
| using this flag you ask for exactly that.  (Added in 7.25.0) | ||||
| .IP "--ssl-no-revoke" | ||||
| (WinSSL) This option tells curl to disable certificate revocation checks. | ||||
| WARNING: this option loosens the SSL security, and by using this flag you ask | ||||
| for exactly that.  (Added in 7.44.0) | ||||
| .IP "--socks4 <host[:port]>" | ||||
| Use the specified SOCKS4 proxy. If the port number is not specified, it is | ||||
| assumed at port 1080. (Added in 7.15.2) | ||||
| @@ -1738,6 +1803,12 @@ If this option is used several times, the last one will be used. | ||||
| Specify a URL to fetch. This option is mostly handy when you want to specify | ||||
| URL(s) in a config file. | ||||
|  | ||||
| If the given URL is missing a scheme name (such as "http://" or "ftp://" etc) | ||||
| then curl will make a guess based on the host. If the outermost sub-domain name | ||||
| matches DICT, FTP, IMAP, LDAP, POP3 or SMTP then that protocol will be used, | ||||
| otherwise HTTP will be used. Since 7.45.0 guessing can be disabled by setting a | ||||
| default protocol, see \fI--proto-default\fP for details. | ||||
|  | ||||
| This option may be used any number of times. To control where this URL is | ||||
| written, use the \fI-o, --output\fP or the \fI-O, --remote-name\fP options. | ||||
| .IP "-v, --verbose" | ||||
| @@ -1882,7 +1953,7 @@ displayed with millisecond resolution. | ||||
| The URL that was fetched last. This is most meaningful if you've told curl | ||||
| to follow location: headers. | ||||
| .RE | ||||
|  | ||||
| .IP | ||||
| If this option is used several times, the last one will be used. | ||||
| .IP "-x, --proxy <[protocol://][user:password@]proxyhost[:port]>" | ||||
| Use the specified proxy. | ||||
|   | ||||
							
								
								
									
										4
									
								
								docs/examples/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								docs/examples/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -73,3 +73,7 @@ smtp-vrfy | ||||
| url2file | ||||
| usercertinmem | ||||
| xmlstream | ||||
| http2-download | ||||
| http2-serverpush | ||||
| http2-upload | ||||
| imap-lsub | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,9 +19,10 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* Example application source code using the multi interface to download many | ||||
|  * files, but with a capped maximum amount of simultaneous transfers. | ||||
|  * | ||||
| /* <DESC> | ||||
|  * Source code using the multi interface to download many | ||||
|  * files, with a capped maximum amount of simultaneous transfers. | ||||
|  * </DESC> | ||||
|  * Written by Michael Wallner | ||||
|  */ | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
| #                            | (__| |_| |  _ <| |___ | ||||
| #                             \___|\___/|_| \_\_____| | ||||
| # | ||||
| # Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
| # Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
| # | ||||
| # This software is licensed as described in the file COPYING, which | ||||
| # you should have received as part of this distribution. The terms | ||||
| @@ -31,7 +31,8 @@ check_PROGRAMS = 10-at-a-time anyauthput cookie_interface debug fileupload \ | ||||
|   pop3-dele pop3-top pop3-stat pop3-noop pop3-ssl pop3-tls pop3-multi      \ | ||||
|   imap-list imap-lsub imap-fetch imap-store imap-append imap-examine       \ | ||||
|   imap-search imap-create imap-delete imap-copy imap-noop imap-ssl         \ | ||||
|   imap-tls imap-multi url2file sftpget ftpsget postinmemory | ||||
|   imap-tls imap-multi url2file sftpget ftpsget postinmemory http2-download \ | ||||
|   http2-upload http2-serverpush | ||||
|  | ||||
| # These examples require external dependencies that may not be commonly | ||||
| # available on POSIX systems, so don't bother attempting to compile them here. | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
| #                            | (__| |_| |  _ <| |___ | ||||
| #                             \___|\___/|_| \_\_____| | ||||
| # | ||||
| # Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
| # Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
| # | ||||
| # This software is licensed as described in the file COPYING, which | ||||
| # you should have received as part of this distribution. The terms | ||||
| @@ -21,7 +21,7 @@ | ||||
| ########################################################################### | ||||
| # | ||||
| ## Makefile for building curl examples with MingW (GCC-3.2 or later) | ||||
| ## and optionally OpenSSL (0.9.8), libssh2 (1.3), zlib (1.2.5), librtmp (2.3) | ||||
| ## and optionally OpenSSL (1.0.2a), libssh2 (1.5), zlib (1.2.8), librtmp (2.4) | ||||
| ## | ||||
| ## Usage:   mingw32-make -f Makefile.m32 CFG=-feature1[-feature2][-feature3][...] | ||||
| ## Example: mingw32-make -f Makefile.m32 CFG=-zlib-ssl-spi-winidn | ||||
| @@ -38,23 +38,23 @@ ZLIB_PATH = ../../../zlib-1.2.8 | ||||
| endif | ||||
| # Edit the path below to point to the base of your OpenSSL package. | ||||
| ifndef OPENSSL_PATH | ||||
| OPENSSL_PATH = ../../../openssl-0.9.8zc | ||||
| OPENSSL_PATH = ../../../openssl-1.0.2a | ||||
| endif | ||||
| # Edit the path below to point to the base of your LibSSH2 package. | ||||
| ifndef LIBSSH2_PATH | ||||
| LIBSSH2_PATH = ../../../libssh2-1.4.3 | ||||
| LIBSSH2_PATH = ../../../libssh2-1.5.0 | ||||
| endif | ||||
| # Edit the path below to point to the base of your librtmp package. | ||||
| ifndef LIBRTMP_PATH | ||||
| LIBRTMP_PATH = ../../../librtmp-2.3 | ||||
| LIBRTMP_PATH = ../../../librtmp-2.4 | ||||
| endif | ||||
| # Edit the path below to point to the base of your libidn package. | ||||
| ifndef LIBIDN_PATH | ||||
| LIBIDN_PATH = ../../../libidn-1.18 | ||||
| LIBIDN_PATH = ../../../libidn-1.32 | ||||
| endif | ||||
| # Edit the path below to point to the base of your MS IDN package. | ||||
| # Microsoft Internationalized Domain Names (IDN) Mitigation APIs 1.1 | ||||
| # http://www.microsoft.com/downloads/en/details.aspx?FamilyID=ad6158d7-ddba-416a-9109-07607425a815 | ||||
| # https://www.microsoft.com/en-us/download/details.aspx?id=734 | ||||
| ifndef WINIDN_PATH | ||||
| WINIDN_PATH = ../../../Microsoft IDN Mitigation APIs | ||||
| endif | ||||
| @@ -62,6 +62,10 @@ endif | ||||
| ifndef LDAP_SDK | ||||
| LDAP_SDK = c:/novell/ndk/cldapsdk/win32 | ||||
| endif | ||||
| # Edit the path below to point to the base of your nghttp2 package. | ||||
| ifndef NGHTTP2_PATH | ||||
| NGHTTP2_PATH = ../../../nghttp2-1.0.0 | ||||
| endif | ||||
|  | ||||
| PROOT = ../.. | ||||
|  | ||||
| @@ -72,14 +76,24 @@ endif | ||||
|  | ||||
| # Edit the var below to set to your architecture or set environment var. | ||||
| ifndef ARCH | ||||
| ARCH = w32 | ||||
| ifeq ($(findstring x86_64,$(shell $(CC) -dumpmachine)),x86_64) | ||||
| ARCH    = w64 | ||||
| else | ||||
| ARCH    = w32 | ||||
| endif | ||||
| endif | ||||
|  | ||||
| CC	= $(CROSSPREFIX)gcc | ||||
| CFLAGS	= -g -O2 -Wall | ||||
| CFLAGS	+= -fno-strict-aliasing | ||||
| ifeq ($(ARCH),w64) | ||||
| CFLAGS	+= -D_AMD64_ | ||||
| CFLAGS	+= -m64 -D_AMD64_ | ||||
| LDFLAGS += -m64 | ||||
| RCFLAGS += -F pe-x86-64 | ||||
| else | ||||
| CFLAGS	+= -m32 | ||||
| LDFLAGS += -m32 | ||||
| RCFLAGS += -F pe-i386 | ||||
| endif | ||||
| # comment LDFLAGS below to keep debug info | ||||
| LDFLAGS	= -s | ||||
| @@ -158,9 +172,12 @@ ifeq ($(findstring -metalink,$(CFG)),-metalink) | ||||
| METALINK = 1 | ||||
| endif | ||||
| ifeq ($(findstring -winssl,$(CFG)),-winssl) | ||||
| SCHANNEL = 1 | ||||
| WINSSL = 1 | ||||
| SSPI = 1 | ||||
| endif | ||||
| ifeq ($(findstring -nghttp2,$(CFG)),-nghttp2) | ||||
| NGHTTP2 = 1 | ||||
| endif | ||||
|  | ||||
| INCLUDES = -I. -I$(PROOT) -I$(PROOT)/include -I$(PROOT)/lib | ||||
|  | ||||
| @@ -184,6 +201,10 @@ ifdef RTMP | ||||
|   CFLAGS += -DUSE_LIBRTMP | ||||
|   curl_LDADD += -L"$(LIBRTMP_PATH)/librtmp" -lrtmp -lwinmm | ||||
| endif | ||||
| ifdef NGHTTP2 | ||||
|   CFLAGS += -DUSE_NGHTTP2 | ||||
|   curl_LDADD += -L"$(NGHTTP2_PATH)/lib" -lnghttp2 | ||||
| endif | ||||
| ifdef SSH2 | ||||
|   CFLAGS += -DUSE_LIBSSH2 -DHAVE_LIBSSH2_H | ||||
|   curl_LDADD += -L"$(LIBSSH2_PATH)/win32" -lssh2 | ||||
| @@ -204,7 +225,7 @@ ifdef SSL | ||||
|   ifndef DYN | ||||
|     OPENSSL_LIBS += -lgdi32 -lcrypt32 | ||||
|   endif | ||||
|   CFLAGS += -DUSE_SSLEAY | ||||
|   CFLAGS += -DUSE_OPENSSL | ||||
|   curl_LDADD += -L"$(OPENSSL_LIBPATH)" $(OPENSSL_LIBS) | ||||
| endif | ||||
| ifdef ZLIB | ||||
| @@ -223,7 +244,7 @@ endif | ||||
| endif | ||||
| ifdef SSPI | ||||
|   CFLAGS += -DUSE_WINDOWS_SSPI | ||||
|   ifdef SCHANNEL | ||||
|   ifdef WINSSL | ||||
|     CFLAGS += -DUSE_SCHANNEL | ||||
|   endif | ||||
| endif | ||||
|   | ||||
| @@ -19,12 +19,12 @@ endif | ||||
|  | ||||
| # Edit the path below to point to the base of your OpenSSL package. | ||||
| ifndef OPENSSL_PATH | ||||
| OPENSSL_PATH = ../../../openssl-0.9.8zc | ||||
| OPENSSL_PATH = ../../../openssl-1.0.2a | ||||
| endif | ||||
|  | ||||
| # Edit the path below to point to the base of your LibSSH2 package. | ||||
| ifndef LIBSSH2_PATH | ||||
| LIBSSH2_PATH = ../../../libssh2-1.4.3 | ||||
| LIBSSH2_PATH = ../../../libssh2-1.5.0 | ||||
| endif | ||||
|  | ||||
| # Edit the path below to point to the base of your axTLS package. | ||||
| @@ -34,12 +34,12 @@ endif | ||||
|  | ||||
| # Edit the path below to point to the base of your libidn package. | ||||
| ifndef LIBIDN_PATH | ||||
| LIBIDN_PATH = ../../../libidn-1.18 | ||||
| LIBIDN_PATH = ../../../libidn-1.32 | ||||
| endif | ||||
|  | ||||
| # Edit the path below to point to the base of your librtmp package. | ||||
| ifndef LIBRTMP_PATH | ||||
| LIBRTMP_PATH = ../../../librtmp-2.3 | ||||
| LIBRTMP_PATH = ../../../librtmp-2.4 | ||||
| endif | ||||
|  | ||||
| # Edit the path below to point to the base of your fbopenssl package. | ||||
|   | ||||
| @@ -32,51 +32,7 @@ actually torture our web site with your tests!  Thanks. | ||||
|  | ||||
| EXAMPLES | ||||
|  | ||||
| anyauthput.c   - HTTP PUT using "any" authentication method | ||||
| cacertinmem.c  - Use a built-in PEM certificate to retrieve a https page | ||||
| cookie_interface.c - shows usage of simple cookie interface | ||||
| curlgtk.c      - download using a GTK progress bar | ||||
| curlx.c        - getting file info from the remote cert data | ||||
| debug.c        - showing how to use the debug callback | ||||
| fileupload.c   - uploading to a file:// URL | ||||
| fopen.c        - fopen() layer that supports opening URLs and files | ||||
| ftpget.c       - simple getting a file from FTP | ||||
| ftpgetresp.c   - get the response strings from the FTP server | ||||
| ftpupload.c    - upload a file to an FTP server | ||||
| ftpuploadresume.c - resume an upload to an FTP server | ||||
| getinfo.c      - get the Content-Type from the recent transfer | ||||
| getinmemory.c  - download a file to memory only | ||||
| ghiper.c       - curl_multi_socket() using code with glib-2 | ||||
| hiperfifo.c    - downloads all URLs written to the fifo, using | ||||
|                  curl_multi_socket() and libevent | ||||
| htmltidy.c     - download a document and use libtidy to parse the HTML | ||||
| htmltitle.cc   - download a HTML file and extract the <title> tag from a HTML | ||||
|                  page using libxml | ||||
| http-post.c    - HTTP POST | ||||
| httpput.c      - HTTP PUT a local file | ||||
| https.c        - simple HTTPS transfer | ||||
| imap.c         - simple IMAP transfer | ||||
| multi-app.c    - a multi-interface app | ||||
| multi-debugcallback.c - a multi-interface app using the debug callback | ||||
| multi-double.c - a multi-interface app doing two simultaneous transfers | ||||
| multi-post.c   - a multi-interface app doing a multipart formpost | ||||
| multi-single.c - a multi-interface app getting a single file | ||||
| multi-uv.c     - a multi-interface app using libuv | ||||
| multithread.c  - an example using multi-treading transferring multiple files | ||||
| opensslthreadlock.c - show how to do locking when using OpenSSL multi-threaded | ||||
| persistant.c   - request two URLs with a persistent connection | ||||
| pop3s.c        - POP3S transfer | ||||
| pop3slist.c    - POP3S LIST | ||||
| post-callback.c - send a HTTP POST using a callback | ||||
| postit2.c      - send a HTTP multipart formpost | ||||
| sampleconv.c   - showing how a program on a non-ASCII platform would invoke | ||||
|                  callbacks to do its own codeset conversions instead of using | ||||
|                  the built-in iconv functions in libcurl | ||||
| sepheaders.c   - download headers to a separate file | ||||
| simple.c       - the most simple download a URL source | ||||
| simplepost.c   - HTTP POST | ||||
| simplessl.c    - HTTPS example with certificates many options set | ||||
| synctime.c     - Sync local time by extracting date from remote HTTP servers | ||||
| url2file.c     - download a document and store it in a file | ||||
| xmlstream.c    - Stream-parse a document using the streaming Expat parser | ||||
| 10-at-a-time.c - Download many files simultaneously, 10 at a time. | ||||
| Each example source code file is designed to be and work stand-alone and | ||||
| rather self-explanatory. The examples may at times lack the level of error | ||||
| checks you need in a real world, but that is then only for the sake of | ||||
| readability: to make the code smaller and easier to follow. | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,11 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* <DESC> | ||||
|  * HTTP PUT upload with authentiction using "any" method. libcurl picks the | ||||
|  * one the server supports/wants. | ||||
|  * </DESC> | ||||
|  */ | ||||
| #include <stdio.h> | ||||
| #include <fcntl.h> | ||||
| #ifdef WIN32 | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 2012 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 2012 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -20,11 +20,11 @@ | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| /* <DESC> | ||||
|  * demonstrate the use of multi socket interface with boost::asio | ||||
|  * </DESC> | ||||
|  */ | ||||
| /* | ||||
|  * file: asiohiper.cpp | ||||
|  * Example program to demonstrate the use of multi socket interface | ||||
|  * with boost::asio | ||||
|  * | ||||
|  * This program is in c++ and uses boost::asio instead of libevent/libev. | ||||
|  * Requires boost::asio, boost::bind and boost::system | ||||
|  * | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,17 +19,11 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* Example using a "in core" PEM certificate to retrieve a https page. | ||||
|  * Written by Theo Borm | ||||
| /* <DESC> | ||||
|  * CA cert in memory with OpenSSL to get a HTTPS page. | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| /* on a netBSD system with OPENSSL& LIBCURL installed from | ||||
|  * pkgsrc (using default paths) this program can be compiled using: | ||||
|  * gcc -I/usr/pkg/include -L/usr/pkg/lib -lcurl -Wl,-R/usr/pkg/lib -lssl | ||||
|  * -lcrypto -lz -o curlcacerttest curlcacerttest.c | ||||
|  * on other operating systems you may want to change paths to headers | ||||
|  * and libraries | ||||
| */ | ||||
| #include <openssl/ssl.h> | ||||
| #include <curl/curl.h> | ||||
| #include <stdio.h> | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,10 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* <DESC> | ||||
|  * Extract lots of TLS certificate info. | ||||
|  * </DESC> | ||||
|  */ | ||||
| #include <stdio.h> | ||||
|  | ||||
| #include <curl/curl.h> | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,10 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* <DESC> | ||||
|  * Show transfer timing info after download completes. | ||||
|  * </DESC> | ||||
|  */ | ||||
| /* Example source code to show how the callback function can be used to | ||||
|  * download data into a chunk of memory instead of storing it in a file. | ||||
|  * After successful download we use curl_easy_getinfo() calls to get the | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,7 +19,10 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* This example shows usage of simple cookie interface. */ | ||||
| /* <DESC> | ||||
|  * Import and export cookies with COOKIELIST. | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
| @@ -96,7 +99,12 @@ main(void) | ||||
|       return 1; | ||||
|     } | ||||
|  | ||||
|     /* HTTP-header style cookie */ | ||||
|     /* HTTP-header style cookie. If you use the Set-Cookie format and don't | ||||
|     specify a domain then the cookie is sent for any domain and will not be | ||||
|     modified, likely not what you intended. Starting in 7.43.0 any-domain | ||||
|     cookies will not be exported either. For more information refer to the | ||||
|     CURLOPT_COOKIELIST documentation. | ||||
|     */ | ||||
|     snprintf(nline, sizeof(nline), | ||||
|       "Set-Cookie: OLD_PREF=3d141414bf4209321; " | ||||
|       "expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com"); | ||||
|   | ||||
| @@ -5,9 +5,12 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  *  Copyright (c) 2000 David Odin (aka DindinX) for MandrakeSoft | ||||
|  */ | ||||
| /* <DESC> | ||||
|  * use the libcurl in a gtk-threaded application | ||||
|  * </DESC> | ||||
|  */ | ||||
| /* Copyright (c) 2000 David Odin (aka DindinX) for MandrakeSoft */ | ||||
| /* an attempt to use the curl library in concert with a gtk-threaded application */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <gtk/gtk.h> | ||||
|   | ||||
| @@ -9,7 +9,10 @@ | ||||
|   certificate presented during ssl session establishment. | ||||
|  | ||||
| */ | ||||
|  | ||||
| /* <DESC> | ||||
|  * demonstrates use of SSL context callback, requires OpenSSL | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  * Copyright (c) 2003 The OpenEvidence Project.  All rights reserved. | ||||
| @@ -490,7 +493,7 @@ int main(int argc, char **argv) { | ||||
|         BIO_printf(p.errorbio,"the response has a correct mimetype : %s\n", | ||||
|                    response); | ||||
|       else | ||||
|         BIO_printf(p.errorbio,"the reponse doesn\'t has an acceptable " | ||||
|         BIO_printf(p.errorbio,"the response doesn\'t have an acceptable " | ||||
|                    "mime type, it is %s instead of %s\n", | ||||
|                    response,mimetypeaccept); | ||||
|   } | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,10 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* <DESC> | ||||
|  * Show how CURLOPT_DEBUGFUNCTION can be used. | ||||
|  * </DESC> | ||||
|  */ | ||||
| #include <stdio.h> | ||||
| #include <curl/curl.h> | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,10 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* <DESC> | ||||
|  * multi socket interface together with libev | ||||
|  * </DESC> | ||||
|  */ | ||||
| /* Example application source code using the multi socket interface to | ||||
|  * download many files at once. | ||||
|  * | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,9 +19,10 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* | ||||
|  * This is an example demonstrating how an application can pass in a custom | ||||
| /* <DESC> | ||||
|  * An example demonstrating how an application can pass in a custom | ||||
|  * socket to libcurl to use. This example also handles the connect itself. | ||||
|  * </DESC> | ||||
|  */ | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,10 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* <DESC> | ||||
|  * Upload to a file:// URL | ||||
|  * </DESC> | ||||
|  */ | ||||
| #include <stdio.h> | ||||
| #include <curl/curl.h> | ||||
| #include <sys/stat.h> | ||||
|   | ||||
| @@ -42,6 +42,10 @@ | ||||
|  * | ||||
|  * This example requires libcurl 7.9.7 or later. | ||||
|  */ | ||||
| /* <DESC> | ||||
|  * implements an fopen() abstraction allowing reading from URLs | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
| @@ -108,7 +112,7 @@ static size_t write_callback(char *buffer, | ||||
|       size=rembuff; | ||||
|     } | ||||
|     else { | ||||
|       /* realloc suceeded increase buffer size*/ | ||||
|       /* realloc succeeded increase buffer size*/ | ||||
|       url->buffer_len+=size - rembuff; | ||||
|       url->buffer=newbuff; | ||||
|     } | ||||
| @@ -131,7 +135,7 @@ static int fill_buffer(URL_FILE *file, size_t want) | ||||
|   CURLMcode mc; /* curl_multi_fdset() return code */ | ||||
|  | ||||
|   /* only attempt to fill buffer if transactions still running and buffer | ||||
|    * doesnt exceed required size already | ||||
|    * doesn't exceed required size already | ||||
|    */ | ||||
|   if((!file->still_running) || (file->buffer_pos > want)) | ||||
|     return 0; | ||||
| @@ -205,7 +209,7 @@ static int fill_buffer(URL_FILE *file, size_t want) | ||||
| } | ||||
|  | ||||
| /* use to remove want bytes from the front of a files buffer */ | ||||
| static int use_buffer(URL_FILE *file,int want) | ||||
| static int use_buffer(URL_FILE *file, size_t want) | ||||
| { | ||||
|   /* sort out buffer */ | ||||
|   if((file->buffer_pos - want) <=0) { | ||||
| @@ -229,7 +233,7 @@ static int use_buffer(URL_FILE *file,int want) | ||||
| URL_FILE *url_fopen(const char *url,const char *operation) | ||||
| { | ||||
|   /* this code could check for URLs or types in the 'url' and | ||||
|      basicly use the real fopen() for standard files */ | ||||
|      basically use the real fopen() for standard files */ | ||||
|  | ||||
|   URL_FILE *file; | ||||
|   (void)operation; | ||||
| @@ -375,7 +379,7 @@ char *url_fgets(char *ptr, size_t size, URL_FILE *file) | ||||
|  | ||||
|   switch(file->type) { | ||||
|   case CFTYPE_FILE: | ||||
|     ptr = fgets(ptr,size,file->handle.file); | ||||
|     ptr = fgets(ptr, (int)size, file->handle.file); | ||||
|     break; | ||||
|  | ||||
|   case CFTYPE_CURL: | ||||
| @@ -451,7 +455,7 @@ int main(int argc, char *argv[]) | ||||
|   URL_FILE *handle; | ||||
|   FILE *outf; | ||||
|  | ||||
|   int nread; | ||||
|   size_t nread; | ||||
|   char buffer[256]; | ||||
|   const char *url; | ||||
|  | ||||
| @@ -499,7 +503,7 @@ int main(int argc, char *argv[]) | ||||
|   } | ||||
|  | ||||
|   do { | ||||
|     nread = url_fread(buffer, 1,sizeof(buffer), handle); | ||||
|     nread = url_fread(buffer, 1, sizeof(buffer), handle); | ||||
|     fwrite(buffer,1,nread,outf); | ||||
|   } while(nread); | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,10 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* <DESC> | ||||
|  * FTP wildcard pattern matching | ||||
|  * </DESC> | ||||
|  */ | ||||
| #include <curl/curl.h> | ||||
| #include <stdio.h> | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -23,11 +23,9 @@ | ||||
|  | ||||
| #include <curl/curl.h> | ||||
|  | ||||
| /* | ||||
|  * This is an example showing how to get a single file from an FTP server. | ||||
|  * It delays the actual destination file creation until the first write | ||||
|  * callback so that it won't create an empty file in case the remote file | ||||
|  * doesn't exist or something else fails. | ||||
| /* <DESC> | ||||
|  * Get a single file from an FTP server. | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| struct FtpFile { | ||||
| @@ -53,7 +51,7 @@ int main(void) | ||||
|   CURL *curl; | ||||
|   CURLcode res; | ||||
|   struct FtpFile ftpfile={ | ||||
|     "curl.tar.gz", /* name to store the file as if succesful */ | ||||
|     "curl.tar.gz", /* name to store the file as if successful */ | ||||
|     NULL | ||||
|   }; | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -24,9 +24,9 @@ | ||||
|  | ||||
| #include <curl/curl.h> | ||||
|  | ||||
| /* | ||||
|  * This is an example showing how to check a single file's size and mtime | ||||
|  * from an FTP server. | ||||
| /* <DESC> | ||||
|  * Checks a single file's size and mtime from an FTP server. | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| static size_t throw_away(void *ptr, size_t size, size_t nmemb, void *data) | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -23,13 +23,11 @@ | ||||
|  | ||||
| #include <curl/curl.h> | ||||
|  | ||||
| /* | ||||
|  * Similar to ftpget.c but this also stores the received response-lines | ||||
| /* <DESC> | ||||
|  * Similar to ftpget.c but also stores the received response-lines | ||||
|  * in a separate file using our own callback! | ||||
|  * | ||||
|  * This functionality was introduced in libcurl 7.9.3. | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| static size_t | ||||
| write_response(void *ptr, size_t size, size_t nmemb, void *data) | ||||
| { | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -24,11 +24,9 @@ | ||||
|  | ||||
| #include <curl/curl.h> | ||||
|  | ||||
| /* | ||||
|  * This is an example showing how to get a single file from an FTPS server. | ||||
|  * It delays the actual destination file creation until the first write | ||||
|  * callback so that it won't create an empty file in case the remote file | ||||
|  * doesn't exist or something else fails. | ||||
| /* <DESC> | ||||
|  * Get a single file from an FTPS server. | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| struct FtpFile { | ||||
| @@ -55,7 +53,7 @@ int main(void) | ||||
|   CURL *curl; | ||||
|   CURLcode res; | ||||
|   struct FtpFile ftpfile={ | ||||
|     "yourfile.bin", /* name to store the file as if succesful */ | ||||
|     "yourfile.bin", /* name to store the file as if successful */ | ||||
|     NULL | ||||
|   }; | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -33,11 +33,10 @@ | ||||
| #include <unistd.h> | ||||
| #endif | ||||
|  | ||||
| /* | ||||
|  * This example shows an FTP upload, with a rename of the file just after | ||||
|  * a successful upload. | ||||
|  * | ||||
|  * Example based on source code provided by Erick Nuwendam. Thanks! | ||||
| /* <DESC> | ||||
|  * Performs an FTP upload and renames the file just after a successful | ||||
|  * transfer. | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| #define LOCAL_FILE      "/tmp/uploadthis.txt" | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,13 +19,9 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* Upload to FTP, resuming failed transfers | ||||
|  * | ||||
|  * Compile for MinGW like this: | ||||
|  *  gcc -Wall -pedantic -std=c99 ftpuploadwithresume.c -o ftpuploadresume.exe | ||||
|  *  -lcurl -lmsvcr70 | ||||
|  * | ||||
|  * Written by Philip Bock | ||||
| /* <DESC> | ||||
|  * Upload to FTP, resuming failed transfers. | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| #include <stdlib.h> | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,10 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* <DESC> | ||||
|  * Use getinfo to get content-type after completed transfer. | ||||
|  * </DESC> | ||||
|  */ | ||||
| #include <stdio.h> | ||||
| #include <curl/curl.h> | ||||
|  | ||||
| @@ -27,18 +31,14 @@ int main(void) | ||||
|   CURL *curl; | ||||
|   CURLcode res; | ||||
|  | ||||
|   /* http://curl.haxx.se/libcurl/c/curl_easy_init.html */ | ||||
|   curl = curl_easy_init(); | ||||
|   if(curl) { | ||||
|     /* http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTURL */ | ||||
|     curl_easy_setopt(curl, CURLOPT_URL, "http://www.example.com/"); | ||||
|     /* http://curl.haxx.se/libcurl/c/curl_easy_perform.html */ | ||||
|     res = curl_easy_perform(curl); | ||||
|  | ||||
|     if(CURLE_OK == res) { | ||||
|       char *ct; | ||||
|       /* ask for the content-type */ | ||||
|       /* http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html */ | ||||
|       res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct); | ||||
|  | ||||
|       if((CURLE_OK == res) && ct) | ||||
| @@ -46,7 +46,6 @@ int main(void) | ||||
|     } | ||||
|  | ||||
|     /* always cleanup */ | ||||
|     /* http://curl.haxx.se/libcurl/c/curl_easy_cleanup.html */ | ||||
|     curl_easy_cleanup(curl); | ||||
|   } | ||||
|   return 0; | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,8 +19,10 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* Example source code to show how the callback function can be used to | ||||
|  * download data into a chunk of memory instead of storing it in a file. | ||||
| /* <DESC> | ||||
|  * Shows how the write callback function can be used to download data into a | ||||
|  * chunk of memory instead of storing it in a file. | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| @@ -34,7 +36,6 @@ struct MemoryStruct { | ||||
|   size_t size; | ||||
| }; | ||||
|  | ||||
|  | ||||
| static size_t | ||||
| WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp) | ||||
| { | ||||
| @@ -55,7 +56,6 @@ WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp) | ||||
|   return realsize; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main(void) | ||||
| { | ||||
|   CURL *curl_handle; | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,10 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* <DESC> | ||||
|  * multi socket API usage together with with glib2 | ||||
|  * </DESC> | ||||
|  */ | ||||
| /* Example application source code using the multi socket interface to | ||||
|  * download many files at once. | ||||
|  * | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,10 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* <DESC> | ||||
|  * multi socket API usage with libevent 2 | ||||
|  * </DESC> | ||||
|  */ | ||||
| /* Example application source code using the multi socket interface to | ||||
|    download many files at once. | ||||
|  | ||||
| @@ -326,7 +330,7 @@ static void new_conn(char *url, GlobalInfo *g ) | ||||
|   conn->url = strdup(url); | ||||
|   curl_easy_setopt(conn->easy, CURLOPT_URL, conn->url); | ||||
|   curl_easy_setopt(conn->easy, CURLOPT_WRITEFUNCTION, write_cb); | ||||
|   curl_easy_setopt(conn->easy, CURLOPT_WRITEDATA, &conn); | ||||
|   curl_easy_setopt(conn->easy, CURLOPT_WRITEDATA, conn); | ||||
|   curl_easy_setopt(conn->easy, CURLOPT_VERBOSE, 1L); | ||||
|   curl_easy_setopt(conn->easy, CURLOPT_ERRORBUFFER, conn->error); | ||||
|   curl_easy_setopt(conn->easy, CURLOPT_PRIVATE, conn); | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 2012, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 2012 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -20,13 +20,13 @@ | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| /* <DESC> | ||||
|  * Uses the "Streaming HTML parser" to extract the href pieces in a streaming | ||||
|  * manner from a downloaded HTML. | ||||
|  * </DESC> | ||||
|  */ | ||||
| /* | ||||
|  * This example uses the "Streaming HTML parser" to extract the href pieces in | ||||
|  * a streaming manner from a downloaded HTML. Kindly donated by Michał | ||||
|  * Kowalczyk. | ||||
|  * | ||||
|  * The parser is found at | ||||
|  * http://code.google.com/p/htmlstreamparser/ | ||||
|  * The HTML parser is found at http://code.google.com/p/htmlstreamparser/ | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,13 +19,12 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* Download a document and use libtidy to parse the HTML. | ||||
|  * Written by Jeff Pohlmeyer | ||||
|  * | ||||
| /* <DESC> | ||||
|  * Download a document and use libtidy to parse the HTML. | ||||
|  * </DESC> | ||||
|  */ | ||||
| /* | ||||
|  * LibTidy => http://tidy.sourceforge.net | ||||
|  * | ||||
|  * gcc -Wall -I/usr/local/include tidycurl.c -lcurl -ltidy -o tidycurl | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,8 +19,10 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| // Get a web page, parse it with libxml. | ||||
| // | ||||
| /* <DESC> | ||||
|  * Get a web page, extract the title with libxml. | ||||
|  * </DESC> | ||||
|  */ | ||||
| // Written by Lars Nilsson | ||||
| // | ||||
| // GNU C++ compile command line suggestion (edit paths accordingly): | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,10 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* <DESC> | ||||
|  * simple HTTP POST using the easy interface | ||||
|  * </DESC> | ||||
|  */ | ||||
| #include <stdio.h> | ||||
| #include <curl/curl.h> | ||||
|  | ||||
|   | ||||
							
								
								
									
										293
									
								
								docs/examples/http2-download.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										293
									
								
								docs/examples/http2-download.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,293 @@ | ||||
| /*************************************************************************** | ||||
|  *                                  _   _ ____  _ | ||||
|  *  Project                     ___| | | |  _ \| | | ||||
|  *                             / __| | | | |_) | | | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
|  * are also available at http://curl.haxx.se/docs/copyright.html. | ||||
|  * | ||||
|  * You may opt to use, copy, modify, merge, publish, distribute and/or sell | ||||
|  * copies of the Software, and permit persons to whom the Software is | ||||
|  * furnished to do so, under the terms of the COPYING file. | ||||
|  * | ||||
|  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* <DESC> | ||||
|  * Multiplexed HTTP/2 downloads over a single connection | ||||
|  * </DESC> | ||||
|  */ | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
|  | ||||
| /* somewhat unix-specific */ | ||||
| #include <sys/time.h> | ||||
| #include <unistd.h> | ||||
|  | ||||
| /* curl stuff */ | ||||
| #include <curl/curl.h> | ||||
|  | ||||
| #ifndef CURLPIPE_MULTIPLEX | ||||
| /* This little trick will just make sure that we don't enable pipelining for | ||||
|    libcurls old enough to not have this symbol. It is _not_ defined to zero in | ||||
|    a recent libcurl header. */ | ||||
| #define CURLPIPE_MULTIPLEX 0 | ||||
| #endif | ||||
|  | ||||
| #define NUM_HANDLES 1000 | ||||
|  | ||||
| void *curl_hnd[NUM_HANDLES]; | ||||
| int num_transfers; | ||||
|  | ||||
| /* a handle to number lookup, highly ineffective when we do many | ||||
|    transfers... */ | ||||
| static int hnd2num(CURL *hnd) | ||||
| { | ||||
|   int i; | ||||
|   for(i=0; i< num_transfers; i++) { | ||||
|     if(curl_hnd[i] == hnd) | ||||
|       return i; | ||||
|   } | ||||
|   return 0; /* weird, but just a fail-safe */ | ||||
| } | ||||
|  | ||||
| static | ||||
| void dump(const char *text, int num, unsigned char *ptr, size_t size, | ||||
|           char nohex) | ||||
| { | ||||
|   size_t i; | ||||
|   size_t c; | ||||
|  | ||||
|   unsigned int width=0x10; | ||||
|  | ||||
|   if(nohex) | ||||
|     /* without the hex output, we can fit more on screen */ | ||||
|     width = 0x40; | ||||
|  | ||||
|   fprintf(stderr, "%d %s, %ld bytes (0x%lx)\n", | ||||
|           num, text, (long)size, (long)size); | ||||
|  | ||||
|   for(i=0; i<size; i+= width) { | ||||
|  | ||||
|     fprintf(stderr, "%4.4lx: ", (long)i); | ||||
|  | ||||
|     if(!nohex) { | ||||
|       /* hex not disabled, show it */ | ||||
|       for(c = 0; c < width; c++) | ||||
|         if(i+c < size) | ||||
|           fprintf(stderr, "%02x ", ptr[i+c]); | ||||
|         else | ||||
|           fputs("   ", stderr); | ||||
|     } | ||||
|  | ||||
|     for(c = 0; (c < width) && (i+c < size); c++) { | ||||
|       /* check for 0D0A; if found, skip past and start a new line of output */ | ||||
|       if (nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) { | ||||
|         i+=(c+2-width); | ||||
|         break; | ||||
|       } | ||||
|       fprintf(stderr, "%c", | ||||
|               (ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:'.'); | ||||
|       /* check again for 0D0A, to avoid an extra \n if it's at width */ | ||||
|       if (nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) { | ||||
|         i+=(c+3-width); | ||||
|         break; | ||||
|       } | ||||
|     } | ||||
|     fputc('\n', stderr); /* newline */ | ||||
|   } | ||||
| } | ||||
|  | ||||
| static | ||||
| int my_trace(CURL *handle, curl_infotype type, | ||||
|              char *data, size_t size, | ||||
|              void *userp) | ||||
| { | ||||
|   const char *text; | ||||
|   int num = hnd2num(handle); | ||||
|   (void)handle; /* prevent compiler warning */ | ||||
|   (void)userp; | ||||
|   switch (type) { | ||||
|   case CURLINFO_TEXT: | ||||
|     fprintf(stderr, "== %d Info: %s", num, data); | ||||
|   default: /* in case a new one is introduced to shock us */ | ||||
|     return 0; | ||||
|  | ||||
|   case CURLINFO_HEADER_OUT: | ||||
|     text = "=> Send header"; | ||||
|     break; | ||||
|   case CURLINFO_DATA_OUT: | ||||
|     text = "=> Send data"; | ||||
|     break; | ||||
|   case CURLINFO_SSL_DATA_OUT: | ||||
|     text = "=> Send SSL data"; | ||||
|     break; | ||||
|   case CURLINFO_HEADER_IN: | ||||
|     text = "<= Recv header"; | ||||
|     break; | ||||
|   case CURLINFO_DATA_IN: | ||||
|     text = "<= Recv data"; | ||||
|     break; | ||||
|   case CURLINFO_SSL_DATA_IN: | ||||
|     text = "<= Recv SSL data"; | ||||
|     break; | ||||
|   } | ||||
|  | ||||
|   dump(text, num, (unsigned char *)data, size, 1); | ||||
|   return 0; | ||||
| } | ||||
|  | ||||
| static void setup(CURL *hnd, int num) | ||||
| { | ||||
|   FILE *out; | ||||
|   char filename[128]; | ||||
|  | ||||
|   sprintf(filename, "dl-%d", num); | ||||
|  | ||||
|   out = fopen(filename, "wb"); | ||||
|  | ||||
|   /* write to this file */ | ||||
|   curl_easy_setopt(hnd, CURLOPT_WRITEDATA, out); | ||||
|  | ||||
|   /* set the same URL */ | ||||
|   curl_easy_setopt(hnd, CURLOPT_URL, "https://localhost:8443/index.html"); | ||||
|  | ||||
|   /* send it verbose for max debuggaility */ | ||||
|   curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); | ||||
|   curl_easy_setopt(hnd, CURLOPT_DEBUGFUNCTION, my_trace); | ||||
|  | ||||
|   /* HTTP/2 please */ | ||||
|   curl_easy_setopt(hnd, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0); | ||||
|  | ||||
|   /* we use a self-signed test server, skip verification during debugging */ | ||||
|   curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYPEER, 0L); | ||||
|   curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYHOST, 0L); | ||||
|  | ||||
| #if (CURLPIPE_MULTIPLEX > 0) | ||||
|   /* wait for pipe connection to confirm */ | ||||
|   curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L); | ||||
| #endif | ||||
|  | ||||
|   curl_hnd[num] = hnd; | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * Simply download two files over HTTP/2, using the same physical connection! | ||||
|  */ | ||||
| int main(int argc, char **argv) | ||||
| { | ||||
|   CURL *easy[NUM_HANDLES]; | ||||
|   CURLM *multi_handle; | ||||
|   int i; | ||||
|   int still_running; /* keep number of running handles */ | ||||
|  | ||||
|   if(argc > 1) | ||||
|     /* if given a number, do that many transfers */ | ||||
|     num_transfers = atoi(argv[1]); | ||||
|  | ||||
|   if(!num_transfers || (num_transfers > NUM_HANDLES)) | ||||
|     num_transfers = 3; /* a suitable low default */ | ||||
|  | ||||
|   /* init a multi stack */ | ||||
|   multi_handle = curl_multi_init(); | ||||
|  | ||||
|   for(i=0; i<num_transfers; i++) { | ||||
|     easy[i] = curl_easy_init(); | ||||
|     /* set options */ | ||||
|     setup(easy[i], i); | ||||
|  | ||||
|     /* add the individual transfer */ | ||||
|     curl_multi_add_handle(multi_handle, easy[i]); | ||||
|   } | ||||
|  | ||||
|   curl_multi_setopt(multi_handle, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX); | ||||
|  | ||||
|   /* we start some action by calling perform right away */ | ||||
|   curl_multi_perform(multi_handle, &still_running); | ||||
|  | ||||
|   do { | ||||
|     struct timeval timeout; | ||||
|     int rc; /* select() return code */ | ||||
|     CURLMcode mc; /* curl_multi_fdset() return code */ | ||||
|  | ||||
|     fd_set fdread; | ||||
|     fd_set fdwrite; | ||||
|     fd_set fdexcep; | ||||
|     int maxfd = -1; | ||||
|  | ||||
|     long curl_timeo = -1; | ||||
|  | ||||
|     FD_ZERO(&fdread); | ||||
|     FD_ZERO(&fdwrite); | ||||
|     FD_ZERO(&fdexcep); | ||||
|  | ||||
|     /* set a suitable timeout to play around with */ | ||||
|     timeout.tv_sec = 1; | ||||
|     timeout.tv_usec = 0; | ||||
|  | ||||
|     curl_multi_timeout(multi_handle, &curl_timeo); | ||||
|     if(curl_timeo >= 0) { | ||||
|       timeout.tv_sec = curl_timeo / 1000; | ||||
|       if(timeout.tv_sec > 1) | ||||
|         timeout.tv_sec = 1; | ||||
|       else | ||||
|         timeout.tv_usec = (curl_timeo % 1000) * 1000; | ||||
|     } | ||||
|  | ||||
|     /* get file descriptors from the transfers */ | ||||
|     mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); | ||||
|  | ||||
|     if(mc != CURLM_OK) | ||||
|     { | ||||
|       fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc); | ||||
|       break; | ||||
|     } | ||||
|  | ||||
|     /* On success the value of maxfd is guaranteed to be >= -1. We call | ||||
|        select(maxfd + 1, ...); specially in case of (maxfd == -1) there are | ||||
|        no fds ready yet so we call select(0, ...) --or Sleep() on Windows-- | ||||
|        to sleep 100ms, which is the minimum suggested value in the | ||||
|        curl_multi_fdset() doc. */ | ||||
|  | ||||
|     if(maxfd == -1) { | ||||
| #ifdef _WIN32 | ||||
|       Sleep(100); | ||||
|       rc = 0; | ||||
| #else | ||||
|       /* Portable sleep for platforms other than Windows. */ | ||||
|       struct timeval wait = { 0, 100 * 1000 }; /* 100ms */ | ||||
|       rc = select(0, NULL, NULL, NULL, &wait); | ||||
| #endif | ||||
|     } | ||||
|     else { | ||||
|       /* Note that on some platforms 'timeout' may be modified by select(). | ||||
|          If you need access to the original value save a copy beforehand. */ | ||||
|       rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); | ||||
|     } | ||||
|  | ||||
|     switch(rc) { | ||||
|     case -1: | ||||
|       /* select error */ | ||||
|       break; | ||||
|     case 0: | ||||
|     default: | ||||
|       /* timeout or readable/writable sockets */ | ||||
|       curl_multi_perform(multi_handle, &still_running); | ||||
|       break; | ||||
|     } | ||||
|   } while(still_running); | ||||
|  | ||||
|   curl_multi_cleanup(multi_handle); | ||||
|  | ||||
|   for(i=0; i<num_transfers; i++) | ||||
|     curl_easy_cleanup(easy[i]); | ||||
|  | ||||
|   return 0; | ||||
| } | ||||
							
								
								
									
										318
									
								
								docs/examples/http2-serverpush.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										318
									
								
								docs/examples/http2-serverpush.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,318 @@ | ||||
| /*************************************************************************** | ||||
|  *                                  _   _ ____  _ | ||||
|  *  Project                     ___| | | |  _ \| | | ||||
|  *                             / __| | | | |_) | | | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
|  * are also available at http://curl.haxx.se/docs/copyright.html. | ||||
|  * | ||||
|  * You may opt to use, copy, modify, merge, publish, distribute and/or sell | ||||
|  * copies of the Software, and permit persons to whom the Software is | ||||
|  * furnished to do so, under the terms of the COPYING file. | ||||
|  * | ||||
|  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* <DESC> | ||||
|  * HTTP/2 server push | ||||
|  * </DESC> | ||||
|  */ | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
|  | ||||
| /* somewhat unix-specific */ | ||||
| #include <sys/time.h> | ||||
| #include <unistd.h> | ||||
|  | ||||
| /* curl stuff */ | ||||
| #include <curl/curl.h> | ||||
|  | ||||
| #ifndef CURLPIPE_MULTIPLEX | ||||
| #error "too old libcurl, can't do HTTP/2 server push!" | ||||
| #endif | ||||
|  | ||||
| static | ||||
| void dump(const char *text, unsigned char *ptr, size_t size, | ||||
|           char nohex) | ||||
| { | ||||
|   size_t i; | ||||
|   size_t c; | ||||
|  | ||||
|   unsigned int width=0x10; | ||||
|  | ||||
|   if(nohex) | ||||
|     /* without the hex output, we can fit more on screen */ | ||||
|     width = 0x40; | ||||
|  | ||||
|   fprintf(stderr, "%s, %ld bytes (0x%lx)\n", | ||||
|           text, (long)size, (long)size); | ||||
|  | ||||
|   for(i=0; i<size; i+= width) { | ||||
|  | ||||
|     fprintf(stderr, "%4.4lx: ", (long)i); | ||||
|  | ||||
|     if(!nohex) { | ||||
|       /* hex not disabled, show it */ | ||||
|       for(c = 0; c < width; c++) | ||||
|         if(i+c < size) | ||||
|           fprintf(stderr, "%02x ", ptr[i+c]); | ||||
|         else | ||||
|           fputs("   ", stderr); | ||||
|     } | ||||
|  | ||||
|     for(c = 0; (c < width) && (i+c < size); c++) { | ||||
|       /* check for 0D0A; if found, skip past and start a new line of output */ | ||||
|       if (nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) { | ||||
|         i+=(c+2-width); | ||||
|         break; | ||||
|       } | ||||
|       fprintf(stderr, "%c", | ||||
|               (ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:'.'); | ||||
|       /* check again for 0D0A, to avoid an extra \n if it's at width */ | ||||
|       if (nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) { | ||||
|         i+=(c+3-width); | ||||
|         break; | ||||
|       } | ||||
|     } | ||||
|     fputc('\n', stderr); /* newline */ | ||||
|   } | ||||
| } | ||||
|  | ||||
| static | ||||
| int my_trace(CURL *handle, curl_infotype type, | ||||
|              char *data, size_t size, | ||||
|              void *userp) | ||||
| { | ||||
|   const char *text; | ||||
|   (void)handle; /* prevent compiler warning */ | ||||
|   (void)userp; | ||||
|   switch (type) { | ||||
|   case CURLINFO_TEXT: | ||||
|     fprintf(stderr, "== Info: %s", data); | ||||
|   default: /* in case a new one is introduced to shock us */ | ||||
|     return 0; | ||||
|  | ||||
|   case CURLINFO_HEADER_OUT: | ||||
|     text = "=> Send header"; | ||||
|     break; | ||||
|   case CURLINFO_DATA_OUT: | ||||
|     text = "=> Send data"; | ||||
|     break; | ||||
|   case CURLINFO_SSL_DATA_OUT: | ||||
|     text = "=> Send SSL data"; | ||||
|     break; | ||||
|   case CURLINFO_HEADER_IN: | ||||
|     text = "<= Recv header"; | ||||
|     break; | ||||
|   case CURLINFO_DATA_IN: | ||||
|     text = "<= Recv data"; | ||||
|     break; | ||||
|   case CURLINFO_SSL_DATA_IN: | ||||
|     text = "<= Recv SSL data"; | ||||
|     break; | ||||
|   } | ||||
|  | ||||
|   dump(text, (unsigned char *)data, size, 1); | ||||
|   return 0; | ||||
| } | ||||
|  | ||||
| static void setup(CURL *hnd) | ||||
| { | ||||
|   FILE *out = fopen("dl", "wb"); | ||||
|  | ||||
|   /* write to this file */ | ||||
|   curl_easy_setopt(hnd, CURLOPT_WRITEDATA, out); | ||||
|  | ||||
|   /* set the same URL */ | ||||
|   curl_easy_setopt(hnd, CURLOPT_URL, "https://localhost:8443/index.html"); | ||||
|  | ||||
|   /* send it verbose for max debuggaility */ | ||||
|   curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); | ||||
|   curl_easy_setopt(hnd, CURLOPT_DEBUGFUNCTION, my_trace); | ||||
|  | ||||
|   /* HTTP/2 please */ | ||||
|   curl_easy_setopt(hnd, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0); | ||||
|  | ||||
|   /* we use a self-signed test server, skip verification during debugging */ | ||||
|   curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYPEER, 0L); | ||||
|   curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYHOST, 0L); | ||||
|  | ||||
| #if (CURLPIPE_MULTIPLEX > 0) | ||||
|   /* wait for pipe connection to confirm */ | ||||
|   curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L); | ||||
| #endif | ||||
|  | ||||
| } | ||||
|  | ||||
| /* called when there's an incoming push */ | ||||
| static int server_push_callback(CURL *parent, | ||||
|                                 CURL *easy, | ||||
|                                 size_t num_headers, | ||||
|                                 struct curl_pushheaders *headers, | ||||
|                                 void *userp) | ||||
| { | ||||
|   char *headp; | ||||
|   size_t i; | ||||
|   int *transfers = (int *)userp; | ||||
|   char filename[128]; | ||||
|   FILE *out; | ||||
|   static unsigned int count = 0; | ||||
|  | ||||
|   (void)parent; /* we have no use for this */ | ||||
|  | ||||
|   sprintf(filename, "push%u", count++); | ||||
|  | ||||
|   /* here's a new stream, save it in a new file for each new push */ | ||||
|   out = fopen(filename, "wb"); | ||||
|  | ||||
|   /* write to this file */ | ||||
|   curl_easy_setopt(easy, CURLOPT_WRITEDATA, out); | ||||
|  | ||||
|   fprintf(stderr, "**** push callback approves stream %u, got %d headers!\n", | ||||
|           count, (int)num_headers); | ||||
|  | ||||
|   for(i=0; i<num_headers; i++) { | ||||
|     headp = curl_pushheader_bynum(headers, i); | ||||
|     fprintf(stderr, "**** header %u: %s\n", (int)i, headp); | ||||
|   } | ||||
|  | ||||
|   headp = curl_pushheader_byname(headers, ":path"); | ||||
|   if(headp) { | ||||
|     fprintf(stderr, "**** The PATH is %s\n", headp /* skip :path + colon */ ); | ||||
|   } | ||||
|  | ||||
|   (*transfers)++; /* one more */ | ||||
|   return CURL_PUSH_OK; | ||||
| } | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Download a file over HTTP/2, take care of server push. | ||||
|  */ | ||||
| int main(void) | ||||
| { | ||||
|   CURL *easy; | ||||
|   CURLM *multi_handle; | ||||
|   int still_running; /* keep number of running handles */ | ||||
|   int transfers=1; /* we start with one */ | ||||
|   struct CURLMsg *m; | ||||
|  | ||||
|   /* init a multi stack */ | ||||
|   multi_handle = curl_multi_init(); | ||||
|  | ||||
|   easy = curl_easy_init(); | ||||
|  | ||||
|   /* set options */ | ||||
|   setup(easy); | ||||
|  | ||||
|   /* add the easy transfer */ | ||||
|   curl_multi_add_handle(multi_handle, easy); | ||||
|  | ||||
|   curl_multi_setopt(multi_handle, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX); | ||||
|   curl_multi_setopt(multi_handle, CURLMOPT_PUSHFUNCTION, server_push_callback); | ||||
|   curl_multi_setopt(multi_handle, CURLMOPT_PUSHDATA, &transfers); | ||||
|  | ||||
|   /* we start some action by calling perform right away */ | ||||
|   curl_multi_perform(multi_handle, &still_running); | ||||
|  | ||||
|   do { | ||||
|     struct timeval timeout; | ||||
|     int rc; /* select() return code */ | ||||
|     CURLMcode mc; /* curl_multi_fdset() return code */ | ||||
|  | ||||
|     fd_set fdread; | ||||
|     fd_set fdwrite; | ||||
|     fd_set fdexcep; | ||||
|     int maxfd = -1; | ||||
|  | ||||
|     long curl_timeo = -1; | ||||
|  | ||||
|     FD_ZERO(&fdread); | ||||
|     FD_ZERO(&fdwrite); | ||||
|     FD_ZERO(&fdexcep); | ||||
|  | ||||
|     /* set a suitable timeout to play around with */ | ||||
|     timeout.tv_sec = 1; | ||||
|     timeout.tv_usec = 0; | ||||
|  | ||||
|     curl_multi_timeout(multi_handle, &curl_timeo); | ||||
|     if(curl_timeo >= 0) { | ||||
|       timeout.tv_sec = curl_timeo / 1000; | ||||
|       if(timeout.tv_sec > 1) | ||||
|         timeout.tv_sec = 1; | ||||
|       else | ||||
|         timeout.tv_usec = (curl_timeo % 1000) * 1000; | ||||
|     } | ||||
|  | ||||
|     /* get file descriptors from the transfers */ | ||||
|     mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); | ||||
|  | ||||
|     if(mc != CURLM_OK) { | ||||
|       fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc); | ||||
|       break; | ||||
|     } | ||||
|  | ||||
|     /* On success the value of maxfd is guaranteed to be >= -1. We call | ||||
|        select(maxfd + 1, ...); specially in case of (maxfd == -1) there are | ||||
|        no fds ready yet so we call select(0, ...) --or Sleep() on Windows-- | ||||
|        to sleep 100ms, which is the minimum suggested value in the | ||||
|        curl_multi_fdset() doc. */ | ||||
|  | ||||
|     if(maxfd == -1) { | ||||
| #ifdef _WIN32 | ||||
|       Sleep(100); | ||||
|       rc = 0; | ||||
| #else | ||||
|       /* Portable sleep for platforms other than Windows. */ | ||||
|       struct timeval wait = { 0, 100 * 1000 }; /* 100ms */ | ||||
|       rc = select(0, NULL, NULL, NULL, &wait); | ||||
| #endif | ||||
|     } | ||||
|     else { | ||||
|       /* Note that on some platforms 'timeout' may be modified by select(). | ||||
|          If you need access to the original value save a copy beforehand. */ | ||||
|       rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); | ||||
|     } | ||||
|  | ||||
|     switch(rc) { | ||||
|     case -1: | ||||
|       /* select error */ | ||||
|       break; | ||||
|     case 0: | ||||
|     default: | ||||
|       /* timeout or readable/writable sockets */ | ||||
|       curl_multi_perform(multi_handle, &still_running); | ||||
|       break; | ||||
|     } | ||||
|  | ||||
|     /* | ||||
|      * A little caution when doing server push is that libcurl itself has | ||||
|      * created and added one or more easy handles but we need to clean them up | ||||
|      * when we are done. | ||||
|      */ | ||||
|  | ||||
|     do { | ||||
|       int msgq = 0;; | ||||
|       m = curl_multi_info_read(multi_handle, &msgq); | ||||
|       if(m && (m->msg == CURLMSG_DONE)) { | ||||
|         CURL *e = m->easy_handle; | ||||
|         transfers--; | ||||
|         curl_multi_remove_handle(multi_handle, e); | ||||
|         curl_easy_cleanup(e); | ||||
|       } | ||||
|     } while(m); | ||||
|  | ||||
|   } while(transfers); /* as long as we have transfers going */ | ||||
|  | ||||
|   curl_multi_cleanup(multi_handle); | ||||
|  | ||||
|  | ||||
|   return 0; | ||||
| } | ||||
							
								
								
									
										357
									
								
								docs/examples/http2-upload.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										357
									
								
								docs/examples/http2-upload.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,357 @@ | ||||
| /*************************************************************************** | ||||
|  *                                  _   _ ____  _ | ||||
|  *  Project                     ___| | | |  _ \| | | ||||
|  *                             / __| | | | |_) | | | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
|  * are also available at http://curl.haxx.se/docs/copyright.html. | ||||
|  * | ||||
|  * You may opt to use, copy, modify, merge, publish, distribute and/or sell | ||||
|  * copies of the Software, and permit persons to whom the Software is | ||||
|  * furnished to do so, under the terms of the COPYING file. | ||||
|  * | ||||
|  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* <DESC> | ||||
|  * Multiplexed HTTP/2 uploads over a single connection | ||||
|  * </DESC> | ||||
|  */ | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
| #include <fcntl.h> | ||||
| #include <sys/stat.h> | ||||
|  | ||||
| /* somewhat unix-specific */ | ||||
| #include <sys/time.h> | ||||
| #include <unistd.h> | ||||
|  | ||||
| /* curl stuff */ | ||||
| #include <curl/curl.h> | ||||
|  | ||||
| #ifndef CURLPIPE_MULTIPLEX | ||||
| /* This little trick will just make sure that we don't enable pipelining for | ||||
|    libcurls old enough to not have this symbol. It is _not_ defined to zero in | ||||
|    a recent libcurl header. */ | ||||
| #define CURLPIPE_MULTIPLEX 0 | ||||
| #endif | ||||
|  | ||||
| #define NUM_HANDLES 1000 | ||||
|  | ||||
| void *curl_hnd[NUM_HANDLES]; | ||||
| int num_transfers; | ||||
|  | ||||
| /* a handle to number lookup, highly ineffective when we do many | ||||
|    transfers... */ | ||||
| static int hnd2num(CURL *hnd) | ||||
| { | ||||
|   int i; | ||||
|   for(i=0; i< num_transfers; i++) { | ||||
|     if(curl_hnd[i] == hnd) | ||||
|       return i; | ||||
|   } | ||||
|   return 0; /* weird, but just a fail-safe */ | ||||
| } | ||||
|  | ||||
| static | ||||
| void dump(const char *text, int num, unsigned char *ptr, size_t size, | ||||
|           char nohex) | ||||
| { | ||||
|   size_t i; | ||||
|   size_t c; | ||||
|   unsigned int width=0x10; | ||||
|  | ||||
|   if(nohex) | ||||
|     /* without the hex output, we can fit more on screen */ | ||||
|     width = 0x40; | ||||
|  | ||||
|   fprintf(stderr, "%d %s, %ld bytes (0x%lx)\n", | ||||
|           num, text, (long)size, (long)size); | ||||
|  | ||||
|   for(i=0; i<size; i+= width) { | ||||
|  | ||||
|     fprintf(stderr, "%4.4lx: ", (long)i); | ||||
|  | ||||
|     if(!nohex) { | ||||
|       /* hex not disabled, show it */ | ||||
|       for(c = 0; c < width; c++) | ||||
|         if(i+c < size) | ||||
|           fprintf(stderr, "%02x ", ptr[i+c]); | ||||
|         else | ||||
|           fputs("   ", stderr); | ||||
|     } | ||||
|  | ||||
|     for(c = 0; (c < width) && (i+c < size); c++) { | ||||
|       /* check for 0D0A; if found, skip past and start a new line of output */ | ||||
|       if (nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) { | ||||
|         i+=(c+2-width); | ||||
|         break; | ||||
|       } | ||||
|       fprintf(stderr, "%c", | ||||
|               (ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:'.'); | ||||
|       /* check again for 0D0A, to avoid an extra \n if it's at width */ | ||||
|       if (nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) { | ||||
|         i+=(c+3-width); | ||||
|         break; | ||||
|       } | ||||
|     } | ||||
|     fputc('\n', stderr); /* newline */ | ||||
|   } | ||||
| } | ||||
|  | ||||
| static | ||||
| int my_trace(CURL *handle, curl_infotype type, | ||||
|              char *data, size_t size, | ||||
|              void *userp) | ||||
| { | ||||
|   char timebuf[20]; | ||||
|   const char *text; | ||||
|   int num = hnd2num(handle); | ||||
|   static time_t epoch_offset; | ||||
|   static int    known_offset; | ||||
|   struct timeval tv; | ||||
|   time_t secs; | ||||
|   struct tm *now; | ||||
|  | ||||
|   (void)handle; /* prevent compiler warning */ | ||||
|   (void)userp; | ||||
|  | ||||
|   gettimeofday(&tv, NULL); | ||||
|   if(!known_offset) { | ||||
|     epoch_offset = time(NULL) - tv.tv_sec; | ||||
|     known_offset = 1; | ||||
|   } | ||||
|   secs = epoch_offset + tv.tv_sec; | ||||
|   now = localtime(&secs);  /* not thread safe but we don't care */ | ||||
|   snprintf(timebuf, sizeof(timebuf), "%02d:%02d:%02d.%06ld", | ||||
|            now->tm_hour, now->tm_min, now->tm_sec, (long)tv.tv_usec); | ||||
|  | ||||
|   switch (type) { | ||||
|   case CURLINFO_TEXT: | ||||
|     fprintf(stderr, "%s [%d] Info: %s", timebuf, num, data); | ||||
|   default: /* in case a new one is introduced to shock us */ | ||||
|     return 0; | ||||
|  | ||||
|   case CURLINFO_HEADER_OUT: | ||||
|     text = "=> Send header"; | ||||
|     break; | ||||
|   case CURLINFO_DATA_OUT: | ||||
|     text = "=> Send data"; | ||||
|     break; | ||||
|   case CURLINFO_SSL_DATA_OUT: | ||||
|     text = "=> Send SSL data"; | ||||
|     break; | ||||
|   case CURLINFO_HEADER_IN: | ||||
|     text = "<= Recv header"; | ||||
|     break; | ||||
|   case CURLINFO_DATA_IN: | ||||
|     text = "<= Recv data"; | ||||
|     break; | ||||
|   case CURLINFO_SSL_DATA_IN: | ||||
|     text = "<= Recv SSL data"; | ||||
|     break; | ||||
|   } | ||||
|  | ||||
|   dump(text, num, (unsigned char *)data, size, 1); | ||||
|   return 0; | ||||
| } | ||||
|  | ||||
| struct input { | ||||
|   FILE *in; | ||||
|   size_t bytes_read; /* count up */ | ||||
|   CURL *hnd; | ||||
| }; | ||||
|  | ||||
| static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userp) | ||||
| { | ||||
|   struct input *i = userp; | ||||
|   size_t retcode = fread(ptr, size, nmemb, i->in); | ||||
|   i->bytes_read += retcode; | ||||
|   return retcode; | ||||
| } | ||||
|  | ||||
| struct input indata[NUM_HANDLES]; | ||||
|  | ||||
| static void setup(CURL *hnd, int num, const char *upload) | ||||
| { | ||||
|   FILE *out; | ||||
|   char url[256]; | ||||
|   char filename[128]; | ||||
|   struct stat file_info; | ||||
|   curl_off_t uploadsize; | ||||
|  | ||||
|   sprintf(filename, "dl-%d", num); | ||||
|   out = fopen(filename, "wb"); | ||||
|  | ||||
|   sprintf(url, "https://localhost:8443/upload-%d", num); | ||||
|  | ||||
|   /* get the file size of the local file */ | ||||
|   stat(upload, &file_info); | ||||
|   uploadsize = file_info.st_size; | ||||
|  | ||||
|   indata[num].in = fopen(upload, "rb"); | ||||
|   indata[num].hnd = hnd; | ||||
|  | ||||
|   /* write to this file */ | ||||
|   curl_easy_setopt(hnd, CURLOPT_WRITEDATA, out); | ||||
|  | ||||
|   /* we want to use our own read function */ | ||||
|   curl_easy_setopt(hnd, CURLOPT_READFUNCTION, read_callback); | ||||
|   /* read from this file */ | ||||
|   curl_easy_setopt(hnd, CURLOPT_READDATA, &indata[num]); | ||||
|   /* provide the size of the upload */ | ||||
|   curl_easy_setopt(hnd, CURLOPT_INFILESIZE_LARGE, uploadsize); | ||||
|  | ||||
|   /* send in the URL to store the upload as */ | ||||
|   curl_easy_setopt(hnd, CURLOPT_URL, url); | ||||
|  | ||||
|   /* upload please */ | ||||
|   curl_easy_setopt(hnd, CURLOPT_UPLOAD, 1L); | ||||
|  | ||||
|   /* send it verbose for max debuggaility */ | ||||
|   curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); | ||||
|   curl_easy_setopt(hnd, CURLOPT_DEBUGFUNCTION, my_trace); | ||||
|  | ||||
|   /* HTTP/2 please */ | ||||
|   curl_easy_setopt(hnd, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0); | ||||
|  | ||||
|   /* we use a self-signed test server, skip verification during debugging */ | ||||
|   curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYPEER, 0L); | ||||
|   curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYHOST, 0L); | ||||
|  | ||||
| #if (CURLPIPE_MULTIPLEX > 0) | ||||
|   /* wait for pipe connection to confirm */ | ||||
|   curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L); | ||||
| #endif | ||||
|  | ||||
|   curl_hnd[num] = hnd; | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * Upload all files over HTTP/2, using the same physical connection! | ||||
|  */ | ||||
| int main(int argc, char **argv) | ||||
| { | ||||
|   CURL *easy[NUM_HANDLES]; | ||||
|   CURLM *multi_handle; | ||||
|   int i; | ||||
|   int still_running; /* keep number of running handles */ | ||||
|   const char *filename = "index.html"; | ||||
|  | ||||
|   if(argc > 1) | ||||
|     /* if given a number, do that many transfers */ | ||||
|     num_transfers = atoi(argv[1]); | ||||
|  | ||||
|   if(argc > 2) | ||||
|     /* if given a file name, upload this! */ | ||||
|     filename = argv[2]; | ||||
|  | ||||
|   if(!num_transfers || (num_transfers > NUM_HANDLES)) | ||||
|     num_transfers = 3; /* a suitable low default */ | ||||
|  | ||||
|   /* init a multi stack */ | ||||
|   multi_handle = curl_multi_init(); | ||||
|  | ||||
|   for(i=0; i<num_transfers; i++) { | ||||
|     easy[i] = curl_easy_init(); | ||||
|     /* set options */ | ||||
|     setup(easy[i], i, filename); | ||||
|  | ||||
|     /* add the individual transfer */ | ||||
|     curl_multi_add_handle(multi_handle, easy[i]); | ||||
|   } | ||||
|  | ||||
|   curl_multi_setopt(multi_handle, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX); | ||||
|  | ||||
|   /* We do HTTP/2 so let's stick to one connection per host */ | ||||
|   curl_multi_setopt(multi_handle, CURLMOPT_MAX_HOST_CONNECTIONS, 1L); | ||||
|  | ||||
|   /* we start some action by calling perform right away */ | ||||
|   curl_multi_perform(multi_handle, &still_running); | ||||
|  | ||||
|   do { | ||||
|     struct timeval timeout; | ||||
|     int rc; /* select() return code */ | ||||
|     CURLMcode mc; /* curl_multi_fdset() return code */ | ||||
|  | ||||
|     fd_set fdread; | ||||
|     fd_set fdwrite; | ||||
|     fd_set fdexcep; | ||||
|     int maxfd = -1; | ||||
|  | ||||
|     long curl_timeo = -1; | ||||
|  | ||||
|     FD_ZERO(&fdread); | ||||
|     FD_ZERO(&fdwrite); | ||||
|     FD_ZERO(&fdexcep); | ||||
|  | ||||
|     /* set a suitable timeout to play around with */ | ||||
|     timeout.tv_sec = 1; | ||||
|     timeout.tv_usec = 0; | ||||
|  | ||||
|     curl_multi_timeout(multi_handle, &curl_timeo); | ||||
|     if(curl_timeo >= 0) { | ||||
|       timeout.tv_sec = curl_timeo / 1000; | ||||
|       if(timeout.tv_sec > 1) | ||||
|         timeout.tv_sec = 1; | ||||
|       else | ||||
|         timeout.tv_usec = (curl_timeo % 1000) * 1000; | ||||
|     } | ||||
|  | ||||
|     /* get file descriptors from the transfers */ | ||||
|     mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); | ||||
|  | ||||
|     if(mc != CURLM_OK) | ||||
|     { | ||||
|       fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc); | ||||
|       break; | ||||
|     } | ||||
|  | ||||
|     /* On success the value of maxfd is guaranteed to be >= -1. We call | ||||
|        select(maxfd + 1, ...); specially in case of (maxfd == -1) there are | ||||
|        no fds ready yet so we call select(0, ...) --or Sleep() on Windows-- | ||||
|        to sleep 100ms, which is the minimum suggested value in the | ||||
|        curl_multi_fdset() doc. */ | ||||
|  | ||||
|     if(maxfd == -1) { | ||||
| #ifdef _WIN32 | ||||
|       Sleep(100); | ||||
|       rc = 0; | ||||
| #else | ||||
|       /* Portable sleep for platforms other than Windows. */ | ||||
|       struct timeval wait = { 0, 100 * 1000 }; /* 100ms */ | ||||
|       rc = select(0, NULL, NULL, NULL, &wait); | ||||
| #endif | ||||
|     } | ||||
|     else { | ||||
|       /* Note that on some platforms 'timeout' may be modified by select(). | ||||
|          If you need access to the original value save a copy beforehand. */ | ||||
|       rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); | ||||
|     } | ||||
|  | ||||
|     switch(rc) { | ||||
|     case -1: | ||||
|       /* select error */ | ||||
|       break; | ||||
|     case 0: | ||||
|     default: | ||||
|       /* timeout or readable/writable sockets */ | ||||
|       curl_multi_perform(multi_handle, &still_running); | ||||
|       break; | ||||
|     } | ||||
|   } while(still_running); | ||||
|  | ||||
|   curl_multi_cleanup(multi_handle); | ||||
|  | ||||
|   for(i=0; i<num_transfers; i++) | ||||
|     curl_easy_cleanup(easy[i]); | ||||
|  | ||||
|   return 0; | ||||
| } | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,10 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* <DESC> | ||||
|  * HTTP request with custom modified, removed and added headers | ||||
|  * </DESC> | ||||
|  */ | ||||
| #include <stdio.h> | ||||
| #include <curl/curl.h> | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,10 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* <DESC> | ||||
|  * HTTP PUT with easy interface and read callback | ||||
|  * </DESC> | ||||
|  */ | ||||
| #include <stdio.h> | ||||
| #include <fcntl.h> | ||||
| #include <sys/stat.h> | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,10 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* <DESC> | ||||
|  * Simple HTTPS GET | ||||
|  * </DESC> | ||||
|  */ | ||||
| #include <stdio.h> | ||||
| #include <curl/curl.h> | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,12 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| /* <DESC> | ||||
|  * IMAP example showing how to send e-mails | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
| #include <curl/curl.h> | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,12 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| /* <DESC> | ||||
|  * IMAP example showing how to copy an e-mail from one folder to another | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <curl/curl.h> | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,12 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| /* <DESC> | ||||
|  * IMAP example showing how to create a new folder | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <curl/curl.h> | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,12 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| /* <DESC> | ||||
|  * IMAP example showing how to delete a folder | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <curl/curl.h> | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,12 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| /* <DESC> | ||||
|  * IMAP example showing how to obtain information about a folder | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <curl/curl.h> | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,12 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| /* <DESC> | ||||
|  * IMAP example showing how to retreieve e-mails | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <curl/curl.h> | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,12 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| /* <DESC> | ||||
|  * IMAP example to list the folders within a mailbox | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <curl/curl.h> | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,12 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| /* <DESC> | ||||
|  * IMAP example to list the subscribed folders | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <curl/curl.h> | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,7 +19,14 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| /* <DESC> | ||||
|  * IMAP example using the multi interface | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
| #include <curl/curl.h> | ||||
|  | ||||
| /* This is a simple example showing how to fetch mail using libcurl's IMAP | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,12 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| /* <DESC> | ||||
|  * IMAP example showing how to perform a noop | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <curl/curl.h> | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,12 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| /* <DESC> | ||||
|  * IMAP example showing how to search for new e-mails | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <curl/curl.h> | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,12 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| /* <DESC> | ||||
|  * IMAP example using SSL | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <curl/curl.h> | ||||
|  | ||||
| @@ -60,7 +66,7 @@ int main(void) | ||||
|      * they have mentioned in their server certificate's commonName (or | ||||
|      * subjectAltName) fields, libcurl will refuse to connect. You can skip | ||||
|      * this check, but this will make the connection less secure. */ | ||||
| #ifdef SKIP_HOSTNAME_VERFICATION | ||||
| #ifdef SKIP_HOSTNAME_VERIFICATION | ||||
|     curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); | ||||
| #endif | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,12 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| /* <DESC> | ||||
|  * IMAP example showing how to modify the properties of an e-mail | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <curl/curl.h> | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,12 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| /* <DESC> | ||||
|  * IMAP example using TLS | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <curl/curl.h> | ||||
|  | ||||
|   | ||||
| @@ -19,10 +19,6 @@ | ||||
| # KIND, either express or implied. | ||||
| # | ||||
| ########################################################################### | ||||
| # | ||||
| #  Adapted for djgpp / Watt-32 / DOS by | ||||
| #  Gisle Vanem <gvanem@broadpark.no> | ||||
| # | ||||
|  | ||||
| TOPDIR = ../.. | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,7 +19,10 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* This is an example showing the multi interface and the debug callback. */ | ||||
| /* <DESC> | ||||
|  * multi interface and debug callback | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,6 +19,10 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* <DESC> | ||||
|  * multi interface code doing two parallel HTTP transfers | ||||
|  * </DESC> | ||||
|  */ | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,8 +19,11 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* This is an example application source code using the multi interface | ||||
|  * to do a multipart formpost without "blocking". */ | ||||
| /* <DESC> | ||||
|  * using the multi interface to do a multipart formpost without blocking | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
| #include <sys/time.h> | ||||
| @@ -64,7 +67,7 @@ int main(void) | ||||
|   curl = curl_easy_init(); | ||||
|   multi_handle = curl_multi_init(); | ||||
|  | ||||
|   /* initalize custom header list (stating that Expect: 100-continue is not | ||||
|   /* initialize custom header list (stating that Expect: 100-continue is not | ||||
|      wanted */ | ||||
|   headerlist = curl_slist_append(headerlist, buf); | ||||
|   if(curl && multi_handle) { | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  *                            | (__| |_| |  _ <| |___ | ||||
|  *                             \___|\___/|_| \_\_____| | ||||
|  * | ||||
|  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al. | ||||
|  * | ||||
|  * This software is licensed as described in the file COPYING, which | ||||
|  * you should have received as part of this distribution. The terms | ||||
| @@ -19,7 +19,10 @@ | ||||
|  * KIND, either express or implied. | ||||
|  * | ||||
|  ***************************************************************************/ | ||||
| /* This is a very simple example using the multi interface. */ | ||||
| /* <DESC> | ||||
|  * using the multi interface to do a single download | ||||
|  * </DESC> | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
| @@ -76,12 +79,12 @@ int main(void) | ||||
|  | ||||
|     if(mc != CURLM_OK) | ||||
|     { | ||||
|       fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc); | ||||
|       fprintf(stderr, "curl_multi_wait() failed, code %d.\n", mc); | ||||
|       break; | ||||
|     } | ||||
|  | ||||
|     /* 'numfds' being zero means either a timeout or no file descriptors to | ||||
|        wait for. Try timeout on first occurance, then assume no file | ||||
|        wait for. Try timeout on first occurrence, then assume no file | ||||
|        descriptors and no file descriptors to wait for means wait for 100 | ||||
|        milliseconds. */ | ||||
|  | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user